MySQL审计级别配置实现步骤

来源:这里教程网 时间:2026-03-19 13:19:25 作者:
一、当前环境审计配置1.1 已安装的审计插件1.2 当前审计参数二、Percona Audit Plugin 审计级别详解Policy 对照表三、各级别详细说明Level 0: NONE(关闭审计)Level 1: LOGINS(基础审计)Level 2: QUERIES(增强审计)Level 3: ALL(全量审计)四、审计日志字段说明JSON 格式字段五、高级配置技巧5.1 排除特定账户审计5.2 只审计特定数据库5.3 只审计特定 SQL 类型5.4 日志轮转配置六、生产环境建议6.1 通用生产库(99% 场景)6.2 核心业务 / 金融 / 电力6.3 不推荐配置七、审计 vs 其他日志八、常见问题Q1: 为什么 LOGINS 级别还记录 Query?Q2: 如何临时关闭审计?Q3: 审计文件满了怎么办?Q4: 审计影响有多大?九、配置模板等保合规配置(my.cnf)

基于 145 环境 mysql-0d130fde 实例验证

实例信息:

集群:x.x.x.145命名空间:qfusion-admin插件:Percona Audit Plugin (audit_log.so)MySQL 版本:8.0.35

一、当前环境审计配置

1.1 已安装的审计插件

audit_log ACTIVE AUDIT audit_log.so GPL

1.2 当前审计参数

参数值说明audit_log_policyALL当前审计级别(全量)audit_log_formatJSON日志格式audit_log_file/var/log/mysql/audit.log日志文件路径audit_log_rotate_on_size536870912 (512MB)日志轮转大小audit_log_rotations10保留日志文件数量audit_log_strategyASYNCHRONOUS异步写入策略audit_log_buffer_size1048576 (1MB)缓冲区大小audit_log_max_sqltext2048SQL最大记录长度audit_log_exclude_accountsroot@%,root@localhost,repl@%,@排除审计账户audit_log_display_query_timeON显示查询耗时

二、Percona Audit Plugin 审计级别详解

Percona Audit Plugin 支持 4 种审计策略(policy)

Policy 对照表

Policy等级审计内容NONELevel 0关闭审计LOGINSLevel 1连接事件 + 默认查询记录QUERIESLevel 2所有 SQL 查询(不含连接)ALLLevel 3连接 + 查询(完整审计)

注意:Percona 的 LOGINS 级别仍会记录 Query,这是与 MariaDB Audit Plugin 的区别。

三、各级别详细说明

Level 0: NONE(关闭审计)

设置方式

SET GLOBAL audit_log_policy=NONE;

特点

不记录任何审计信息性能影响:0%适用场景:压测、开发环境

验证结果

# 执行查询 SELECT 1; # 审计日志:无新增记录

Level 1: LOGINS(基础审计)

设置方式

SET GLOBAL audit_log_policy=LOGINS;

记录内容

Connect 事件(用户登录)Quit 事件(用户登出)Query 事件(Percona 特性:LOGINS 级别仍记录 SQL)

适用场景

生产环境常态等保合规(基础级)

审计日志示例

{"name":"Connect","record":"464","timestamp":"2025-12-24T09:48:53Z","user":"audit_test","host":"localhost"} {"name":"Query","record":"466","timestamp":"2025-12-24T09:48:53Z","command_class":"select","sqltext":"SELECT 1"} {"name":"Quit","record":"468","timestamp":"2025-12-24T09:48:53Z","user":"audit_test"}

性能影响

很低(< 3%)

Level 2: QUERIES(增强审计)

设置方式

SET GLOBAL audit_log_policy=QUERIES;

记录内容

所有 SQL 查询(SELECT / INSERT / UPDATE / DELETE / DDL)不记录 Connect/Quit 事件

适用场景

核心业务库需要 SQL 级别追溯金融/电力/政企系统

审计日志示例

{"name":"Query","record":"471","timestamp":"2025-12-24T09:49:03Z","command_class":"select","sqltext":"SELECT 1"} {"name":"Query","record":"472","timestamp":"2025-12-24T09:49:03Z","command_class":"delete","sqltext":"DELETE FROM test_audit.t WHERE id=1"}

性能影响

中等(5% ~ 10%)与 SQL 频率正相关

Level 3: ALL(全量审计)

设置方式

SET GLOBAL audit_log_policy=ALL;

记录内容

Connect 事件Quit 事件所有 SQL 查询完整上下文(用户、IP、时间、耗时)

适用场景

安全事件追溯应急排查(短期开启)高合规要求环境

审计日志示例

{"name":"Connect","record":"474","timestamp":"2025-12-24T09:49:16Z","user":"audit_test","host":"localhost"} {"name":"Query","record":"475","timestamp":"2025-12-24T09:49:16Z","command_class":"select","sqltext":"select @@version_comment limit 1"} {"name":"Query","record":"476","timestamp":"2025-12-24T09:49:16Z","command_class":"select","sqltext":"SELECT * FROM test_audit.t"} {"name":"Quit","record":"477","timestamp":"2025-12-24T09:49:16Z","user":"audit_test"}

性能影响

较高(10% ~ 20%+)日志量快速增长长期开启需谨慎

四、审计日志字段说明

JSON 格式字段

字段说明name事件类型(Connect/Query/Quit/Table/Audit)timestampUTC 时间戳connection_id连接 IDuser执行用户host连接来源主机ip客户端 IPdb数据库名command_classSQL 类型(select/insert/update/delete/drop等)sqltext完整 SQL 文本status执行状态码(0=成功)start_time查询开始时间(微秒)end_time查询结束时间(微秒)

五、高级配置技巧

5.1 排除特定账户审计

当前环境已配置排除 root 用户:

-- 查看排除列表 SHOW VARIABLES LIKE 'audit_log_exclude_accounts'; -- 设置排除账户 SET GLOBAL audit_log_exclude_accounts='root@%,root@localhost,repl@%,@';

5.2 只审计特定数据库

-- 只审计特定库 SET GLOBAL audit_log_include_databases='business_db,core_db';

5.3 只审计特定 SQL 类型

-- 只审计 DML SET GLOBAL audit_log_include_commands='insert,update,delete';

5.4 日志轮转配置

-- 单文件最大 512MB SET GLOBAL audit_log_rotate_on_size=536870912; -- 保留 10 个历史文件 SET GLOBAL audit_log_rotations=10;

六、生产环境建议

6.1 通用生产库(99% 场景)

推荐配置LOGINS + 慢日志

SET GLOBAL audit_log_policy=LOGINS; SET GLOBAL long_query_time=1;

优势

审计连接 + DDL性能稳定易长期运行

6.2 核心业务 / 金融 / 电力

推荐配置QUERIES + 定期清理

SET GLOBAL audit_log_policy=QUERIES;

配合措施

定期归档审计日志集中化日志收集(ELK)设置日志轮转

6.3 不推荐配置

-- 长期开启 ALL,配合 audit_log_strategy=ASYNCHRONOUS SET GLOBAL audit_log_policy=ALL; SET GLOBAL audit_log_strategy=ASYNCHRONOUS;

风险

高并发下可能引发 I/O 抖动日志文件占用大量磁盘影响主备同步延迟

七、审计 vs 其他日志

日志类型安全合规数据恢复性能分析SELECT记录审计日志✅❌❌可选binlog❌✅❌❌慢日志❌❌✅仅慢SQL

八、常见问题

Q1: 为什么 LOGINS 级别还记录 Query?

A: Percona Audit Plugin 的 LOGINS 级别行为与 MariaDB 不同,会同时记录连接和查询。如需只记录连接,需使用 audit_log_exclude_commands 过滤。

Q2: 如何临时关闭审计?

SET GLOBAL audit_log_policy=NONE;

Q3: 审计文件满了怎么办?

审计插件会自动轮转,但建议配置监控:

# 检查审计日志大小 ls -lh /var/log/mysql/audit.log* # 设置定期清理任务 find /var/log/mysql/audit.log* -mtime +30 -delete

Q4: 审计影响有多大?

实测数据(参考):

NONE: 0% 影响LOGINS: ❤️% 影响QUERIES: 5-10% 影响ALL: 10-20%+ 影响(与 QPS 正相关)

九、配置模板

等保合规配置(my.cnf)

[mysqld] # 加载审计插件(通常已预装) plugin-load=audit_log.so # 审计策略 audit_log_policy=LOGINS audit_log_format=JSON audit_log_file=/var/log/mysql/audit.log # 轮转配置 audit_log_rotate_on_size=536870912 audit_log_rotations=9 # 排除管理账户(避免日志膨胀) audit_log_exclude_accounts=root@%,root@localhost,repl@%,@ # 性能优化 audit_log_strategy=ASYNCHRONOUS audit_log_buffer_size=1048576 # SQL 记录配置 audit_log_max_sqltext=2048 audit_log_display_query_time=ON

到此这篇关于MySQL 审计级别配置实现步骤的文章就介绍到这了,

相关推荐

热文推荐