MySQL 8.0.19+才原生支持audit_log插件,需先查SELECT VERSION()和SHOW PLUGINS确认;插件须INSTALL加载且设audit_log_policy=LOGINS/ALL;audit_log_file必须在my.cnf配置并确保路径可写、SELinux放行;日志格式须为JSON并用jq解析才能捕获GRANT等权限操作。

确认 audit_log 插件是否可用且已加载
MySQL 8.0.19+ 社区版才原生带 audit_log 插件,低于这个版本(如 8.0.17)查 SHOW PLUGINS; 就看不到它;硬装 INSTALL PLUGIN audit_log SONAME 'audit_log.so'; 会报 Plugin 'audit_log' is not loaded。先执行:
SELECT VERSION();<br>SHOW PLUGINS LIKE 'audit_log';
如果没返回或状态是 DISABLED,说明插件不存在或未加载——别往下配了,得先升级或换 server_audit。
加载插件并设 audit_log_policy = LOGINS 或 ALL
插件必须显式安装,且加载用户需有 INSERT 权限写入 mysql 系统库,否则报错 ERROR 1045 (28000): Access denied。安装后不设策略,日志默认只记连接/断开,不录 GRANT、CREATE USER 等权限操作:
-
SET GLOBAL audit_log_policy = 'LOGINS';—— 记登录成功/失败(含错误码如 1045),适合监控暴力破解 -
SET GLOBAL audit_log_policy = 'ALL';—— 记所有语句,但注意:它不自动记录SET GLOBAL、INSTALL PLUGIN这类特权操作,除非配合audit_log_include_accounts -
audit_log_policy = 'COMMANDS'是折中选择,记 DDL/DML/ADMIN 类命令,漏掉纯连接事件
策略变量是运行时生效的,但重启失效,所以必须同步写进配置文件。
audit_log_file 必须在 my.cnf 中配置并确保路径可写
audit_log_file 是只读变量,运行时 SET GLOBAL 不起作用。想把日志存到 /var/log/mysql/audit.log,必须在 [mysqld] 段加一行:
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
audit_log_file = /var/log/mysql/audit.log
然后 sudo chown mysql:mysql /var/log/mysql,再检查 SELinux 上下文:ls -Z /var/log/mysql。若显示 system_u:object_r:var_log_t:s0 通常没问题;若为 unconfined_u 或权限被拒,临时关 SELinux 测试:setenforce 0。路径中不能含变量(如 $DATADIR),也不能是符号链接目标不可写。
用 JSON 格式 + jq 解析才能看清权限变更
audit_log_format = JSON 是唯一能保留 user、host、sql_text 和 command_class 字段的格式;设成 NEWLINE 或 COMMON_LOG 会丢关键字段,导致你 grep 不到 GRANT。日志默认不换行,直接 tail -f 看不到结构。实时抓权限变更用:
tail -f /var/log/mysql/audit.log | jq 'select(.command_class == "grant" or .command_class == "revoke" or .command_class == "create_user")'
注意:没装 jq 就先 apt install jq(Ubuntu)或 yum install jq(CentOS)。另外,audit_log_statement_policy 若被设为 NONE(比如被其他插件覆盖),sql_text 就为空——务必确认该变量值是 STATEMENTS。
真正难调的不是“怎么开”,而是“为什么没写”。路径权限、SELinux、插件未加载、格式设错、策略变量未持久化——这四点占静默失效的 90%。别信“配完重启就 OK”,每一步都得验证输出。










