一、概述

审计插件是包含在 MariaDB 中的,所以需要先下载 MariaDB 然后将 server_audit.so 审计插件 copy 出来。
MariaDB 的 10.1 版本对应与 Oracle 的 MySQL 5.7 版本,这里是 MariaDB 官方下载地址 可以从链接里下载 MariaDB

我做实验使用的版本是8.0.25
MariaDB并不兼容mysql 5.7新版本与mysql 8.0以上版本

亚马逊RDS for MySQL的开发团队已经folk了MariaDB审计日志插件,并确保与MySQL 8 API兼容,以便在其RDS for MySQL数据库系列上使用。
最近,他们已经在GitHub上公开了这个项目的代码库。该插件的源代码在Github上公开发布,作为对MySQL和MariaDB用户社区的一项服务。
AWS不为该插件提供任何保证或支持。目标受众是具有C++技能的软件开发人员,他们能够独立编译和使用该插件。
这个插件不是官方的,与MySQL没有关系。

5.7以前的版本可以直接去mariadb官网下载,5.7以后的版本可以通过下面方式获取
只是插件获取方式不一样,加载和使用完全一样

二、具体配置

1、审计插件

1、下载地址
https://github.com/Vettabase/audit-plugin-for-mysql
可以根据需要选择5.7或者8.0分支
插件放在build/server_audit.so

2、安装
将server_audit.so上传到mysql的basedir下面的lib/plugin目录下
注意权限设置成755,注意用户和mysql服务启动用户一致
#导入插件到配置文件
vi my.cnf
plugin_load_add=server_audit
#或者直接命令导入插件
INSTALL PLUGIN server_audit SONAME 'server_audit.so';

3、配置完就会将操作信息写入datadir目录下的server_audit.log

2、常用参数

查看支持的插件参数
SHOW GLOBAL VARIABLES LIKE 'server_audit%';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| server_audit_events           | CONNECT,QUERY,TABLE   |
| 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_logging          | ON                    |
| server_audit_mode             | 0                     |
| 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              |
+-------------------------------+-----------------------+

具体文档可以查看mariadb官网
https://mariadb.com/kb/en/mariadb-audit-plugin/

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、卸载插件

UNINSTALL PLUGIN 'server_audit';
如果是写到配置文件的,将相关配置删除就好

4、实验

1、配置参数
plugin_load_add=server_audit
server_audit_logging=on
server_audit_events=connect,query
server_audit_file_path=/data/mysql/mysql_audit_log
server_audit_file_rotate_size=5G
server_audit_file_rotations=10
server_audit_file_rotate_now=on

2、试验记录
第一次启动,从库连接信息会记录到主库文件server_audit.log
主从复制数据,从库不会记录
server_audit.log删除不会自动创建,可以set global server_audit_logging=off/on,重新生成
依旧可以cat /dev/null > server_audit.log 清理
日志文件有开关,可以关闭或打开
可以单独设计日志记录SQL类型