使用MySQL审计Plugin
本文来源:http://blog.chinaunix.net/uid-20785090-id-5018977.html
越来越多的企业把应用往mysql上迁移,这时候对数据库的审计又成了一件紧急的事情.
mysql社区版本身不带有审计功能,而官方提供的审计plugin在企业版才有提供。通过
gerneral log或是slow query log又不能满足需要,很多有实力的公司转而自行开发或是
使用第三方提供的plug,本文介绍的是使用marindb提供的plugin.
MariaDB Audit Plugin在percona,mysql的版本上都能够很好的运行,笔者测试5.5和5.6
都能够稳定支持 ,audit plugin使用的是1.2的版本
mysql> show global variables like '%plugin_dir%';
+---------------+------------------------------------+
| Variable_name | Value |
+---------------+------------------------------------+
| plugin_dir | /usr/local/mysql/lib/mysql/plugin/ |
+---------------+------------------------------------+
拷贝server_audit.so到plugin目录中,然后安装plugin
mysql> install plugin server_audit soname 'server_audit.so';
Query OK, 0 rows affected (0.02 sec)
查看server_audit的相关变量
mysql> show global variables like '%server_audit%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| server_audit_events | |
| server_audit_excl_users | |
| server_audit_file_path | server_audit.log |
| server_audit_file_rotate_now | OFF |
| server_audit_file_rotate_size | 1000000 |
| server_audit_file_rotations | 9 |
| server_audit_incl_users | |
| server_audit_logging | OFF |
| server_audit_mode | 1 |
| server_audit_output_type | file |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+-----------------------+
14 rows in set (0.00 sec)
server_audit_logging定义是否开启,server_audit_events定义了相关事件
常用审计事件有CONNECTION,QUERY,TABLE,QUERY_DDL,QUERY_DML
假设现在需要审计查询执行情况.
mysql> set global server_audit_events='QUERY';
Query OK, 0 rows affected (0.00 sec)
mysql> set global server_audit_LOGGING='ON';
Query OK, 0 rows affected (0.00 sec)
mysql> select count(*) from db1.t1;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.03 sec)
在server_audit.log中输出以下条目
20150509 13:07:05,c12.fb.com,root,localhost,2,1,QUERY,,'select count(*) from db1.t1',0
分别对应时间,服务器名,发布sql的用户名,主机,连接号,操作类型,语句文本和查询执行是否成功
详情可以参考https://mariadb.com/kb/en/mariadb/about-the-mariadb-audit-plugin/