“Check All”会悄悄授予SUPER等高危权限,因其在全局权限区一键勾选即赋予SUPER、FILE、SHUTDOWN、PROCESS等服务器级权限,而这些权限可kill线程、读写任意文件、重启实例,远超普通运维所需,极易引发安全风险。
为什么“Check All”会悄悄给 SUPER 权限
phpmyadmin 的「global privileges」区域里,勾选 check all 看似省事,实则直接授予 super、file、shutdown、process 这类服务器级权限。这些权限不作用于某张表或某个库,而是能 kill 线程、读写任意系统文件、甚至重启 mysql 实例——普通 dba 或应用运维根本用不到。
常见错误现象:
- 用户刚创建完,登录后发现能执行
KILL 123或SELECT @@version_compile_os - 安全扫描工具报出
user has SUPER privilege高危告警 - MySQL 日志里频繁出现
Access denied for user ... using password: YES,但其实是权限过大被 WAF 拦截
手动勾选时必须跳过的 4 个危险权限
进入「Edit privileges」→「Global privileges」后,以下复选框除非你明确需要,否则一律不勾:
-
SUPER:允许修改全局变量、kill 其他用户线程、绕过 binlog 限制 -
FILE:配合INTO OUTFILE可写 WebShell,是导出功能禁用失败后的兜底漏洞点 -
SHUTDOWN:可直接执行SHUTDOWN命令让 MySQL 进程退出 -
PROCESS:能查看所有连接的 SQL 内容,敏感信息明文泄露
真正常用且相对安全的全局权限只有:SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、GRANT OPTION(仅当需授权他人时才开)。
旧版 phpMyAdmin(
5.2 之前版本默认不展开「Global privileges」区域,很多用户在「Add user account」页面填完用户名密码就直接点执行,结果权限全走默认值——即空权限,等同于只给 USAGE,连 SELECT 都没有,后续还得补。
立即学习“PHP免费学习笔记(深入)”;
更隐蔽的问题是:旧版界面底部有 Add privileges on the following databases 下拉框,若误选 All databases,它实际等效于勾选全部全局权限,包括 SUPER 和 FILE,但 UI 上完全不提示。
正确做法:
- 先选
None,保存用户后再单独进「Edit privileges」精细配置 - 确认左上角版本号:
SELECT VERSION();查 MySQL 版本,phpinfo()查 phpMyAdmin 版本 - MariaDB 用户注意:
skip-grant-tables=on时整个权限界面灰显,必须关掉再试
用 SQL 校验和修复已误授的权限
一旦发现用户已被赋予高危权限,别只信 phpMyAdmin 界面显示——它可能缓存未刷新。直接查 MySQL 底层:
SELECT User, Host, Super_priv, File_priv, Shutdown_priv, Process_priv FROM mysql.user WHERE User = 'baduser';
若返回 Y,立刻回收:
REVOKE SUPER, FILE, SHUTDOWN, PROCESS ON *.* FROM 'baduser'@'%';<br>FLUSH PRIVILEGES;
注意:'baduser'@'localhost' 和 'baduser'@'127.0.0.1' 是两个独立账号,得分别处理;FLUSH PRIVILEGES 不是可选操作,phpMyAdmin 不自动触发它。
复杂点在于权限残留:哪怕 UI 里取消了 SUPER,如果之前用过 GRANT ALL ON *.*,MySQL 仍可能保留隐式权限,必须用 REVOKE 显式清除,不能只靠界面点叉。



















