一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何在MySQL中配置审计插件(Audit Log)记录用户操作?

时间:2026-09-03 19:41:51 编辑:袖梨 来源:一聚教程网

不支持。MySQL最新audit_log插件(5.7.17+企业版/8.0.19+社区版)从设计上就不捕获SQL语句体,仅记录连接、断开、查询开始/结束等事件元数据,如用户、主机、数据库名、表名、影响行数等。

audit_log 插件是否支持记录 SELECT/INSERT 等 SQL 文本?

不支持。MySQL 最新 audit_log 插件(5.7.17+ 企业版 / 8.0.19+ 社区版)从设计上就不捕获 SQL 语句体。它只记录事件元数据:连接/断开、查询开始/结束、用户、主机、数据库名、表名(若涉及)、影响行数、返回状态码等。

常见误判:

• 日志里只有 connectdisconnect —— 这是正常行为,不是插件失效

• 用 grep "SELECT" 搜不到结果 —— 因为根本没写进去

• 设了 audit_log_policy=ALL 就以为所有语句都落盘 —— 实际只扩大事件类型覆盖(如增加 table_access),不触发 SQL 文本记录

MySQL 版本与插件加载是否匹配?

必须先确认版本和插件存在性,否则后续配置全无效:

• 执行 SELECT VERSION();:低于 5.7.28(社区版)或 8.0.19(社区版)基本不可用

• 执行 SHOW PLUGINS;:找 audit_log 行,Status 必须是 ACTIVE

• 若未出现,检查插件路径:SELECT @@plugin_dir;,确认 audit_log.so(Linux)或 audit_log.dll(Windows)真实存在

• 手动加载:INSTALL PLUGIN audit_log SONAME 'audit_log.so';(注意不是 LOAD PLUGIN

• MySQL 8.0.19+ 默认禁用所有插件,仅靠配置文件 plugin_load_add 不够,必须显式 INSTALL PLUGIN 并配 audit_log=FORCE_PLUS_PERMANENT

my.cnf 配置中哪些参数必须写对且重启生效?

以下参数必须写入 [mysqld] 段,且修改后必须重启 mysqld,SET GLOBAL 无效:

plugin_load_add=audit_log.so:无空格、无引号、无注释

audit_log=FORCE_PLUS_PERMANENT:防插件被动态卸载

audit_log_format=JSON:只接受 JSONNEWLINE;设成 STATEMENT 或其他非法值会导致启动报错 Plugin 'audit_log' init function returned error

audit_log_file=/var/log/mysql/audit.log:必须是绝对路径,且 mysql 用户对该目录有写权限(chown mysql:mysql /var/log/mysql

audit_log_policy=LOGINSQUERIES:避免用 ALL,否则日志量爆炸;LOGINS 适合登录审计,QUERIES 记所有查询但不含连接事件

audit_log_file 为空或没生成文件怎么办?

插件显示 ACTIVE 但日志文件始终为空,优先排查这三件事:

• 确认 mysqld 进程运行用户(通常是 mysql),再用 sudo -u mysql touch /var/log/mysql/test 测试写权限

• 检查路径是否含软链接循环、中文、空格或括号;audit_log_file 不支持变量替换(如不能写 /var/log/mysql/audit_$(date +%F).log

• 查 error_log 文件,搜索 audit_log 相关错误——常见如 Can't open shared library 'audit_log.so'(路径或架构不匹配)、Failed to open audit log file(权限不足)

• 注意:Unix socket 登录(如 root@localhost)默认不记录,只有 TCP/IP 连接才进审计日志

热门栏目