直接收回PROCESS权限即可阻止普通用户执行SHOW PROCESSLIST或访问information_schema.PROCESSLIST查看他人查询语句,该操作即时生效、不影响业务,且能彻底切断信息泄露通道。

直接收回 PROCESS 权限就能阻止普通用户执行 SHOW PROCESSLIST 或调用 information_schema.PROCESSLIST 查看他人查询语句——这是最有效、最干净的手段。MySQL 不会因缺少该权限而影响正常业务,但能立刻切断一条常见的信息泄露通道。
为什么必须禁用 PROCESS 权限
拥有 PROCESS 权限的用户可看到所有连接的完整 SQL 语句,包括带明文参数的 SELECT * FROM users WHERE token = 'xxx' 或含密码的 INSERT INTO login_logs。这在调试、监控类账号被泄露时极为危险。它不属于数据操作类权限,而是服务器级管理权限,和 SUPER、RELOAD 同级,绝不应授予应用账号。
如何安全收回 PROCESS 权限
使用 REVOKE 命令移除权限,注意以下要点:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 必须由高权限账号(如
root或具备GRANT OPTION的管理员)执行 - 权限回收是即时生效的,无需重启 MySQL
- 命令格式为:
REVOKE PROCESS ON *.* FROM 'app_user'@'10.20.30.%'; - 若用户有多个主机段(如
'app_user'@'localhost'和'app_user'@'%'),需分别收回 - 执行后验证:
SHOW GRANTS FOR 'app_user'@'10.20.30.%';,确认输出中不再含PROCESS
收回后用户还能看到什么
权限移除后,用户执行 SHOW PROCESSLIST 只能看到自己的连接(状态为 User 列显示自身用户名),且 Info 字段为空;访问 information_schema.PROCESSLIST 表时,对应行的 INFO 列返回 NULL。这不是 bug,是 MySQL 的权限隔离设计——你无法绕过这个限制,哪怕用子查询或视图封装也无效。
容易被忽略的兼容性细节
某些旧版监控脚本或 ORM 初始化逻辑会默认尝试 SHOW PROCESSLIST 获取连接数,收回权限后可能报错 ERROR 1227 (42501): Access denied; you need (at least one of) the PROCESS privilege(s) for this operation。这不是安全漏洞,而是脚本过度依赖非必要权限。解决方式是:改用 SHOW STATUS LIKE 'Threads_connected' 替代,它不需要 PROCESS 权限,且同样反映活跃连接数。










