mysql 8.0默认认证插件是caching_sha2_password,导致旧版navicat等客户端报错“plugin caching_sha2_password could not be loaded”;需执行alter user 'root'@'localhost' identified with mysql_native_password by 'pwd'并flush privileges,同时处理'root'@'%'以支持远程连接。

caching_sha2_password 是 MySQL 8.0 的默认认证插件,不是用来“修改为它”的目标,而是问题的根源——旧版 Navicat 不支持它。真正要做的,是把用户认证方式从 caching_sha2_password 改回 mysql_native_password。
查看当前用户的认证插件
执行这条 SQL 可以确认 root(或其他用户)到底用的是哪种加密方式:
SELECT host, user, plugin, authentication_string FROM mysql.user;
常见现象:
-
plugin列显示caching_sha2_password - Navicat 连接时直接报错:
ERROR 2058 (HY000): Plugin caching_sha2_password could not be loaded - 或提示“Access denied”,即使密码完全正确
这说明客户端压根没法解析该插件生成的密文,不是密码错了,是协议不兼容。
修改用户认证方式必须用两条 ALTER USER 语句
只改 plugin 或只重设密码都不够,MySQL 8.0 要求显式指定认证方式和密码值:
-
必须先设置密码永不过期(避免触发额外校验):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_password' PASSWORD EXPIRE NEVER;
-
再强制切换认证插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
-
最后刷新权限:
FLUSH PRIVILEGES;
注意点:
-
'root'@'localhost'是本地用户;如果 Navicat 从远程连接,还要处理'root'@'%',否则改了 localhost 也没用 - 密码必须写两次,且保持一致;Navicat 连接时填的密码,就是这里
BY后面那个 - 如果执行时报错
ERROR 1396 (HY000),说明用户不存在,需先CREATE USER再授权
Navicat 连接失败还可能卡在其他地方
即使改了认证方式,仍连不上?检查这几个常被忽略的环节:
- Navicat 是否用了旧驱动(如基于 MySQL 5.x 编译的版本)?建议升级到 Navicat 15+ 或使用官方推荐的 MySQL Connector/J 8.0+ 驱动
- Windows 下若用命令行进 MySQL 报
event not found,是因为密码含!等 shell 特殊字符,必须用单引号包裹:mysql -uroot -p'root!@#123' - MySQL 配置文件
my.cnf或my.ini中若设置了default_authentication_plugin=caching_sha2_password,虽然不影响已有用户,但新用户还会沿用它,可临时注释或改为mysql_native_password -
host字段是否限制了访问来源?SELECT user, host FROM mysql.user;看 root 是否允许%,否则远程 Navicat 会被拒
真正卡住人的,往往不是那几行 ALTER USER,而是没意识到:改完之后必须同步处理 localhost 和 % 两个 host、没注意密码里有 shell 元字符、或者 Navicat 根本没重启就去测试。这些细节一漏,就会反复试错。











