如何查看MySQL执行命令历史?排查非root用户权限异常
查看MySQL执行命令历史及权限排查方案
一、查看历史执行命令的几种途径
1. 通用查询日志(General Query Log)
通用查询日志会记录所有客户端发送给MySQL的SQL命令,包括权限变更语句,是排查这类问题的首选:
- 先确认日志是否开启:
若SHOW VARIABLES LIKE 'general_log%';general_log的值为ON,则日志已开启,general_log_file字段会显示日志文件路径。 - 直接查看日志内容,或过滤目标用户的操作:
如果日志未开启,无法回溯之前的操作,但建议立即开启以便后续排查。grep '承包商使用的用户名' /path/to/general.log
2. 二进制日志(Binary Log)
二进制日志记录了所有数据变更类操作(含GRANT/REVOKE等权限变更语句):
- 确认日志是否开启:
若SHOW VARIABLES LIKE 'log_bin%';log_bin为ON,则日志已开启,log_bin_basename字段是日志文件的基础路径。 - 使用
mysqlbinlog解析日志,重点过滤权限相关操作:
可根据承包商操作的时间范围,选择对应的轮转日志文件(文件名后缀递增)。mysqlbinlog /path/to/binlog.0000xx | grep -E 'GRANT|REVOKE|ALTER USER|DROP USER'
3. phpMyAdmin操作日志
如果承包商是通过phpMyAdmin执行的操作,可检查其内置日志:
- 查看phpMyAdmin配置文件
config.inc.php,找到$cfg['ServerLog']配置的日志文件路径,直接查看内容。 - 部分版本会将操作历史存储在数据库的
pma_history表中,登录root账号查询该表即可获取操作记录。
二、补充权限排查点
你提到已排查mysql.user表,但非root用户的数据库级权限通常存储在mysql.db表,建议执行以下查询确认:
SELECT * FROM mysql.db WHERE User='你的非root运维用户名';
重点查看Select_priv、Insert_priv等权限字段是否被修改为N,或仅授权了information_schema数据库。
内容的提问来源于stack exchange,提问作者Classified
相关产品推荐
相关产品推荐

