专栏首页杨建荣的学习笔记MySQL审计插件使用和对比

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),作者:r14笔记第18天

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL日志故障的处理和分析

    有一台预上线的服务器最近在做压力测试,也引发了一系列的相关问题,排查思路可以提供参考。

    jeanron100
  • 使用sysbench压力测试MySQL(二)

    昨天有了第一篇的测试之后,仅仅是一个开始。 我接下来做sysbench压测的主要思路是根据现有的配置作出调整,能够持续性的优化和压力测试达到目的,而...

    jeanron100
  • Linux下配置MySQL主从复制(r5笔记第13天)

    MySQL的主从复制是自己一直想学习的一个实战经历,因为Oracle中的主从复制也是需要不少的配置选项,相比来说感觉重量级一些(数据量也重量级). 今天试了一下...

    jeanron100
  • 动手实践:美化 Jenkins 报告插件的用户界面

    对于 Jenkins 而言,可使用插件来可视化各种构建步骤的结果。有一些插件可用于呈现测试结果、代码覆盖率、静态分析等。这些插件通常都会获取给定构建步骤的构建结...

    LinuxSuRen
  • Web前端学习 第4章 jQuery 3 jQuery插件

    jQuery插件就是别人已经开发好弄的,我们直接约会就可以使用。并且基于jQuery制作的,可以实现某些特定的网页效果的js文件(js + css)。

    学习猿地
  • 一起来编程吧,CodeLove初版发布

    也就是让bat可以执行SQL、JS、C#表达式、发送邮件等等,当我做的差不多的时候,面临着不断的加班,于是暂时搁浅了。在沉寂的日子里,陆陆续续的想了很多,发...

    雪雁-心莱科技
  • Carousel 旋转画廊特效的疑难杂症

    疑难杂症 该画廊特效的特点就是前后元素有层级关系。 我想很多人应该看过或者用过这个插件carousel.js,网上也有相关的教程。不知道这个插件的原型是哪个,有...

    叙帝利
  • Golang 反射

    在Go语言中,大多数时候值/类型/函数非常直接,要的话,定义一个。你想要个Struct

    李海彬
  • IntelliJ IDEA 重大更新:支持 CPU 火焰图,新增酷炫主题

    就在上周,JetBrain 公司发布了 Java 集成开发环境 IntelliJ IDEA 最新版本 2018.3Beta,本篇文章,我将根据官方博客以及自己的...

    芋道源码
  • Go基础之--反射

    反射:可以在运行时动态获取变量的相关信息 反射需要导入reflect 反射中重要函数的演示 反射有几下几个重要的函数: reflect.TypeOf :获取变量...

    coders

扫码关注云+社区

领取腾讯云代金券