前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL审计插件使用和对比

MySQL审计插件使用和对比

作者头像
jeanron100
发布2018-03-22 10:35:05
3.9K0
发布2018-03-22 10:35:05
举报
文章被收录于专栏:杨建荣的学习笔记

数据库审计是数据库安全中很重要的一个环节,说到审计,有些上市公司内部还会根据塞班斯法案,进行404审计等等。

而最基本的审计还是需要的,有些同学可能感觉审计会有些鸡肋,其实非也,开审计的功能势必会影响性能,如果不开又会有遗漏,这种防患于未然,把问题都扼杀在摇篮之中,通过这种规范和制度来做最后一道防线。

MySQL中也需要审计,不说大的方向,就说和我们工作更贴近的,比如某一个业务在某个时间点出现了异常,因为异常操作(比如DDL)导致系统出现了严重的问题,这个时候如果要查看这个问题的具体情况,谁登陆了系统,什么时候登陆的,做了什么操作等等。通过审计的方式就很奏效。所以尽管说社区版是没有审计插件的,但是我们还是需要考虑审计,只是实现方式不同而已。

说到数据库审计的方案,MySQL社区版是没有审计插件的,而在商业版中有,是需要单独收取licence费用的,对于公司的很多业务而言,还是会一些考虑,所以我们更倾向于看看还有哪些方案可以实现。

大体来说除了商业版的审计插件外,还有三类审计插件可以考虑:

Percona自带的审计插件audit log,

MariaDB的审计插件server audit,

Mcafee的审计插件,已经在github上开源。

因为我们规划软件版本的时候是选择Percona分支,并且Percona自带了审计插件,所以我们就毫不犹豫的先选定了这个审计插件。但是实际的测试来看,和我们的预期还是有一定的差距。

MariaDB的方案有很多朋友推荐我试试,在Percona测试之后,看了下MariaDB的方案,测试效果非常不错,有个顾虑就是MySQL 5.7是否会和这个插件有兼容性和冲突,官方给出了说明,使用小版本5和大版本10的插件都可以,如此一来,有了功能,有了用户基础,所以就更倾向于这个方案。

还有McAfee的审计插件,McAfee是全球最大的专业安全公司,它的审计插件我看了下使用情况,在MySQL 5.5,5.6中使用相对比较多,我们规划的版本是MySQL 5.7,所以权衡下来不是太倾向这个插件。

我的测试就基于Percona和MariaDB的审计插件

Percona的审计插件安装可以使用如下的命令:

install plugin audit_log soname 'audit_log.so';

查看审计插件的情况可以直接通过关键字audit来看。

show global variables like 'audit%';

需要设置的参数为: audit_log_policy=ALL set global audit_log_format=JSON audit_log_file=/data/mysql_24405/log/audit.log audit_log_rotate_on_size=1024M audit_log_rotations=10

其中参数audit_log_policy是关键,参数选项有ALL(记录所有),LOGIN(记录登录登出信息),QUERY(只记录查询事件),NONE(不记录任何事件)

如果选择类型为ALL,运行命令show processlist,审计日志的内容大体如下:

{"audit_record":{"name":"Query","record":"20_2017-10-20T07:40:38","timestamp":"2017-10-20T07:42:13 UTC","command_class":"show_processlist","connection_id":"2","status":0,"sqltext":"show processlist","user":"root[root] @ localhost []","host":"localhost","os_user":"","ip":"","db":""}}

记录的信息还是很全的,哪怕你敲错了命令,也会在审计日志中记录下来。

我使用sysbench压测,开了600线程,压测5分钟。

sysbench /home/xxx/sysbench-master/src/lua/oltp_read_write.lua --mysql-user=root --mysql-port=24402 --mysql-socket=/data/mysql_24402/tmp/mysql.sock --mysql-host=localhost --mysql-db=test --tables=10 --table-size=10000000 --threads=600 --report-interval=5 --max-time=300 run 5分钟后,生成了将近1.5G的审计日志。如果选择了LOGIN,除了开始登录的日志,后面的压测几乎就没有任何日志,而QUERY的效果和ALL很相似,如此一来,想要实现细粒度的审计,按照目前的测试来看还是存在一些差距。

我又对比测试了MariaDB的方案。把so文件直接拷贝到Percona的plugin目录下即可。

安装插件。

INSTALL PLUGIN server_audit SONAME 'server_audit.so'; 可以根据需求设置如下的几个参数。 set global server_audit_events='CONNECT,QUERY_DDL,QUERY_DCL'; set global server_audit_file_rotate_size=1G; set global server_audit_file_rotate_now=on; set global server_audit_file_path='/data/mysql_xxx/log/new_audit.log'; set global server_audit_logging=on;

这个参数很有特点server_audit_events可以指定很细粒度的审计,比如DDL(create,alter这种语句),DCL(grant语句),DML等都可以指定范围。

登录到MySQL的审计日志如下:

20171020 17:22:00,tk-dba-mysql10-202,root,localhost,5,0,CONNECT,,,0

创建一个表test,SQL为:create table test_audit(id int primary key); 审计日志很短:

20171020 17:22:40,tk-dba-mysql0-202,root,localhost,5,18,QUERY,test,'create table test_audit(id int primary key)',0

同样的压测,大概有600M的日志,相比少了很多。

如果从性能的角度来说,MariaDB的插件对于性能的损耗最低。还是推荐使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档