phpMyAdmin 4.0–4.2中全局权限入口在右上角「Privileges」→用户列表→「Edit privileges」→滚动到底部选「All databases」→勾选权限→必须点击「Reload privilege tables」或执行FLUSH PRIVILEGES才生效。
老版本 phpmyadmin(4.0–4.2)没有「global privileges」独立标签页,必须手动选 all databases 才能设置全局权限;不点 reload privilege tables 或执行 flush privileges,新权限不会生效。
phpMyAdmin 4.x 怎么找到全局权限入口?
顶部菜单没有「Users」或「权限」标签——这是老版本的默认设计。正确路径是:右上角当前用户名 → 点击 Privileges(不是 User accounts)。如果看不到这个选项,说明你登录的账号没 SELECT 权限读取 mysql.user 表,换 root 或带 GRANT OPTION 的账号重登。
进入用户列表后,点击目标用户的 Edit privileges 链接。页面默认只展开「Database-specific privileges」区域,Global privileges 被折叠在最底部,标题不显眼,容易当成页脚忽略。
- 向下滚动到底部,找到「Add privileges on the following databases」区域
- 从下拉框中选择
All databases—— 这是唯一触发全局权限复选框出现的操作 - 如果下拉框里没有
All databases,检查是否启用了skip-grant-tables,或当前账号缺失GRANT OPTION
勾完权限后为什么还是没用?
phpMyAdmin 4.x 不自动刷新权限缓存。即使你勾选了 SELECT、INSERT 等权限并点了 Go,MySQL 实例仍按旧权限表运行。
- 必须额外点击右上角的
Reload privilege tables按钮(位置在页面右上角,靠近用户名旁边) - 或者手动切到
SQL标签页,执行FLUSH PRIVILEGES - 注意:仅执行
GRANT语句不等于生效,FLUSH PRIVILEGES是必要步骤
哪些全局权限不该随便勾?
Check All 看起来省事,但会一并赋予 FILE、SUPER、SHUTDOWN 等高危权限,相当于把 MySQL 服务器控制权交出去。
立即学习“PHP免费学习笔记(深入)”;
-
FILE:可读写服务器任意文件(含/etc/passwd),配合SELECT ... INTO OUTFILE极易被利用 -
SUPER:能 kill 线程、修改全局变量、绕过 max_connections 限制 -
PROCESS:能看到所有连接执行的 SQL,含敏感查询逻辑 - 普通应用用户只需
SELECT、INSERT、UPDATE、DELETE四项,且优先走「Database-specific privileges」而非全局
Host 字段匹配要严格到字符级
MySQL 认为 'user'@'localhost' 和 'user'@'127.0.0.1' 是两个完全不同的账号,权限不互通。phpMyAdmin 显示的 Host 值必须和 mysql.user 表里实际存储的一致。
- 创建用户时 Host 填
%表示允许任意主机连接,但存在安全风险 - 填
localhost时,MySQL 会走 socket 连接;填127.0.0.1则走 TCP,行为不同 - 编辑权限前,先在
SQL标签页查一句SELECT User, Host FROM mysql.user WHERE User = 'xxx';,确认你要改的是哪一行
最容易被跳过的动作是滚动到底部选 All databases 和点击 Reload privilege tables——这两个操作缺一不可,而且顺序不能反。很多人卡在这一步,不是权限设错了,是根本没真正生效。



















