MySQL 本身不自带完整的审计功能,但可以通过安装官方的 MySQL Enterprise Audit 插件来实现操作审计。社区版 MySQL 默认不包含该插件,但可以借助第三方审计插件如 McAfee MySQL Audit Plugin 或使用企业版的 audit_log 插件。
1. 使用 MySQL Enterprise Audit 插件(企业版)
如果你使用的是 MySQL 企业版,可以直接启用 audit_log 插件。
步骤如下:
确认插件文件存在:通常为audit_log.so(Linux)或
audit_log.dll(Windows),位于 MySQL 的 plugin 目录下。 在 MySQL 配置文件(如 my.cnf 或 my.ini)中添加以下内容:
[mysqld] plugin-load=audit_log.so audit_log_format=JSON audit_log_policy=ALL audit_log_include_accounts='user@host' # 可选,只审计特定用户重启 MySQL 服务使配置生效。 登录 MySQL 验证插件是否加载成功:
SHOW PLUGINS;
查找 audit_log 是否处于 ACTIVE 状态。
日志默认生成在数据目录下的audit.log文件中,格式可设为 JSON 或 OLD(传统文本)。
2. 社区版使用 McAfee MySQL Audit Plugin
适用于 MySQL 社区版,由社区维护,支持主流版本。
步骤如下:
下载插件:从 GitHub 搜索McAfee/mysql-audit获取对应平台的 .so 文件。 将
libaudit_plugin.so放入 MySQL 插件目录(可通过
SELECT @@plugin_dir;查看路径)。 加载插件:
INSTALL PLUGIN audit SONAME 'libaudit_plugin.so';检查是否安装成功:
SHOW PLUGINS;配置审计行为,通过设置全局变量控制输出方式和内容:
SET GLOBAL audit_json_file = ON; SET GLOBAL audit_json_log_file = '/var/log/mysql/audit.log'; SET GLOBAL audit_record_cmds = 'insert,update,delete,drop,create'; # 记录的操作类型 SET GLOBAL audit_record_objs = 'table,view'; # 记录的对象类型这些参数也可写入 my.cnf,避免重启失效。
3. 审计日志内容示例(JSON 格式)
日志中会记录连接、查询、权限变更等事件,例如:
{
"msg-type": "activity",
"date": "2025-04-05T10:23:12",
"thread-id": "123",
"query-id": "456",
"user": "root@localhost",
"command": "Query",
"query": "UPDATE users SET name='test' WHERE id=1"
}
可用于安全分析、合规审查或故障追踪。
4. 日志管理与安全建议
定期归档日志,防止磁盘占满。 确保日志文件权限严格,仅 DBA 可读。 结合外部系统(如 ELK、Splunk)做集中分析。 避免在高并发系统中开启全量审计,可能影响性能。基本上就这些。关键是根据版本选择合适插件,并合理配置审计范围和日志路径。
