MySQL 使用开源审计插件
MySQL 只有企业版有审计插件,开源社区版没有审计插件。企业要通过等保需要开通审计,这里记录使用 MariaDB 开源审计插件,让 MySQL 社区版拥有审计功能。
1. 审计插件下载
审计插件是包含在 MariaDB 中的,所以需要先下载 MariaDB 然后将 server_audit.so
审计插件 copy 出来。
MariaDB 的 10.1 版本对应与 Oracle 的 MySQL 5.7 版本,这里是 可以从链接里下载 MariaDB。
tar -zxvf mariadb-10.1.48-linux-systemd-x86_64.tar.gz
进入 /lib/plugin/
目录可以找到 server_audit.so
审计插件:
ll ./mariadb-10.1.48-linux-systemd-x86_64/lib/plugin/server_audit.so
-rw-r--r-- 1 esadmin mysql 245036 Oct 30 2020 ./mariadb-10.1.48-linux-systemd-x86_64/lib/plugin/server_audit.so
接下来,需要将插件 copy 到 MySQL 插件目录里面,可以执行下方 SQL 查询 MySQL base 目录:
select @@basedir;
+-------------------+
| @@basedir |
+-------------------+
| /usr/local/mysql/ |
+-------------------+
MySQL 插件目录在 basedir/lib/plugin/
下面,将插件 copy 到此目录:
cp /pg_data/mariadb-10.1.48-linux-systemd-x86_64/lib/plugin/server_audit.so /usr/local/mysql/lib/plugin/
修改文件属组,然后连接 MySQL 安装插件:
install plugin server_audit SONAME 'server_audit.so';
通过下方命令确认插件是否启动成功 Status = ACTIVE:
show plugins;
......
+----------------------------+----------+--------------------+-----------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+-----------------+---------+
| SERVER_AUDIT | ACTIVE | AUDIT | server_audit.so | GPL |
+----------------------------+----------+--------------------+-----------------+---------+
2. 审计插件参数
通过下方参数可以查看审计插件涉及到的参数:
root@mysql 14:33: [(none)]>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 |
+-------------------------------+-----------------------+
2.1 server_audit_events
该参数设置需要保存哪些类型的 SQL 语句,可以保存的类型有: CONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT
如果没有设置该参数,将记录所有类型的 SQL 语句。
2.2 server_audit_excl_users
用户列表,设置后表示该列表的用户行为将不会被记录,相当于一个黑名单。
2.3 server_audit_output_type
指定日志输出类型,可为 SYSLOG 或 FILE,默认和推荐使用的模式都是 FILE 模式。
2.4 server_audit_file_path
当 server_audit_output_type=file 时,通过该参数可以设置日志存放目录,默认为 server_audit.log
表示在数据目录。
2.5 server_audit_file_rotate_now
强制日志文件轮转。
2.6 server_audit_file_rotate_size
限制日志文件的大小,默认为 1000000
2.7 server_audit_file_rotations
日志轮转的次数,默认为 0 表示不轮转。
2.8 server_audit_incl_users
用户列表,设置后表示哪些用户的操作需要被记录,优先级高于 server_audit_excl_users 参数列表。
2.9 server_audit_loc_info
记录内部信息,用户可忽略。
2.10 server_audit_logging
默认为 OFF,设置为 ON 表示打开审计日志记录。
2.11 server_audit_mode
内核人员开发调试使用的参数,用户可忽略。
2.12 server_audit_query_log_limit
限制审计日志记录中字符串长度,默认为 1024。
2.13 server_audit_syslog_facility
SYSLOG-mode 变量,设置一些 “facility”。
2.14 server_audit_syslog_ident
设置 ident 作为审计日志的一部分。
2.15 server_audit_syslog_info
将指定字符串添加到审计日志中。
2.16 server_audit_syslog_priority
SYSLOG-mode 变量,为 syslog 定义日志记录的优先级。
3. 审计插件使用
开启审计日志,每个日志大小为 5G 可以有 10 文件进行轮换。
server_audit_logging = ON
server_audit_file_path = /pg_data/mysql_audit_log
server_audit_file_rotate_size = 5G
server_audit_file_rotations = 10
server_audit_file_rotate_now = ON
server_audit_file_path 参数的目录需要提前创建好,并配置 mysql 属组,然后重启 MySQL 服务。
审计日志的记录格式是:
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],[operation],[database],[object],[retcode]
20230830 15:55:51,db4,root,localhost,2,0,CONNECT,,,0
20230830 15:55:51,db4,root,localhost,2,1,QUERY,,'select @@version_comment limit 1',0
20230830 15:55:51,db4,root,localhost,2,2,QUERY,,'select USER()',0
20230830 15:55:56,db4,root,localhost,2,3,QUERY,,'show databases',0
20230830 15:56:16,db4,root,localhost,2,4,QUERY,,'SELECT DATABASE()',0
20230830 15:56:16,db4,root,localhost,2,6,QUERY,op_service_db,'show databases',0
20230830 15:56:16,db4,root,localhost,2,7,QUERY,op_service_db,'show tables',0
20230830 15:56:19,db4,root,localhost,2,19,QUERY,op_service_db,'show tables',0
20230830 15:59:25,db4,root,localhost,2,20,QUERY,op_service_db,'set global server_audit_syslog_ident = \'test01\'',0
4. 卸载审计插件
执行下方 SQL 卸载插件即可:
UNINSTALL PLUGIN 'server_audit';