启用mysql企业审计插件需使用企业版,配置my.cnf加载audit_log.so,设置audit_log_format=jsON和audit_log_policy=ALL以记录所有操作,重启服务后通过SHOW PLUGINS验证插件状态,并定期分析默认生成于/var/lib/mysql/的审计日志,结合SIEM工具监控,限制日志访问权限,实施最小权限原则;社区版可选mariadb审计插件或通用查询日志等替代方案。

在MySQL中启用事件审计和安全操作,主要是通过配置企业级审计插件来实现。MySQL官方提供了 MySQL Enterprise Audit 插件,可以记录数据库的连接、查询、权限变更等关键操作,帮助满足合规性要求和提升安全性。
启用MySQL企业审计插件
MySQL企业版自带审计插件(audit_log.so),社区版不包含该功能。确认你使用的是企业版后,按以下步骤启用:
- 编辑 MySQL 配置文件(通常是 my.cnf 或 my.ini):
[mysqld]
plugin-load=audit_log.so
audit_log_format=json
audit_log_policy=ALL
- audit_log_format=JSON:以结构化 JSON 格式记录日志,便于解析和分析。
- audit_log_policy=ALL:记录所有事件,包括连接、查询、管理命令等。也可设为 LOGINS(仅登录)、QUERIES(仅查询)或 NONE。
重启 MySQL 服务使配置生效:
sudo systemctl restart mysql
验证审计插件是否加载成功
登录 MySQL 执行以下命令检查插件状态:
SHOW PLUGINS;
查找 audit_log 行,确保状态为 ACTIVE。
也可以查看审计日志文件位置,默认路径一般为:
/var/lib/mysql/hostname_audit.log
审计日志内容示例(JSON格式)
一条典型的审计日志条目如下:
{ “timestamp”: “2024-04-05T10:23:45Z”, “user”: [ { “user”: “admin”, “host”: “192.168.1.100” } ], “command”: “Connect”, “status”: 0, “connection_id”: 12345 }
后续还可能记录 select、UPDATE、GRANT 等操作,例如:
{ “command”: “Query”, “sql_command”: “SELECT”, “query”: “SELECT * FROM users WHERE id = 1” }
加强安全审计的操作建议
- 定期归档和分析审计日志,配合 SIEM 工具(如 elk、Splunk)做集中监控。
- 限制对审计日志文件的访问权限,仅允许 root 和 dba 访问。
- 设置合理的日志轮转策略,避免磁盘占满。
- 重点关注高危操作,如 DROP table、GRANT SUPER、修改用户权限等。
- 结合数据库账户最小权限原则,减少可执行敏感操作的账号数量。
如果使用的是 MySQL 社区版,无法使用官方审计插件,可考虑替代方案:
- 使用 MariaDB 的企业审计插件(MariaDB Audit Plugin),支持社区版。
- 开启通用查询日志(general_log),但性能开销大,仅用于临时排查。
- 通过触发器+审计表手动记录关键表的增删改操作。
基本上就这些。关键是选择合适的审计方式,确保重要操作可追溯,同时不影响系统性能。安全无小事,审计是事后追责和风险发现的重要手段。