MySQL 企业级特性:安全审计
MySQL企业版中的审计功能(MySQL Enterprise Audit)是MySQL Enterprise Security的重要组成部分,主要用于记录、监控和分析所有数据库活动。它对于满足严格行业法规合规性要求很关键。本文将对该特性进行具体介绍。
企业级审计的主要特性
MySQL Enterprise Audit 为数据库管理员(DBA)提供了必备工具,以便在新旧应用程序中添加审计合规功能,其主要特性如下:
- 自定义审计日志事件。可以在 MySQL 审计日志中添加自定义事件,从而提供与 SQL 调用相关的额外信息
- 加密。审计文件现在可以使用标准的 AES - 256 加密算法进行加密。
- 压缩。使用压缩技术可以将审计存储空间减少高达 10 倍。
- JSON 审计数据格式。在审计日志配置中指定所需的输出格式为 JSON 或 XML。
- 过滤功能以保护敏感数据。您可以使用模板定义要审计的内容,或者使用简单的 JSON 过滤器定义来设计高度自定义的过滤器。
- 满足监管合规标准。确保按照相关法规的要求正确配置审计日志,记录所有必要的数据库活动。
- 动态且易于管理。可以动态地启用、禁用审计流,更改过滤规则等,并且无需停机。
- 移除敏感数据。在审计日志配置中,设置敏感数据掩码规则。

启用企业级审计
安装审计插件 :在数据库服务器上,使用以下 SQL 命令动态安装审计插件。
mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
Query OK, 0 rows affected (0.01 sec)
查看插件信息。
mysql> select * from information_schema.plugins where plugin_name = 'audit_log'\G
*************************** 1. row ***************************
PLUGIN_NAME: audit_log
PLUGIN_VERSION: 1.1
PLUGIN_STATUS: ACTIVE
PLUGIN_TYPE: AUDIT
PLUGIN_TYPE_VERSION: 4.1
PLUGIN_LIBRARY: audit_log.so
PLUGIN_LIBRARY_VERSION: 1.11
PLUGIN_AUTHOR: Oracle Corporation
PLUGIN_DESCRIPTION: Auditing events logger
PLUGIN_LICENSE: PROPRIETARY
LOAD_OPTION: ON
1 row in set (0.00 sec)
持久化配置需要修改 MySQL 配置文件 my.cnf。
audit_log=FORCE_PLUS_PERMANENT
该参数值表示,服务器加载插件,并在服务器运行时防止它被删除。
启用了审计日志插件,它会增加几个系统变量,允许控制日志记录:
mysql> SHOW VARIABLES LIKE 'audit_log%';
+--------------------------------------+--------------+
| Variable_name | Value |
+--------------------------------------+--------------+
| audit_log_buffer_size | 1048576 |
| audit_log_compression | NONE |
| audit_log_connection_policy | ALL |
| audit_log_current_session | OFF |
| audit_log_database | mysql |
| audit_log_disable | OFF |
| audit_log_encryption | NONE |
| audit_log_exclude_accounts | |
| audit_log_file | audit.log |
| audit_log_filter_id | 0 |
| audit_log_flush | OFF |
| audit_log_flush_interval_seconds | 0 |
| audit_log_format | NEW |
| audit_log_format_unix_timestamp | OFF |
| audit_log_include_accounts | |
| audit_log_max_size | 0 |
| audit_log_password_history_keep_days | 0 |
| audit_log_policy | ALL |
| audit_log_prune_seconds | 0 |
| audit_log_read_buffer_size | 32768 |
| audit_log_rotate_on_size | 0 |
| audit_log_statement_policy | ALL |
| audit_log_strategy | ASYNCHRONOUS |
+--------------------------------------+--------------+
23 rows in set (0.00 sec)
企业级审计的日志格式
日志格式由参数 audit_log_format 进行控制,目前支持三种格式:
- NEW,新 XML 格式:与旧式 XML 格式相比,这种 XML 格式与 Oracle Audit Vault 的兼容性更好。MySQL 8.4 默认使用 new-style XML 格式。
- OLD,旧 XML 格式:在旧的 MySQL 系列中默认使用的原始审计日志格式。
- JSON 格式:将审计日志写入 JSON 数组。只有这种格式支持可选的查询时间和大小统计。
默认情况下,审计日志文件内容以新 XML 格式写入,不压缩或加密。
我们将日志格式调整为 JSON。
mysql> set persist_only audit_log_format = json;
Query OK, 0 rows affected (0.01 sec)
该参数需要重启后生效。
mysql> restart;
Query OK, 0 rows affected (0.00 sec)
查看审计日志。
bash-5.1# cat audit.log
[
{ "timestamp": "2025-03-08 06:05:12", "id": 0, "class": "audit", "event": "startup", "connection_id": 0, "account": { "user": "skip-grants user", "host": "" }, "login": { "user": "", "os": "", "ip": "", "proxy": "" }, "startup_data": { "server_id": 1, "os_version": "x86_64-Linux", "mysql_version": "8.4.4-commercial", "args": ["/usr/sbin/mysqld", "--user=mysql" ] } },
{ "timestamp": "2025-03-08 06:05:19", "id": 0, "class": "connection", "event": "connect", "connection_id": 9, "account": { "user": "root", "host": "localhost" }, "login": { "user": "root", "os": "", "ip": "", "proxy": "" }, "connection_data": { "connection_type": "socket", "status": 0, "db": "", "connection_attributes": { "_pid": "67", "_platform": "x86_64", "_os": "Linux", "_client_name": "libmysql", "os_user": "root", "_client_version": "8.4.4", "program_name": "mysql" } } },
{ "timestamp": "2025-03-08 06:05:19", "id": 1, "class": "general", "event": "status", "connection_id": 9, "account": { "user": "root", "host": "localhost" }, "login": { "user": "root", "os": "", "ip": "", "proxy": "" }, "general_data": { "command": "Query", "sql_command": "select", "query": "select @@version_comment limit 1", "status": 0 } },
...
禁用审计功能
audit_log_disable 变量允许禁用所有连接和已连接会话的审计日志记录。例如:
mysql> set global audit_log_disable = true;
Query OK, 0 rows affected (0.00 sec)
当 audit_log_disable 设置为 false 时,会重新启用这个插件。
以 audit_log_disable 设置为 true 时,会产生如下警告。
2025-03-08T06:25:56.055951Z 12 [Warning] [MY-013834] [Server] Plugin audit_log reported: 'Audit Log is disabled. Enable it with audit_log_disable = false.'
使用审计注意事项
使用企业级审计时有几点注意事项。
-
只有SQL语句被记录。非 SQL API(如memcached、Node.JS和NDB API)所做的更改不会被记录到日志中。
-
只有顶级语句被记录,存储程序中的语句、触发器不只被记录。
-
LOAD DATA 等语句引用的文件内容不会被记录。
总结
本文介绍了 MySQL 企业版的安全特性:审计插件。及其一般使用方式和注意事项。更多企业级特性我们后面逐一介绍。
Have a nice day ~ ☕
🌻 往期精彩 ▼
- 错过一个亿,MySQL免费认证页面下架了
- MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
- 卷疯了!众数据库厂商的征文汇
- TiDB社区&墨天轮 | 专栏征文大赛全面开启,期待您分享TiDB业务实战和运维开发那些事儿
- 「合集」三年 50 篇,TiDB 干货全收录
- 「合集」MySQL 8.x 系列文章汇总
- TiDB 新朋友 DBdoctor
- Oracle 数据库全面升级为 23ai
- 广东的崖山,中国的崖山数据库
- TiDB v8 发版!超硬核 v8 引擎!
- 几张图带你了解 TiDB 架构演进
- 一文带你了解 KING BASE 金仓数据库
- 全球 Oracle ACE 社区突破 500 位成员
- 如何选择适合的 MySQL Connector/J 版本
- 即将告别 PG 12,建议升级到 PG 16.3 版本
- G-Star Landscape 2.0 重磅发布,助力开源生态再升级
- 【一文讲透(番外篇)】如何编译安装KWDB v2.0.4数据库
- TiDB x DeepSeek 打造更好用的国产知识库问答系统解决方案
– / END / –
👉 这里可以找到我
👉 这里有得聊
如果对国产基础软件(操作系统、数据库、中间件)感兴趣,可以加群一起聊聊。
关注微信公众号:少安事务所,后台回复[群],即可看到入口。
如果这篇文章为你带来了灵感或启发,请帮忙『三连』吧,感谢!ღ( ´・ᴗ・` )~




