结论是phpMyAdmin未限制创建用户,而是当前MySQL账号权限不足;根源在于空密码登录匹配到匿名用户''@'localhost',其无CREATE USER权限,需删除空用户并显式授权root。

直接说结论:不是 phpMyAdmin 本身限制你创建用户,而是你当前登录的 MySQL 账号权限不足 —— 很大概率是用空密码登录的 root 或匿名用户,这类账号在新版 MySQL(尤其是 5.7+ 和 8.0+)中默认被降权,CREATE USER、GRANT 等管理语句会被拒绝。
为什么空密码登录后不能创建用户
MySQL 的权限校验机制会优先匹配 user 表中最具体的 host + user 组合。当你用空密码登录时,实际可能匹配到的是 ''@'localhost' 这类匿名用户(user 字段为空),它没有被显式授权任何权限,连 USAGE 都不完整。即使你看到用户名显示为 root,后台认证走的也可能是这个空用户记录。
典型现象包括:
- phpMyAdmin 登录成功,但点击“用户”→“新建用户”按钮无反应或报错
#1227 - Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation - 执行
CREATE USER 'test'@'localhost' IDENTIFIED BY '123';报错Access denied for user ''@'localhost' -
SELECT USER(), CURRENT_USER();返回结果不一致(前者是你声称的身份,后者才是 MySQL 实际认证的身份)
确认当前真实登录身份
进 phpMyAdmin 后,直接在 SQL 标签页执行:
SELECT USER(), CURRENT_USER();
如果返回类似:
+----------------+------------------+ | USER() | CURRENT_USER() | +----------------+------------------+ | root@localhost | @localhost | +----------------+------------------+
说明你正以 root 名义连接,但 MySQL 实际按空用户 ''@'localhost' 认证 —— 这就是权限缺失的根源。
进一步查空用户:
SELECT user, host, authentication_string FROM mysql.user WHERE user = '' OR authentication_string = '' OR plugin = 'auth_socket';
只要结果非空,就必须清理。
修复步骤:删空用户 + 显式授权 root
必须通过命令行(或宝塔终端)操作,phpMyAdmin 此时已不可信:
- 先用
mysql -u root -p登录(若仍允许空密码,则直接mysql -u root) - 执行:
USE mysql; DELETE FROM user WHERE user = ''; FLUSH PRIVILEGES;
- 确保
root@localhost有完整权限:GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
- 如果 MySQL 是 8.0+,且使用
caching_sha2_password插件,还需重置密码并指定插件:ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'your_strong_password';
phpMyAdmin 配置别踩两个坑
改完数据库权限后,还要同步检查 phpMyAdmin 自身配置,否则仍会“绕回空用户”:
-
$cfg['Servers'][$i]['AllowNoPassword']必须设为false(除非你明确需要空密码开发环境)—— 否则 phpMyAdmin 会主动跳过密码字段,强制走空用户认证 -
$cfg['Servers'][$i]['password']如果留空,且AllowNoPassword = true,phpMyAdmin 就不会传密码,哪怕你数据库里root已设密码 - 检查
$cfg['Servers'][$i]['auth_type']:设为config时,密码硬编码在配置里;设为cookie时,每次登录需手动输 —— 开发环境推荐后者,避免密码明文落盘
真正麻烦的从来不是“怎么创建用户”,而是 MySQL 认证链里那几个看不见的空用户和 phpMyAdmin 的自动降级逻辑 —— 它们藏得深,但只要查一次 CURRENT_USER(),基本就定位到根上了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











