使用审计插件
除了商业版的审计插件外,常见的还有三类审计插件Percona Audit Log Plugin、MariaDB Audit Plugin、McAfee MySQL Audit Plugin。这几个插件功能上大同小异,只是展示的内容和格式略有不同。
我们以MariaDB Audit Plugin为例,给大家介绍如何采用插件的方式实现对Mysql数据的审计。
官网使用手册:MariaDB审计插件 - 日志设置 - MariaDB知识库
一、下载与安装
1、下载MariaDB Audit Plugin插件
下载地址:Download MariaDB Server - MariaDB.org
备注:MariaDB_5.x.x和MariaDB_10.x.x区别
MariaDB_5.x.x:兼容MySQL5.x.x的,接口几乎一致,只限于社区版
MariaDB_10.x.x:10.x.x使用新技术,接口会与mysql逐渐区别开来。目标就是以后想MariaDB新接口过渡
2. 下载mariadb-5.5.56-linux-x86_64.tar.gz解压获取server_audit.so插件
一般在lib\plugin\里面的server_audit.so
拷贝到linux mysql数据库服务器
3. 查询mysql 保存插件的位置在哪里
mysql> show variables like 'plugin_dir';
+---------------+--------------------------+
| Variable_name | Value |
+---------------+--------------------------+
| plugin_dir | /usr/lib64/mysql/plugin/ |
+---------------+--------------------------+
1 row in set (0.00 sec)
4. 将插件拷贝到该位置
cp server_audit.so /usr/lib64/mysql/plugin/
5.命令行安装插件
mysql> install plugin server_audit soname 'server_audit.so';
装好之后执行命令看是否安装成功
mysql> show variables like '%audit%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| server_audit_events | |
| server_audit_excl_users | |
| server_audit_file_path | server_audit.log |
| server_audit_file_rotate_now | OFF |
| server_audit_file_rotate_size | 1000000 |
| server_audit_file_rotations | 9 |
| server_audit_incl_users | |
| server_audit_loc_info | |
| server_audit_logging | OFF |
| server_audit_mode | 1 |
| server_audit_output_type | file |
| server_audit_query_log_limit | 1024 |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+-----------------------+
16 rows in set (0.00 sec)
6. 修改配置文件永久生效
再mysql配置文件中加入一行
[mysqld]
...
plugin_load=server_audit=server_audit.so
二、开启审计
1. 启用审计日志
SET GLOBAL server_audit_logging = ON;
2. 设置日志记录
此命令将配置 MySQL 或 MariaDB 服务器,使其仅记录与数据定义语言操作(如 CREATE, ALTER, DROP 等)以及表访问相关的事件。这是一种限制审计范围以减少日志文件大小和避免不必要的性能开销的有效方法。
SET GLOBAL server_audit_events = 'QUERY_DDL,TABLE';
server_audit_file_rotate_size 设置为 200000000:这会将审计日志文件的最大大小设置为大约 200MB。当日志文件达到这个大小时,将自动创建新的日志文件继续记录。
SET GLOBAL server_audit_file_rotate_size = 200000000;
server_audit_file_rotations 设置为 200:这表示系统会保存最多 200 个旧的日志文件(包括当前正在写入的文件)。当生成新的日志文件时,如果旧文件数量超过此限制,则最老的文件将被删除。
SET GLOBAL server_audit_file_rotations = 200;
server_audit_file_rotate_now 设置为 ON:这个操作会立即触发一次日志文件的轮换,无论当前的日志文件大小如何。这是一个一次性操作,执行后,server_audit_file_rotate_now 的值会自动回到 OFF 状态。
SET GLOBAL server_audit_file_rotate_now = ON;
3. 编辑mysql配置文件vim /etc/my.cnf 加入如下内容 永久生效
#audit log
plugin_load=server_audit=server_audit.so
server_audit_events='query_ddl,table,connect'
server_audit_logging=on
server_audit_file_rotate_size=200000000
server_audit_file_rotations=200
server_audit_file_rotate_now=ON
4. 查看日志是否生效
查询日志名字
mysql> SHOW VARIABLES LIKE 'server_audit_file_path';
+------------------------+------------------+
| Variable_name | Value |
+------------------------+------------------+
| server_audit_file_path | server_audit.log |
+------------------------+------------------+
1 row in set (0.00 sec)
查询保存路径
mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-------------------+
| Variable_name | Value |
+---------------+-------------------+
| datadir | /data/mysql_data/ |
+---------------+-------------------+
查看审计日志:
# tail -f /data/mysql_data/server_audit.log
20240514 21:17:59,fce-slp-wechat-db01,root,localhost,20104133,0,DISCONNECT,,,0
20240514 21:18:00,fce-slp-wechat-db01,root,localhost,20104134,0,CONNECT,,,0
20240514 21:18:00,fce-slp-wechat-db01,root,localhost,20104134,11642,QUERY,,'select @@version_comment limit 1',0
如果需要更改日志保存位置:
动态设置(不需要重启服务):
SET GLOBAL server_audit_file_path = '/path/to/your/desired/location/server_audit.log';
静态设置(需要重启服务):
在MySQL或MariaDB的配置文件中(通常是my.cnf或my.ini),添加或修改以下行:
[mysqld]
server_audit_file_path = /path/to/your/desired/location/server_audit.log