mysql数据库的高权限用户通常拥有增删改查所有库表、修改用户权限、执行系统命令等高级权限,对这类用户的操作进行审查是数据库安全运维的核心工作之一,能够及时发现误操作、恶意操作等风险行为。

开启general_log记录所有操作
mysql自带的通用查询日志general_log会记录所有到达mysql服务器的SQL语句,包括高权限用户的连接、查询、修改等操作,适合需要完整记录所有操作场景的审查需求。
首先查看当前general_log的开启状态:
-- 查看general_log配置 SHOW VARIABLES LIKE 'general_log%';
如果general_log的值是OFF,可以通过以下命令开启:
-- 开启通用查询日志,日志文件路径可以自定义 SET GLOBAL general_log = 'ON'; SET GLOBAL general_log_file = '/var/log/mysql/general.log';
开启后,所有高权限用户的操作都会写入指定的日志文件,我们可以通过过滤日志中的用户名来定位高权限用户的操作:
-- 过滤general.log中root用户的操作记录 grep "root" /var/log/mysql/general.log
需要注意的是general_log会对性能有一定影响,不建议长期开启,仅适合短期审查或者低并发场景使用。
通过binlog追溯数据变更操作
二进制日志binlog主要记录数据库的变更操作,包括高权限用户执行的INSERT、UPDATE、DELETE、DDL等修改数据的操作,适合事后追溯数据变更的来源。
首先确认binlog已经开启:
-- 查看binlog开启状态 SHOW VARIABLES LIKE 'log_bin';
如果返回值是ON说明已经开启,我们可以通过mysqlbinlog工具解析binlog文件,过滤高权限用户的操作:
-- 解析binlog文件,过滤root用户的操作 mysqlbinlog /var/lib/mysql/binlog.000001 | grep "user='root'"
如果需要查看具体的SQL内容,可以去掉grep过滤,直接查看解析后的完整日志,binlog中会记录操作的时间、用户、具体SQL等信息,能够精准定位数据变更的操作者。
使用审计插件实现精细化审查
如果需要更灵活的审查规则,比如只记录特定高权限用户的操作、只记录敏感表的操作,可以使用mysql的审计插件,比如官方提供的MySQL Enterprise Audit,或者开源的MariaDB Audit Plugin。
以MariaDB Audit Plugin为例,安装后可以通过配置文件设置审计规则:
-- 审计插件配置示例,记录root用户的所有操作 [mysqld] plugin_load_add = audit_log.so audit_log_format = NEW audit_log_policy = ALL audit_log_include_users = root
重启mysql服务后,审计插件会按照配置的规则记录高权限用户的操作,生成的审计日志结构清晰,包含操作时间、用户、IP、SQL类型、执行结果等信息,方便后续做审计分析。
不同审查方式对比
以下是几种常见审查方式的特性对比,可以根据实际需求选择:
| 审查方式 | 记录范围 | 性能影响 | 适用场景 |
|---|---|---|---|
| general_log | 所有SQL操作 | 较高 | 短期全量操作审查 |
| binlog | 数据变更操作 | 低 | 事后数据变更追溯 |
| 审计插件 | 可自定义规则 | 中等 | 长期精细化审计 |
审查注意事项
- 审计日志需要定期备份,避免日志文件过大占用磁盘空间,同时防止日志被篡改。
- 高权限用户的操作审查需要结合权限管控,避免高权限用户本身关闭审计功能,建议将审计配置设置为只读,仅允许特定管理员修改。
- 对于核心业务库,建议同时使用多种方式交叉审查,提升审计的可靠性。
mysql高权限用户审计binloggeneral_log审计插件修改时间:2026-07-09 18:03:25