mysql如何开启日志审计_mysql操作审计配置说明

来源:这里教程网 时间:2026-02-28 20:41:36 作者:

MySQL开启日志审计,核心是启用具备细粒度事件捕获能力的审计插件,而非仅依赖通用日志。通用日志(

general_log
)虽简单,但记录全部语句(含SELECT),性能开销大、无用户/权限上下文,不满足合规审计要求;真正可用的审计需记录谁、何时、在哪、做了什么、结果如何——这必须靠专用审计插件实现。

选用并加载审计插件

MySQL 5.7+ 社区版推荐使用

server_audit
(MariaDB开源插件,兼容性好),企业版或MySQL 8.0+ 可用原生
audit_log
插件:

确认插件文件存在:检查
plugin_dir
(如
/usr/lib/mysql/plugin/
)下是否有
server_audit.so
audit_log.so
在线加载(无需重启):
INSTALL PLUGIN server_audit SONAME 'server_audit.so';


INSTALL PLUGIN audit_log SONAME 'audit_log.so';
验证是否成功:
SHOW PLUGINS LIKE '%audit%';
状态应为
ACTIVE

配置关键审计参数

参数可动态设置(

SET GLOBAL
),但建议写入配置文件确保持久化:

记录哪些事件
server_audit_events = 'CONNECT,QUERY,TABLE,FAILED_LOGIN'
(登录、查询、表操作、失败登录)
输出方式与路径
server_audit_output_type = FILE
,配合
server_audit_file_path = '/var/log/mysql/audit.log'
日志轮转控制
server_audit_file_rotate_size = 104857600
(100MB)、
server_audit_file_rotations = 10
排除干扰账号(如监控账号):
server_audit_exclude_accounts = 'monitor@%,health@%'

若用原生

audit_log
插件,对应参数为:
audit_log_policy = ALL
audit_log_format = JSON
audit_log_rotate_on_size = 100000000

确保日志安全与可用性

审计日志本身是高价值目标,必须防篡改、防未授权访问:

设置文件权限:
chown mysql:mysql /var/log/mysql/audit.log && chmod 600 /var/log/mysql/audit.log
启用实时刷盘(防宕机丢失):
server_audit_file_sync = ON
audit_log_flush = ON
将日志路径挂载在独立磁盘分区,避免占满系统盘导致数据库异常
logrotate
或定时脚本归档压缩旧日志,例如:
gzip /var/log/mysql/audit.log.1

验证与日常查看方法

配置生效后,立即有日志产生。常用操作:

实时跟踪:
tail -f /var/log/mysql/audit.log | grep -E "(QUERY|CONNECT)"
解析JSON格式日志(如用
audit_log_format=JSON
):
jq '.user + " | " + .query' /var/log/mysql/audit.log
快速定位高危操作:
grep -i "drop\|truncate\|grant\|alter.*user" /var/log/mysql/audit.log
检查当前审计状态:
SELECT * FROM performance_schema.audit_log_summary_by_account;
(MySQL 8.0+ Enterprise)

相关推荐