实现步骤
1、获取审计插件 - libaudit_plugin.so
下载插件
下载地址:https://github.com/mcafee/mysql-audit/releases
本地解压后,在解压目录下找到审计插件libaudit_plugin.so
./audit-plugin-mysql-5.7-1.1.11-985/lib/libaudit_plugin.so
2、将审计插件server_audit.so复制到MySQL的plugin目录下,并授权
cp ./audit-plugin-mysql-5.7-1.1.11-985/lib/libaudit_plugin.so /data/mysql/6666/base/lib/plugin/
chown -R mysql:mysql libaudit_plugin.so
chmod 755 libaudit_plugin.so
3、进入MySQL客户端,安装插件
mysql> INSTALL PLUGIN AUDIT SONAME 'libaudit_plugin.so';
Query OK, 0 rows affected (1.08 sec)
mysql> show plugins;
+----------------------------+----------+--------------------+--------------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+--------------------+---------+
。。。。
| AUDIT | ACTIVE | AUDIT | libaudit_plugin.so | GPL |
+----------------------------+----------+--------------------+--------------------+---------+
47 rows in set (0.00 sec)
4、配置说明
同Mariadb的审计插件类似,当安装完审计插件之后,MySQL中将有一些新的全局变量,用于配置审计日志相关属性。
mysql> show variables like '%audit%';
部分变量说明,
变量名 获取源包名
audit_json_file 是否开启审计 ON/OFF;
默认值:OFF。
audit_json_log_file 设置日志文件的路径和文件名;
默认值:mysql-audit.json,默认路径:datadir。
audit_record_cmds 设置要记录的语句类型,例如:insert,update,delete ;
默认记录所有的命令。
audit_record_objs 设置要记录到审计跟踪的对象(表),例如:database.table,可以使用通配符。
audit_whitelist_cmds 设置不需要记录的语句类型。
audit_whitelist_users 设置不需要记录的用户。
audit_before_after 控制是在执行当前 SQL 语句之前还是之后写入其日志记录,或两者兼而有之。可能的值为'before'、'after'或'both',默认为'after'。
audit_json_file_flush 手工进行轮换日志。
audit_json_file_sync 控制日志刷写周期json,如果此变量的值为N(N≠0),则审计日志将在每N次写入后同步到磁盘。默认值:0 。
配置示例,
mysql> set global audit_json_file=on;
Query OK, 0 rows affected (0.01 sec)
mysql> set global audit_json_log_file='mysql_6666_audit.log';
Query OK, 0 rows affected (0.00 sec)
为了永久生效,必须还要在配置文件中添加如下内容,
这里仅定义了两项变量值供参考
[mysqld]
audit_json_file=on
audit_record_cmds='query_type' ##自定义需要记录的语句类型
……
5、审计日志结果说明
模拟相关操作(查询结果篇幅过长,省略部分内容)
[root@10-186-65-155 plugin]# /mysql -uroot -p123456
mysql> show databases;
mysql> select count(*) from mysql.user;
mysql> create database test;
mysql> use test;
Database changed
mysql> create table aaa(id int,name varchar(20),primary key(id));
mysql> insert into aaa values (1,'zhangsan'),(2,'lisi');
mysql> exit
Bye
[root@10-186-65-155 plugin]# /mysql -utest -p123456
Enter password:
mysql> use test;
mysql> select * from aaa;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
+----+----------+
根据以上的记录内容可总结审计日志的记录格式,
手工轮换日志:
set global audit_json_log_file='mysql_audit.json';
set global audit_json_file_flush=on;
优点
(1)使用json格式和内容明确且详细;
(2)审计粒度细:例如可通过audit_record_cmds和audit_record_objs等指定需要审计的内容;
(3)记录连接失败的语句(audit_force_record_logins参数值为on条件下);
(4)审计日志刷写策略可控,可通过audit_json_file_sync参数控制。
缺点
(1)对MySQL性能有一定影响;
(2)不记录下发错误的语句;
(3)审计日志维护管理不便,无自带审计日志切割轮换参数。