数据库审计是把用户对数据库的操作记录到一个日志文件里面的一个功能。对于安全性要求比较高的网站,需要为数据库开启审计功能以便后期审查。开源的MySQL和MariaDB默认没有安装审计插件,我们需要手动安装以便开启审计功能。
下载安装数据库审计插件
首先,我们需要从 https://github.com/mcafee/mysql-audit 下载数据库审计插件。
确定MySQL插件目录
在服务器上登录MySQL后,运行以下命令,命令输出中的 plugin_dir 就是我们需要确定的MySQL插件目录。
mysql> show global variables like 'plugin_dir';
+---------------+------------------------------+
| Variable_name | Value |
+---------------+------------------------------+
| plugin_dir | /usr/local/mysql/lib/plugin/ |
+---------------+------------------------------+
1 row in set (0.01 sec)
复制审计插件到MySQL插件目录,并赋予适当的权限
[root@centos]/opt# cp /opt/audit/lib/libaudit_plugin.so /usr/local/mysql/lib/plugin/
[root@centos]/opt# chown -R mysql:mysql /usr/local/mysql/lib/plugin/libaudit_plugin.so
通过MySQL命令安装审计插件
mysql> INSTALL PLUGIN AUDIT SONAME 'libaudit_plugin.so';
Query OK, 0 rows affected (0.42 sec)
如果安装插件时报以下错误,可以尝试用插件安装包中的offset-extract.sh
来提取当前数据库的offsets,添加到审计配置中,然后重试。
ERROR 1123 (HY000): Can't initialize function 'AUDIT'; Plugin initialization function failed.
在MySQL配置文件中添加审计配置
[mysqld]
audit_json_file = on
plugin-load=AUDIT=libaudit_plugin.so
audit_record_cmds='insert,delete,update,create,drop,alter,grant,truncate'
audit_json_log_file=/home/mysql/mysql-audit.json
audit_offsets = 8544, 8584, 4064, 5536, 520, 0, 0, 32, 64, 160, 608, 8700, 5168, 4208, 4216, 4220, 6840, 1656, 32, 7800, 7840, 7824, 11624, 140, 664, 320
验证审计插件是否安装成功
安装插件中,重启数据库服务,然后运行 show plugins;
命令插件已安装的插件,如果结果中有AUDIT,说明已经安装成功。
安装审计插件时的注意事项
- 审计插件对数据库版本的要求比较严格,目前在Ubuntu 22.04上,MySQL 8.0.25 经测试可以安装,其他版本请自行测试。
- 需要先创建mysql-audit.json审计日志文件,并赋予正确权限后才能记录审计日志
- 执行 offset-extract.sh 需要先安装 gdb
apt install gdb