phpMyAdmin 4.x 不支持直接修改用户认证插件,其界面“更改密码”中的加密方式下拉菜单无效,实际不生成 IDENTIFIED WITH 语句;唯一可靠方式是通过 SQL 标签页手动执行 ALTER USER 命令,并注意版本对应语法及客户端兼容性。
phpMyAdmin 4.x 不支持直接修改用户认证插件
你点进「用户账户」→「编辑权限」→「更改密码」,看到的“加密方式”下拉菜单(如 mysql_native_password、caching_sha2_password)只是个假象——phpmyadmin 4.x(含 4.9.x)压根不生成 identified with 语句,它只拼 set password 或更新 mysql.user 表的 password 字段,而这两种操作在 mysql 8.0+ 上已被废弃,且完全忽略插件指定。
换句话说:那个下拉框选了也白选,实际执行时仍强制走旧逻辑,甚至可能报错 ERROR 1064 或静默失败。
必须用 SQL 手动执行 ALTER USER
唯一可靠的方式是绕过界面,进 SQL 标签页直写命令。注意版本分水岭:
- MySQL 5.7.6–5.7.32 / MariaDB 10.2+:
ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpass'; - MySQL 8.0.4+:
ALTER USER 'username'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'newpass'; - 如果用户需从任意主机连接,把
'localhost'换成'%'或具体 IP;改完立即生效,无需FLUSH PRIVILEGES
别用 UPDATE mysql.user —— 8.0+ 的 authentication_string 字段不能直接赋值,且插件名存在 plugin 字段里,手动更新极易错位。
改完插件后连不上?先查客户端兼容性
换插件不是改密码那么简单,很多老工具会直接拒连:
- PHP 7.1–7.3 默认不带
caching_sha2_password支持,连之前得装mysqlnd并启用default_authentication_plugin配置 - 旧版 Navicat、HeidiSQL、甚至某些 PHP PDO 连接字符串没加
?serverVersion=8.0参数时,握手阶段就断开 - 确认你的应用连接串里显式指定了
auth_plugin=mysql_native_password(PDO)或default-auth=mysql_native_password(mysql CLI)
phpMyAdmin 自身若用 config 模式登录,还得同步改 config.inc.php 里的 $cfg['Servers'][$i]['password'] 和 $cfg['Servers'][$i]['auth_type'],否则下次打不开。
为什么不能批量改所有用户插件?
MySQL 不允许对 mysql.user 表做跨行原子更新插件,ALTER USER 必须单条执行。试图用 UPDATE 批量改 plugin 字段会导致权限系统损坏——部分用户能登录但无任何权限,因为校验流程已中断。
真要批量处理,只能写脚本循环调用 ALTER USER,且每条都得单独验证是否成功。更稳妥的做法是:新用户统一用 caching_sha2_password,存量用户保持 mysql_native_password,等客户端逐步升级后再迁移。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











