最准方法是直接查mysql.user表并结合mysql.db、mysql.role_edges等系统表,因phpmyadmin界面会遗漏grant option、角色继承权限及db='*'等伪全局权限。
怎么看哪些用户有 all privileges on *.*
直接查 mysql.user 表最准,phpmyadmin 里点开这个库和表,加个 where 条件就能筛出来。别信“权限”标签页里的图形化汇总——它只显示显式授予的权限,而像 grant option 或通过角色继承来的权限可能被漏掉。
实操建议:
- 在 phpMyAdmin 的
mysql库 →user表 → “搜索”页签,字段选Super_priv、Grant_priv、Reload_priv等关键列,值全设为Y - 更稳妥的是用 SQL 搜索:
SELECT User, Host FROM mysql.user WHERE Super_priv = 'Y' OR Grant_priv = 'Y' OR Create_user_priv = 'Y';
- 注意:MySQL 8.0+ 默认禁用
root@localhost的远程访问,但root@'%'如果存在,就是高危点
为什么 SHOW GRANTS FOR 'user'@'host' 比界面更可靠
phpMyAdmin 的“用户账户”页面会把权限按功能分组展示(比如“数据库级权限”“表级权限”),但全局权限(如 SHUTDOWN、PROCESS)常被折叠或归类模糊,甚至不显示。而 SHOW GRANTS 返回的是 MySQL 实际执行的授权语句,不含歧义。
常见错误现象:
- 界面上看到“所有数据库权限”打钩,但没展开看是否含
WITH GRANT OPTION - 用户被赋予了
PROXY权限,界面根本不提,却能冒充其他用户 - MySQL 8.0+ 启用了角色(roles),界面可能只显示角色名,不展开角色本身有哪些权限
实操建议:
- 在 phpMyAdmin 的“SQL”页签里运行:
SHOW GRANTS FOR 'admin'@'192.168.%';
- 重点盯住输出里有没有
ON *.*和WITH GRANT OPTION - 如果看到
USING 'role_name',得再查SELECT * FROM mysql.role_edges WHERE TO_HOST = 'role_name';
mysql.db 和 mysql.tables_priv 里藏着“伪全局权限”
有些用户没被授 *.*,却对所有数据库都有操作权——因为他在 mysql.db 表里 Host 字段是 % 且 Db 是 *(注意:这是通配符,不是字面星号)。这种配置等效于全局权限,但 phpMyAdmin 用户列表里完全不体现。
使用场景:
- 旧版迁移遗留的权限配置,管理员以为只给了 db 级权限,实际是通配
- 脚本自动创建用户时拼错了
Db字段,写成'*'而非'test\_%'
实操建议:
- 查
mysql.db:SELECT User, Host, Db FROM mysql.db WHERE Db = '*' AND Host != 'localhost';
- 查
mysql.tables_priv中Table_name = '%'且Db = '*'的记录(极少见,但存在) - 这类权限无法用
SHOW GRANTS直接还原,必须查系统表
MySQL 8.0+ 的角色权限容易被 phpMyAdmin 忽略
phpMyAdmin 4.9 及更早版本对角色支持很弱,点开用户详情几乎不展示其激活的角色,更不会递归列出角色所拥有的权限。一个用户自己权限平平,但 SET DEFAULT ROLE all_power TO 'dev'@'%'; 后,实际拥有全部权限。
性能与兼容性影响:
- 角色权限检查比直接授权略慢,但审计时主要问题是“看不见”
- phpMyAdmin 5.0+ 开始支持角色列表,但默认不启用;需确认配置中
$cfg['Servers'][$i]['AllowRoot']和auth_type是否允许读取mysql.role_edges
实操建议:
- 强制检查角色分配:
SELECT FROM_USER, FROM_HOST, TO_USER, TO_HOST FROM mysql.role_edges;
- 查某用户默认角色:
SELECT Default_role FROM mysql.default_roles WHERE USER = 'api' AND HOST = '%';
- 别依赖 phpMyAdmin 的“权限”页签做最终判断,尤其在升级到 MySQL 8.0 后
事情说清了就结束。真正危险的不是明面上的 root,而是那些权限字段分散在多张系统表、又混着角色和通配符的账号——它们在 phpMyAdmin 界面里最不显眼,却最容易被漏审。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











