MySQL社区版本没有官方的审计插件,可选择的只有MariaDB的审计插件和Mcafee.其中由于我们环境使用的MySQL8, 而MariaDB的审计插件不支持MySQL8,所以只有选择Mcafee.
建议 1: 如果是您的MySQL版本为5.7时,建议使用MariaDB的审计插件.
Mcafeex需要关闭SElinux,可以参考文档,可以先临时关闭(不用重启服务器):
setenforce 0
在下载Mcafee之前,请使用下面的命令查看你的MySQL版本:
mysql -V
当前我的MySQL版本为:
mysql Ver 8.0.25 for Linux on x86_64 (MySQL Community Server - GPL)
确定MySQL版本非常重要,因为不同的版本需要选择对应版本的插件.
建议 2: 在生产环境中选择软件的版本非常重要: 第一要选择永久支持版本; 第二尽量不要使用最新版本,除非老版本无法满足你的需求.
确定了MySQL版本后,我们就可以选择Mcafee插件的版本了.首先查看Mcafee插件的所有版本,然后找到支持您MySQL的插件版本.例如,支持我们环境的插件版本为v1.1.9.然后在Assets 里(一般是折叠起来的,睁大眼睛!)找到满足你环境的zip包,服务器一般是linux-x86_64,我选择的是audit-plugin-mysql-8.0-1.1.9-974-linux-x86_64.zip.在linux上可以直接下载:
wget https://github.com/mcafee-enterprise/mysql-audit/releases/download/v1.1.9/audit-plugin-mysql-8.0-1.1.9-974-linux-x86_64.zip
然后, 直接使用命令解压缩:
unzip audit-plugin-mysql-8.0-1.1.9-974-linux-x86_64.zip
准备好环境后,然后就可以安装审计插件了.安装步骤也可以参考官方文档.安装步骤如下:
首先, 登录您的MySQL:
mysql -uroot -p
然后,在MySQL中查询插件目录:
show global variables like 'plugin_dir';
默认MySQL的插件目录为/usr/lib64/mysql/plugin/
接着, 将zip包中lib目录下的libaudit_plugin.so移动到插件目录:
cp audit-plugin-mysql-8.0-1.1.9-974-linux-x86_64/lib/libaudit_plugin.so /usr/lib64/mysql/plugin/
将文件移动到插件目录后,需要使用shell命令将文件修改为可执行文件:
chmod a+x /usr/lib64/mysql/plugin/libaudit_plugin.so
加载插件有两种方式,第一种方式是使用SQL语句直接加载:
INSTALL PLUGIN AUDIT SONAME 'libaudit_plugin.so';
第二种方式是使用plugin-load,即在my.cnf文件中的[mysqld]下添加:
plugin-load=AUDIT=libaudit_plugin.so
官方建议生产环境中使用第二种方式.
另外, 第二种方式在my.cnf文件中添加配置后需要重启.另外,Mcafee插件支持其它配置参数可以一并放到my.cnf中:
plugin-load=AUDIT=libaudit_plugin.so
audit_json_file=on
audit_force_record_logins=on
audit_json_file_sync=1
经过上面的步骤,我们的插件是否安装成功了呢?是骡子是马,拉出来溜溜.在MySQL中执行下面SQL语句:
show plugins;
show global status like 'AUDIT_version';
如果上面两个命令正常输出,那恭喜您,插件安装成功.
接下来,需要手动打开插件:
SET GLOBAL audit_json_file=on;
最后就可以查看MySQL data目录下的日志文件了,当然你可能不知道你的data目录在哪里,那么可以通过下面的SQL查看data目录:
SHOW VARIABLES WHERE Variable_Name = 'datadir'
然后可以查看审计日志文件,审计文件默认名字为mysql-audit.json,审计文件为JSON格式的数据,你可以查看一下是否正确记录了你所有的操作.
Mcafee Audit Plugin 有一个致命的缺点,那就是无法实现审计日志文件无法自动切分,这种情况下,基本无法在产线使用,于是我们可以借助logrotate来实现自动日志切分,我们只用在目录/etc/logrotate.d下添加一个配置文件mcafee-audit(文件名任意)即可,文件内容为:
/var/lib/mysql/mysql-audit.json {
daily
copytruncate
compress
minsize 1M
rotate 10
dateext
dateformat .%Y-%m-%d
sharedscripts
postrotate
mysql -e "set global audit_json_file_flush=on" -uroot -p"******"
endscript
}
关于文件内容大家请参考: https://github.com/mcafee-enterprise/mysql-audit/issues/140
完成了上面的步骤如果仍然没有安装成功,大家不要灰心,征途才刚刚开始.
如果在验证时没有发现audit插件或者报错,大家一定要从头开始,第一个要确认的是你的插件版本是支持你的MySQL版本的,如果不支持那本文章也无法为你解决.
如果插件支持你的版本,那么我们可以解决那些可能的问题,首先可以参考官方Issues,如果你的问题刚好和能在Issues里面找到,这可以直接按照解决方法解决问题.
遇到插件加载问题时,mysql命令行里面输出的错误日志并不完整,我们可以查看mysql日志文件的error信息.我们可以通过下面的SQL语句查看mysql的错误日志位置:
show variables like 'log_error';
然后可以看到插件加载的详细日志.例如,我遇到的问题如下:
Audit Plugin: unable to protect page and nx bit enabled. This may happen if you have SELinux enabled. Disable SELinux execmod protection for mysqld. Page: 0x7f762972c000, Size: 4096
明显是Linux安全问题,即需要我们关闭SELinux,关闭后,我们可以重启MySQL然后重新加载或者验证发现当前问题已经解决.
建议 3: 大家遇到问题后,一定要先查看官方文档,查看是否配置出错,或者官方是否有相关的Issue, 如果还是无法解决,可以加入官方的讨论组,或者直接创建Issue,然后寻求找到解决方案