MySQL审计插件使用和对比

数据库审计是数据库安全中很重要的一个环节,说到审计,有些上市公司内部还会根据塞班斯法案,进行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的插件对于性能的损耗最低。还是推荐使用。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2017-10-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

使用 mytop 监控mysql性能状态

Linux 有个非常有用的 top 命令,可以查看操作系统的性能状态,mytop 命令类似 top 命令,界面结构也类似,只是 mytop 显示的是 mysql...

392140
来自专栏极客编程

用Node操作Firebird

  Firebird是一个跨平台的关系数据库系统,目前能够运行在Windows、linux和各种Unix操作系统上,提供了大部分SQL-99标准的功能。它既能作...

9720
来自专栏数据和云

安全预警:独立发布的Oracle严重 CVE-2018-3110 公告

在 2018年8月10日,Oracle 独立的发送了一封"安全警告"邮件给所有的 Oracle 用户,这封邮件的标题是:Oracle Security Aler...

15620
来自专栏数据和云

深入解析:由SQL解析失败看开发与DBA的性能之争

李华 云和恩墨高级技术顾问 以下案例来自大讲堂的一次分享,从这个案例中我们可以了解“错误的SQL”可能对数据库产生的种种影响。如何找到这些错误的、解析失败的S...

37150
来自专栏逸鹏说道

02.SQLServer性能优化之---牛逼的OSQL----大数据导入

汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 上一篇:01.SQLServer性能优化之---...

344120
来自专栏FreeBuf

32764端口后门重出江湖,影响多款路由器

在年初的时候已经发布关于秘密后门——“TCP 32764”的报道,利用该后门漏洞,未授权的攻击者可以通过该端口访问设备,以管理员权限在受影响设备上执行设置内置操...

23590
来自专栏pangguoming

(十一) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)

上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图...

18620
来自专栏小车博客

windows 10 DD包制作

45760
来自专栏Coding+

macOS 一键启动 AS 内置 AVD

通常我们使用 AS 自带的 AVD 都是通过 run 一个项目来自动启动它的,并且该 AVD 在外部也没有相应的启动快捷方式,本文就介绍一下 Win、Mac 等...

20540
来自专栏数据和云

MySQL DBA之路 | 性能配置调优篇

一、简介 数据库服务器需要CPU、内存、 磁盘和网络才能运行,了解这些资源对于DBA来说非常重要,因为任何的超载行为都可能成为限制因素,导致数据库服务器性能不佳...

48960

扫码关注云+社区

领取腾讯云代金券