You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:40:38