mysql社区版无原生审计日志,audit_log插件仅限企业版;合规检查需结合performance_schema、外部代理及手动sql扫描元数据表,而非依赖show grants或mysql.user单表。
MySQL 本身不内置审计日志功能,AUDIT_LOG 插件仅在 MySQL Enterprise Edition 中提供,社区版默认不可用;合规性检查需依赖外部工具或手动 SQL 扫描,不能靠 SHOW GRANTS 或 mysql.user 表直接满足等保、GDPR 等要求。
MySQL 社区版没有原生审计日志,别指望 audit_log.so
社区版启动时加载 audit_log.so 会报错:Plugin 'audit_log' is not loaded。该插件仅随商业版分发,且需单独购买许可。替代方案只有:
- 启用通用查询日志(
general_log=ON),但会严重拖慢性能,且记录所有语句(含敏感数据),不符合最小日志原则 - 使用 MariaDB 的
server_audit插件(开源、兼容 MySQL 协议),需替换数据库或额外部署代理层 - 通过 MySQL Router 或 ProxySQL 拦截流量并记录,但无法捕获本地 socket 连接或 root@localhost 的操作
用 SQL 手动做合规性检查,重点查这三类权限滥用
等保 2.0 要求“权限最小化”“分离管理员与业务账号”,但 SELECT * FROM mysql.user 只显示全局权限,容易漏掉库/表级细粒度授权。必须联合多张元数据表扫描:
SELECT u.User, u.Host, u.authentication_string IS NOT NULL AS has_password,
u.super_priv = 'Y' AS has_super,
COUNT(DISTINCT t.Table_name) AS tables_with_insert_priv
FROM mysql.user u
LEFT JOIN mysql.tables_priv t ON u.User = t.User AND u.Host = t.Host AND t.Table_priv LIKE '%Insert%'
WHERE u.Account_locked = 'N'
GROUP BY u.User, u.Host
HAVING has_super OR tables_with_insert_priv > 10;
常见误判点: