基础信息

MySQL 8 的审计功能实现方式取决于Mysql的版本(企业版 or 社区版)。企业版自带原生插件audit_log 插件,社区版需借助第三方插件。

早期用社区版 5.7 版本时,MariaDB审计插件通过调整源码适配,基本可兼容覆盖 5.7 绝大部分主流版本。8.0 后,MariaDB 插件不再兼容。但在 2024 年 7 月,Percona 社区发文验证审计插件支持 MySQL 8.0 版本。

环境信息

数据库版本:mysql8.0.37社区版 (Centos7系统)
审计插件版本:从Percona-Server-8.0.37中提取audit_log.so插件

插件获取

下载Percona-Server-8.0.37-29-Linux.x86_64.glibc2.17.tar.gz,然后解压,获取Percona-Server-8.0.37-29-Linux.x86_64.glibc2.17/lib/plugin中的audit_log.so文件,可点此直接获取审计插件。

插件安装

  1. 登录mysql,执行以下命令获取mysql的插件目录
SHOW GLOBAL VARIABLES LIKE '%plugin_dir%';

在这里插入图片描述
2. 将审计插件 audit_log.so文件放到mysql8插件目录中
3. 登录msyql,执行以下命令安装插件:

INSTALL PLUGIN audit_log SONAME 'audit_log.so';

4.查看审计相关的变量

show variables like '%audit%';

在这里插入图片描述

  1. 配置持久化参数
    编辑 MySQL 配置文件(Linux 为 /etc/my.cnf),在 [mysqld] 段添加以下配置,确保重启后生效:
[mysqld]
plugin-load-add = audit_log.so
# 日志路径(建议独立目录,权限仅 MySQL 可访问)
audit_log_file = /var/log/mysql/audit.log
# 日志格式:JSON(易解析)/ OLD(传统格式)
audit_log_format = JSON
# 审计策略:ALL(全量记录)、LOGINS(仅登录)、QUERIES(仅查询)
audit_log_policy = ALL
# 异步写入策略,降低性能影响
audit_log_strategy = ASYNCHRONOUS
# 日志轮转:按大小触发(单位字节,如 100M=104857600)
audit_log_rotate_on_size = 104857600
# 保留历史日志数量(0 禁用轮转,不建议)
audit_log_rotations = 5
# 排除内置系统账户(可选)
audit_log_exclude_accounts = 'mysql.sys@localhost'

关键参数说明

Variable_name Value 说明
audit_log_buffer_size 1048576 审计日志的缓冲区大小,单位为字节
audit_log_exclude_accounts 指定不记录审计日志的数据库用户
audit_log_exclude_commands 指定不记录审计日志的命令类型
audit_log_exclude_databases 指定不记录审计日志的数据库
audit_log_file audit.log 审计日志文件名
audit_log_flush OFF 控制是否自动刷新审计日志缓冲区到磁盘(OFF 表示关闭自动刷新)
audit_log_format JSON 审计日志的文件格式
audit_log_handler FILE 审计日志的输出方式
audit_log_include_accounts 指定仅记录这些账号的审计日志
audit_log_include_commands 指定仅记录这些命令类型的审计日志
audit_log_include_databases 指定仅记录这些数据库的审计日志
audit_log_policy ALL 审计日志的核心记录策略
audit_log_rotate_on_size 0 日志文件自动轮转的触发阈值(单位:字节)
audit_log_rotations 5 日志轮转后保留的历史日志文件数量(最多保留 5个)
audit_log_strategy ASYNCHRONOUS 审计日志的写入策略(ASYNCHRONOUS 表示异步写入)
audit_log_syslog_facility LOG_USER 指定审计日志发送到系统日志时的 “设备类型”(facility),用于分类系统日志的来源
audit_log_syslog_ident percona-audit 指定审计日志在系统日志中的 “标识字符串”(identifier),用于区分不同应用的日志
audit_log_syslog_priority LOG_INFO 指定审计日志在系统日志中的 “优先级”(priority),用于标记日志的重要程度

审计日志样例

{
    "audit_record": {
        "name": "Query",                        //表示审计记录的事件类型
        "record": "3912_2026-04-08T04:23:56",  //计记录的唯一标识(ID)
        "timestamp": "2026-04-08T09:15:40Z",   //事件发生的时间戳(UTC 时间)
        "command_class": "select",           //操作命令类型
        "connection_id": "14",               //本次数据库连接的唯一会话 ID
        "status": 0,                         //操作的状态码
        "sqltext": "select * from db",       //SQL查询语句
        "user": "root[root] @  [10.7.2.230]", //操作用户
        "host": "",                        //客户端连接的主机名
        "ip": "10.7.2.230",               //客户端的 IP 地址
        "db": ""                          //登录时指定的默认数据库
    }
}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐