导读
我记得之前测试mysql社区版安装percona审计插件是不行的(大概是8.0.33版本左右), 所以才写了个旁挂审计脚本. 但今天看到https://www.percona.com/blog/using-the-percona-audit-logging-plugin-on-mysql-community-8-0-x/ …
本文是安装审计插件, 主要是记录连接信息(偏向监控). 如果还要根据规则阻止连接的话, 可以看audit-log-filter
安装和配置
安装
我们只需要审计插件, 所以下载mini版的percona-server即可. 下载地址: https://downloads.percona.com/downloads/Percona-Server-8.0/Percona-Server-8.0.36-28/binary/tarball/Percona-Server-8.0.36-28-Linux.x86_64.glibc2.17-minimal.tar.gz
审计插件位于: Percona-Server-8.0.36-28-Linux.x86_64.glibc2.17-minimal/lib/plugin/audit_log.so
路径
安装插件的方法可参考: https://dev.mysql.com/doc/refman/8.0/en/plugin-loading.html
关于插件卸载: 之前有小伙伴问,
uninstall plugin xxx
卸载插件报错ERROR 1702 (HY000): Plugin 'CONNECTION_CONTROL' is force_plus_permanent and can not be unloaded
是怎么回事, 其实是由于安装插件是使用的–plugin_name或者配置文件指定了相关参数, 这种就只能取消–plugin_name或者注释掉配置文件相关参数.也就是怎么安装的就怎么卸载. 命令行安装的就只能命令行卸载(配置文件没得相关参数,也就不会去注释了). 配置文件设置的就注释掉, 然后重启.
我们这里就使用命令行安装了, 方便卸载.
# 下载percona-server
wget https://downloads.percona.com/downloads/Percona-Server-8.0/Percona-Server-8.0.36-28/binary/tarball/Percona-Server-8.0.36-28-Linux.x86_64.glibc2.17-minimal.tar.gz
# 解压percona-server
tar -xvf Percona-Server-8.0.36-28-Linux.x86_64.glibc2.17-minimal.tar.gz
# 拷贝审计插件到你的mysql软件目录
cp -ra Percona-Server-8.0.36-28-Linux.x86_64.glibc2.17-minimal/lib/plugin/audit_log.so /soft/mysql_3378/mysqlbase/mysql/lib/plugin
chown mysql:mysql /soft/mysql_3378/mysqlbase/mysql/lib/plugin/audit_log.so
登录数据库安装审计插件mysql -h127.0.0.1 -uroot -P3378 -p123456
-- 安装
INSTALL PLUGIN audit_log soname 'audit_log.so';
-- 卸载(要重启才生效)
-- UNINSTALL PLUGIN audit_log;
-- 查看审计插件安装情况
SELECT * FROM information_schema.PLUGINS WHERE PLUGIN_NAME LIKE '%audit%'\G
配置
支持4种审计日志格式, 我们通常使用json或者csv格式. 如果要接入第三方软件, 可能json更适合; 如果仅人工看/shell脚本分析的话,就csv格式.
可以基于用户,sql,或者数据库来实现过滤.(旁挂的只能实现基于用户/sql, 还是非ssl).
audit_log_exclude_accounts # user@host
audit_log_include_accounts
audit_log_exclude_commands
audit_log_include_commands
audit_log_exclude_databases
audit_log_include_databases
默认的审计规则audit_log_policy
是ALL
, 即记录登录信息和SQL信息. 可以配置为
ALL
我全都要
LOGINS
只要登录信息即可
QUERIES
只要SQL语句
NONE
摸鱼(啥都不记录)
审计信息默认是存放在datadir下面的audit.log文件中. 对应参数: audit_log_file
. (只读)
日志轮转
可以配置linux上的logrotate实现日志轮转, 也可以使用定时任务来做
通过参数audit_log_flush
来刷新日志, 从而实现日志轮转. 可参考.(没做登录之类的验证了).
# 刷新日志
mysql -h127.0.0.1 -P3378 -p123456 -e 'set global audit_log_flush=on;'
# 日志轮转
mv /data/mysql_3378/mysqldata/audit.log /data/mysql_3378/mysqldata/audit.log.$(date +%Y%m%d)
# 刷新日志(以生成相关文件)
mysql -h127.0.0.1 -P3378 -p123456 -e 'set global audit_log_flush=on;'
# 压缩(可选)
gzip /data/mysql_3378/mysqldata/audit.log.$(date +%Y%m%d)
例子
配置文件添加
# audit
audit_log_file=/data/mysql_3378/mysqllog/dblogs/audit.log
audit_log_format=csv
重启数据库systemctl restart mysqld_3378
查看日志
建议
审计插件有时候还是挺有用的, 但会吃系统一部分资源… (旁挂审计就没得这方面的影响了)
如果是不太繁忙或者比较重视安全的场景, 则推荐使用. 否则不推荐使用审计.
参考:
https://www.percona.com/blog/using-the-percona-audit-logging-plugin-on-mysql-community-8-0-x/
https://dev.mysql.com/doc/refman/8.0/en/plugin-loading.html
https://docs.percona.com/percona-server/8.0/audit-log-plugin.html