讲师中心 微信公众号
AI工具推荐 视频效率加速

mysql权限变更如何记录_mysql日志审计方法

轻杰酱_3837

轻杰酱_3837

发布时间:2026-02-05 09:16:02

|

655人浏览过

|

来源于php中文网

原创

MySQL默认不记录GRANT/REVOKE操作,需启用server_audit插件并配置server_audit_events='CONNECT,QUERY_DDL'才能实现合规审计;general_log和binlog均无法满足结构化、可追溯、带身份与结果的审计要求。

mysql权限变更如何记录_mysql日志审计方法

MySQL 默认不记录 GRANT/REVOKE,靠 general_log 或 binlog 都不行

这是最常被误踩的坑:很多人以为开了 general_log 就能审计权限变更,或者指望 binlog 里翻出 GRANT 语句——但事实是:binlog 默认跳过权限语句(除非显式设置 binlog_format=ROW 且启用 log_bin_trust_function_creators,仍不保证记录),而 general_log 虽然会记下所有语句,却无结构、无操作类型标记、无法过滤“谁在什么时候执行了哪条权限语句”,日志体积爆炸且难回溯。

  • GRANT SELECT ON mydb.* TO 'auditor'@'%' 这类语句,在 general_log 里只是一行纯文本,没有 user/host/query 字段分离,也没成功/失败状态
  • binlog 主要服务数据恢复,不是审计工具;MySQL 社区版甚至默认不写 DDL 到 binlog(binlog_format=STATEMENT 下部分 DDL 不记)
  • 合规审计(如等保2.0、金融行业要求)明确需要可追溯、带身份、带时间、带结果的操作事件流——这两者都不满足

社区版 MySQL 必须用 server_audit 插件,且必须开 QUERY_DDL

MySQL 社区版没内置审计模块,server_audit(来自 MariaDB,兼容主流 MySQL 5.7/8.0)是目前最轻量、最可靠的选择。它原生识别权限语句,并打上 QUERY 类型 + QUERY_DDL 子类标签,每条日志含 user、host、query、status(0=成功,非0=失败)等结构化字段。

  • 安装命令:INSTALL PLUGIN server_audit SONAME 'server_audit.so';(插件路径用 SHOW VARIABLES LIKE 'plugin_dir'; 查)
  • 关键配置必须包含:server_audit_events = 'CONNECT,QUERY_DDL' ——漏掉 QUERY_DDL 就等于没开权限审计
  • 建议排除高危账号(如 root)避免日志刷屏:server_audit_excl_users = 'root',但别 exclude 运维账号本身
  • 日志路径设为独立目录并限制权限:server_audit_file_path = '/var/log/mysql/audit.log',然后 chown mysql:mysql /var/log/mysql 防篡改

别混用 general_log,它和 server_audit 冲突且拖慢性能

很多运维图省事,一边开 server_audit,一边还留着 general_log = ON,结果发现查询变慢、磁盘 IO 暴涨、日志文件互相干扰。这不是叠加增强,而是冗余+冲突。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • general_log 是全量文本日志,每条连接、每条语句都写,无缓冲、无压缩、无轮转控制;server_audit 是事件驱动、二进制友好、支持轮转(server_audit_file_rotate_size)
  • 两者同时开启时,server_audit 的 QUERY 事件可能重复记录 general_log 已写的语句,造成解析混乱
  • 实操建议:确认 server_audit 正常工作后,立刻关掉 general_log:SET GLOBAL general_log = OFF;,并在 my.cnf 中注释掉相关配置

审计日志要能查、能防删、能归档,否则等于没记

日志写出来了,但如果没人看、被删了、或撑爆磁盘,就只是自我安慰。真正落地的审计必须考虑后续链路。

  • 用 logrotate 做自动轮转(示例配置中指定 rotate 10 + size 1G),避免单文件过大导致 tail -f 卡死或 grep 超时
  • 禁止日志目录对非 mysql 用户可写:chmod 750 /var/log/mysql,必要时用 chattr +a(仅追加)锁定主日志文件
  • 定期用脚本提取关键事件,例如:grep '"event":"QUERY_DDL"' /var/log/mysql/audit.log | grep -E "(GRANT|REVOKE|CREATE USER)"
  • 注意:server_audit 不记录语句执行结果是否生效(比如用户不存在时 REVOKE 失败),需结合 status 字段判断,失败值常见为 1044、1227 等错误码

真正卡住人的从来不是“怎么开日志”,而是“怎么确保它持续有效、不可绕过、可验证”。权限变更审计一旦松动,后面所有数据安全动作都会失焦——尤其是当 DBA 自己就是执行者时,日志的隔离性与抗抵赖设计,比功能开关本身更重要。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2393

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1459

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

855

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3372

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

5768

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1259

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6031

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

5242

2023.08.14

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 193人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn