根本原因是mysql 8.0+默认使用caching_sha2_password认证插件,而旧版navicat不支持;需先用show variables和select确认插件类型,再执行alter user 'user'@'host' identified with mysql_native_password by 'pwd'并flush privileges生效。
navicat 连不上 mysql 8.0+,报 2059 - authentication plugin 'caching_sha2_password',根本原因就一个:mysql 默认用了新认证插件,而你用的 navicat(尤其是 15 以前版本)或底层驱动不认它。修复不用重装、不用降级,直接改用户认证方式就行。
怎么确认是 caching_sha2_password 导致的?
先连进 MySQL 命令行(用 root 或有权限的账号),执行这两条命令:
-
SHOW VARIABLES LIKE 'default_authentication_plugin';—— 看输出是不是caching_sha2_password -
SELECT host, user, plugin FROM mysql.user WHERE user = 'your_username';—— 检查目标用户的plugin字段值,如果是caching_sha2_password,就是它了
注意:your_username 要换成你 Navicat 里填的实际用户名,比如 'root';host 可能是 'localhost'、'127.0.0.1' 或 '%',必须严格匹配,否则改了也无效。
ALTER USER 改认证插件时容易写错的点
执行 ALTER USER 必须带完整主机名,且语法不能省略关键词。常见错误写法包括:
- 漏掉
@'host',比如只写ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'pwd';→ 报错或改错用户 - 把
WITH写成BY,比如IDENTIFIED BY mysql_native_password→ 语法错误 - 密码没加引号,或引号是中文全角 → MySQL 直接拒绝执行
- 改完没执行
FLUSH PRIVILEGES;→ 修改不生效,Navicat 还是连不上
正确写法示例(以 root 用户本地连接为例):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;
远程连接或云数据库(如 RDS)怎么办?
如果 Navicat 连的是远程 MySQL(比如阿里云 RDS、腾讯云 CDB),很可能没有权限执行 ALTER USER:
- 云厂商通常禁用
mysql.user表的写权限,ALTER USER会报错ERROR 1045 (28000): Access denied - 此时唯一可行方案是升级 Navicat 到 15 或 16 版本(官方已支持
caching_sha2_password) - 或者换用支持该插件的客户端,比如 MySQL Workbench 8.0+、DBeaver 最新版
别试修改 my.cnf 里的 default_authentication_plugin——云服务根本不让你改配置文件。
真正卡住人的地方,往往不是不会敲那几行 SQL,而是查用户时忽略 host 字段的精确匹配,或者改完忘了 FLUSH PRIVILEGES。这两个细节漏掉,再重试十次也没用。











