phpMyAdmin没有“次级管理员”选项,因其本身不支持角色、层级或权限继承,所谓次级管理员实为通过GRANT ... WITH GRANT OPTION显式授权的普通用户;必须手动勾选Global privileges底部的GRANT OPTION、EVENT、TRIGGER、LOCK TABLES,并确保host匹配(如'%'而非仅'localhost'),且执行FLUSH PRIVILEGES生效。
不能直接“设置次级管理员”,必须用 grant ... with grant option 显式授权,且 phpmyadmin 的 ui 会漏掉关键权限项。
为什么 phpMyAdmin 里找不到“次级管理员”选项
phpMyAdmin 没有角色、层级或继承概念——它只是把 MySQL 的 GRANT 语句包装成表单。所谓“次级管理员”,实际就是普通用户被授予了部分全局权限 + WITH GRANT OPTION,使其能向其他用户授出自己拥有的那些权限。
常见错误现象:
- 在「用户账户」→「编辑权限」里勾了「Global privileges」下的所有框,但没勾最下方的「Grant」复选框 → 用户无法再授权给他人
- 点了「Check All」却没滚动到底部确认
EVENT、TRIGGER、LOCK TABLES是否也被选中 → 执行 Laravel 迁移或 mysqldump 时失败 - 用
'admin'@'localhost'授权,但开发人员从容器内连的是'admin'@'172.18.0.3'→ 权限不匹配,连接被拒
必须手动补全的权限项(仅靠 phpMyAdmin 点选不够)
phpMyAdmin 的「全选」只覆盖常用权限,而完整管理能力依赖以下几项,它们常被隐藏或默认未勾:
-
EVENT:用于定时任务(如自动清理日志) -
TRIGGER:Laravel、Doctrine 等框架建迁移时可能需要 -
LOCK TABLES:mysqldump --single-transaction依赖此项 -
GRANT OPTION:这是“次级”的核心,不勾就只是高级只读用户
操作路径:进入目标用户的「编辑权限」→ 切换到「Global privileges」→ 点「显示所有权限」→ 滚动到底部逐个确认上述四项已勾选 → 拉到页面最底点击 Go(不是回车,不是刷新按钮)。
立即学习“PHP免费学习笔记(深入)”;
host 匹配和权限刷新是生效前提
MySQL 把 'user'@'localhost' 和 'user'@'%' 当作两个完全独立的账号,host 不对,权限就等于没设。
- 若次级管理员需从任意网络位置登录(如 CI/CD 服务器、本地 IDE),host 必须设为
'%',不能只留'localhost' - 权限提交后,必须执行
FLUSH PRIVILEGES;—— phpMyAdmin 右上角的「Reload privilege tables」按钮可替代,但某些版本(如 MariaDB 启用skip-grant-tables时)会失效 - 如果改完权限后子用户仍连不上,先查
SELECT user, host FROM mysql.user WHERE user = 'admin';确认 host 记录存在且匹配
导出配置时容易丢的关键信息
通过「导出所选用户」生成的 SQL,默认只有 GRANT 语句,不含 CREATE USER 或密码哈希。直接导入新环境会报错:ERROR 1133 (42000): Can't find any matching row in the user table。
正确做法:
- 导出前,在「导出用户」弹窗中勾选「Add CREATE USER statement」和「Add SET PASSWORD statement」
- 或者跳过 UI,直接在「SQL」页运行:
SHOW CREATE USER 'admin'@'%';和SHOW GRANTS FOR 'admin'@'%';,合并两段结果手动拼成完整初始化脚本
真正卡住人的从来不是“怎么点”,而是 host 写错、GRANT OPTION 漏勾、FLUSH PRIVILEGES 忘执行,以及导出时默认不带用户创建语句——这四点,任一出错都会让权限看起来“设了但没用”。



















