error 1045 根本不是权限不足,而是认证失败:mysql 未识别 'root'@'localhost' 身份,主因是 host/user/authentication_string/plugin 四字段不匹配,尤其 mysql 8.0+ 默认 caching_sha2_password 插件与旧版 phpmyadmin 不兼容。
权限加了但还是报 #1045,说明 mysql 根本没走到“检查权限”那步——它连认证都没通过,压根不认你是谁。
phpMyAdmin 报 1045 不是权限问题,是认证失败
错误信息 #1045 - Access denied for user 'root'@'localhost' 的关键在 Access denied,不是 Access denied for this operation。前者代表用户身份校验失败(账号/密码/插件/主机名任一不匹配),后者才是权限不足。你执行 GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'xxx'; FLUSH PRIVILEGES; 再刷新,依然报 1045,就说明 MySQL 连登录环节都卡住了,根本没机会读你的 GRANT 记录。
MySQL 8.0+ 默认用 caching_sha2_password 插件,phpMyAdmin 5.2 以前不支持
升级过 MySQL 或重装过 XAMPP/飞牛 NAS 的用户最容易踩这个坑:新安装的 MySQL 8.0+ 默认给 'root'@'localhost' 分配了 caching_sha2_password 认证插件,而旧版 phpMyAdmin(尤其是 5.0–5.2.2)只认 mysql_native_password。输对密码也会静默拒绝,且错误信息完全不变。
- 验证方式:命令行连上后执行
SELECT User, Host, plugin FROM mysql.user WHERE User = 'root';,如果plugin列显示caching_sha2_password,就是它 - 修复命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; - 必须跟一句:
FLUSH PRIVILEGES;,否则不生效 - 改完再试
mysql -u root -p,能进才说明插件改对了
host 字段写成 '%' 并不能解决 'root'@'localhost' 的 1045
很多人看到报错里是 'root'@'localhost',就去执行 UPDATE user SET Host = '%' WHERE User = 'root'; ——这反而会让问题更糟。MySQL 认证时严格匹配 User + Host 元组,'root'@'%' 和 'root'@'localhost' 是两个独立账号。phpMyAdmin 默认走的是 localhost(或 127.0.0.1),它不会自动 fallback 到 %。你删掉或覆盖了 'root'@'localhost' 这条记录,等于直接废掉了本地登录入口。
- 正确做法:保留
'root'@'localhost',确保它的plugin和authentication_string正确 - 如果真要开放远程,额外加一条
'root'@'192.168.%'或'admin'@'%',别动原生 localhost 账号 -
config.inc.php里$cfg['Servers'][$i]['host']设成'127.0.0.1'可绕过 socket 解析歧义,比留'localhost'更稳
config.inc.php 里的 password 字段填对了,但 MySQL 实际存的是 authentication_string
MySQL 5.7+ 废弃了 password 字段,改用 authentication_string 存哈希值。而很多教程抄的旧配置还在让你改 password 字段,或者你用 SET PASSWORD = PASSWORD('xxx'); 这种老语法,结果字段没更新成功,看着像改了,其实 MySQL 还在比对空字符串。
- 查真实密码字段:
SELECT User, Host, authentication_string FROM mysql.user WHERE User = 'root'; - 安全重置方式(跳过插件限制):
UPDATE mysql.user SET authentication_string = '' WHERE User = 'root' AND Host = 'localhost'; FLUSH PRIVILEGES; - 然后用
ALTER USER重新设密码和插件,比直接 UPDATE 字段更可靠
真正卡住的地方从来不是“权限没给够”,而是“MySQL 压根没认出你是 root”。先确认 mysql -u root -p 能否直连,再动 phpMyAdmin 配置;直连都失败,就别碰 GRANT 语句——那是给已经登录的人用的。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











