MySQL McAfee审计插件Audit Plugin安装
官网下载:https://github.com/trellix-enterprise/mysql-audit/releases
官方文档:https://github.com/trellix-enterprise/mysql-audit/wiki
防爬虫:https://www.cnblogs.com/PiscesCanon/p/17324406.html
注意要对应你的数据库软件版本来下载,一开始我测试的MySQL是8.0.29。
Audit Plugin没有一个支持8.0.29的插件版本,于是用了下边截图这个,
默认我以为支持了8.0.30,也应该向下兼容29的版本,然后折腾半天就是无法安装成功,设置偏移量也是报错,后边升级成30就好了。
安装如下
查看插件目录位置。
(root@localhost 22:45:11) [performance_schema](27538)> show global variables like 'plugin_dir';
+---------------+------------------------------+
| Variable_name | Value |
+---------------+------------------------------+
| plugin_dir | /usr/local/mysql/lib/plugin/ |
+---------------+------------------------------+
1 row in set (0.10 sec)
解压并将libaudit_plugin.so文件拷贝到插件目录位置。
unzip audit-plugin-mysql-8.0-1.1.13-1008-linux-x86_64.zip
cd audit-plugin-mysql-8.0-1.1.13-1008/lib
chown mysql:mysql libaudit_plugin.so
cp -p libaudit_plugin.so /usr/local/mysql/lib/plugin/
安装插件。
在线安装,但是重启失效:
INSTALL PLUGIN AUDIT SONAME 'libaudit_plugin.so';
set global audit_json_file=on;
audit_json_file=on表示启用审计,上边只是安装插件而已。
永久生效的话将配置加入my.cnf中:
[mysqld]
plugin-load=AUDIT=libaudit_plugin.so
audit_whitelist_users=root,mysql.infoschema,mysql.session,mysql.sys
audit_json_file=on
audit_whitelist_users=root,mysql.infoschema,mysql.session,mysql.sys表示后边指定的用户不进行审计。
audit_json_file表示启用审计,第一条命令只是安装插件而已。
校验检查:
show plugins;
如果显示有“AUDIT”的话表示安装成功。
此外,也可以通过运行以下命令来验证 AUDIT 插件的版本:
(root@localhost 22:53:49) [performance_schema](27538)> show global status like 'AUDIT_version';
+---------------+-------------+
| Variable_name | Value |
+---------------+-------------+
| Audit_version | 1.1.13-1008 |
+---------------+-------------+
1 row in set (0.01 sec)
审计日志文件默认名字为:mysql-audit.json,位于数据文件目录下。
可通过audit_json_log_file=/data/logs/mysql/mysql_audit.json同时修改位置和文件名。
摘取日志一行内容:
{"msg-type":"activity","date":"1681657153276","thread-id":"27591","query-id":"38716111","user":"midb_decl","priv_user":"midb_decl","ip":"192.168.1.153","host":"192.168.1.153","_client_name":"libmysql","_thread":"4580","_client_version":"8.0.31","_os":"win","_platform":"AMD64","_pid":"2980","rows":"1","status":"0","cmd":"select","query":"SELECT 0"}
其他都好理解,这个“date”的表示方法简直无语,UTC下的unix毫秒级的时间戳。
下边展示如何转化为人能看懂的方法。
(root@localhost 23:03:24) [performance_schema](27631)> select FROM_UNIXTIME(1681657153276/1000,'%Y-%m-%d %H:%i:%s') as date;
+---------------------+
| date |
+---------------------+
| 2023-04-16 22:59:13 |
+---------------------+
1 row in set (0.00 sec)
反过来,查看当前时间,展示为UTC的unix毫秒级时间戳。
[root@dev-app81 ~]# echo $[`date -u +%s`*1000]
1681657641000
也可指定时间,
[root@dev-app81 ~]# echo $[`date -d "2023-04-13 15:32:12" +%s`*1000]
1681371132000
就这样吧。
更加详细的用法信息查看官方文档。
这里也有一篇各个审计方式的介绍,挺全面。
推荐看看:MySQL的审计功能实现方案