MySQL入门教程(22)如何开启MySQL审计日志?MySQL审计日志配置教程

TangLu MySQL 2024-01-12 2661 0

一、MySQL审计插件介绍

MySQL的审计功能由mysql-audit插件实现(同时支持MySQL、Percona、Mariadb),该插件是McAfee所开源,项目地址https://github.com/mcafee/mysql-audit。使用审计插件后用户对数据库进行的每一个操作都会被详细记录,方便事件追溯。由于开启审计功能会降低一定的性能,这个需要自行取舍是要安全还是要性能。除了使用插件之外还可以使用ELK或者MySQL自带的init-connect结合binlog进行审计


二、mysql-audit安装与配置

1、通过https://github.com/mcafee/mysql-audit下载mysql-audit 源码包或者下载二进制安装包(https://bintray.com/mcafee/mysql-audit-plugin/release),下载的时候需要注意版本是否支持当前的MySQL版本

点击查看原图

2、将安装包解压,获取libaudit_plugin.so插件文件和offset-extract.sh脚本,然后将.so插件上传到MySQL插件目录,如/usr/local/mysql/lib/plugin。如果不确定该路径的话可以登陆MySQL进行查询

mysql > show global variables like '%plugin_dir%'
cp lib/libaudit_plugin.so /usr/local/mysql/lib/mysql/plugin/


3、审计插件出现的偏移量问题

插件会通过计算MySQL的版本获取一个偏移量来进行校验,如果使用的是已经通过了认证的MySQL版本,则不需要进行任何操作都可以安装运行AUDIT插件,无需再次校验。而如果使用到的MySQL版本是未经验证的就会无法安装插件(对于特定版本,即便MySQL发行版不同,但是偏移量是相同的),并抛出Audit Plugin: Couldn't find proper THD offsets for: MYSQL_VERSION这样的错误。对于这种情况就需要先行计算一个偏移量,而计算方式就是使用offset-extract.sh脚本,下载地址https ://raw.github.com/mcafee/mysql-audit/master/offset-extract/offset-extract.sh

chmod +x offset-extract.sh
./offset-extract.sh /usr/local/mysql/bin/mysqld   #运行后会输出需要使用的偏移量,假设为{"5.1.41-community","6ccf4357688d8e46bfcb4443966970b0", **6200, 6264, 3672, 3944, 88, 2048**}


如果在执行offset-extract.sh脚本的时候会出现ERROR: gdb not found. Make sure gdb is installed and on the path的错误,需要先行安装gdb环境

yum install gdb -y


4、安装插件

· 配置文件需要增加相关内容,避免重启后插件失效

vi /etc/my.cnf
[mysqld]
...
plugin-load=AUDIT=libaudit_plugin.so               #加载审计插件
audit_json_log_file = /data/mysql/log/audit.log    #日志存放路径
audit_json_file = ON                               #设置为ON表示记录日志,开启审计
#audit_offsets=6200, 6264, 3672, 3944, 88, 2048    #偏移量,如果没有报错的话可以忽略
audit_uninstall_plugin = OFF       #是否允许卸载插件,如果禁用则无法通过UNINSTALL命令卸载AUDIT插件,可以提升安全性
audit_sess_connect_attrs = ON    #是否记录客户端连接属性到日志中,比如"connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11450","_client_version":"5.6.20-68.0","_platform":"x86_64","program_name":"mysql"}
audit_socket_creds = ON        #是否记录客户端进程信息,如PID、应用名称和用户名
# audit_record_cmds="insert,delete,update,create,drop,alter"  #需要审计的命令,不写的话所有记录都审计
# audit_whitelist_users       #不需要进行审计的白名单用户
# audit_whitelist_cmds       #不需要进行审计的白名单命令
# audit_json_file_flush      #执行set global audit_json_file_flush=on将刷新日志,可用于轮换日志
# audit_validate_checksum    #是否进行二进制偏移量校验
# audit_checksum    #当配置了audit_offsets时使用,如果校验和与计算的不匹配插件将不会加载,当手动设置偏移量并且希望避免升级mysqld后未经验证使用手动偏移量时会有用
...


· 命令行部分,在线调整部分参数

mysql > INSTALL PLUGIN AUDIT soname 'libaudit_plugin.so';
mysql > set global audit_json_file='ON';
mysql > set global audit_json_log_file='/data/mysql3311/log/mysql-audit.json';
mysql > set global audit_record_cmds='drop_db,drop_table,alter_table';  #仅审计DDL操作


5、检查插件是否安装成功

mysql > show plugins;

mysql_audit.jpg


6、查看审计日志,清晰的展现了用户的操作记录

audit2.png


三、mysql-audit插件卸载方式
该插件安装好了以后默认是不能通过命令UNINSTALL的,需要在配置文件中增加一行

[mysqld]
audit_uninstall_plugin=1


重启服务后登录数据库执行两次命令

mysql > uninstall plugin AUDIT;


成功卸载后记得删除配置文件中的行,否则后面服务启动会报错

[mysqld]
#audit_uninstall_plugin=1


评论