mysql8版本之后,默认的身份验证插件从之前的mysql_native_password改成了caching_sha2_password,而部分旧版本的navicat客户端不支持新的身份验证插件,就会出现输入正确密码也提示密码错误的连接报错情况,修改身份验证插件就能解决这个问题。

问题原因说明
mysql8之前的版本默认使用mysql_native_password作为身份验证插件,大部分数据库客户端都兼容这个插件。mysql8将默认插件更换为caching_sha2_password后,部分未更新的navicat版本无法识别该插件,就会在连接时返回密码错误的提示,实际上密码本身是正确的,只是插件不兼容导致验证失败。
方法一:修改单个用户的身份验证插件
如果只是个别用户需要兼容navicat,可以只修改该用户的身份验证插件,不需要调整全局配置。
操作步骤
首先登录mysql8的命令行客户端,执行以下命令查看当前用户的身份验证插件:
-- 查看所有用户的身份验证插件 SELECT user, host, plugin FROM mysql.user;
如果发现需要连接的用户的plugin字段是caching_sha2_password,执行以下命令修改该用户的插件为mysql_native_password,同时重置密码:
-- 修改用户身份验证插件并重置密码,替换用户名、主机地址和密码为实际值 ALTER USER 'your_username'@'your_host' IDENTIFIED WITH mysql_native_password BY 'your_password'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
修改完成后,再次用navicat连接该用户,就可以正常连接了。
方法二:全局修改默认身份验证插件
如果需要让所有新创建的用户默认使用兼容navicat的插件,可以修改mysql的全局配置文件。
操作步骤
找到mysql的配置文件,windows系统一般是my.ini,linux系统一般是/etc/my.cnf或者/etc/mysql/my.cnf,在[mysqld]配置段下添加以下内容:
[mysqld] default_authentication_plugin=mysql_native_password
保存配置文件后,重启mysql服务使配置生效。windows系统可以在服务管理器中重启mysql服务,linux系统可以执行以下命令重启:
# linux系统重启mysql服务 systemctl restart mysqld # 或者 service mysqld restart
重启之后,新创建的用户会默认使用mysql_native_password插件,已有的用户如果需要兼容,还是需要用方法一单独修改。
注意事项
- 修改用户密码时,要确保密码符合mysql的密码策略要求,否则会修改失败。
- 如果修改全局配置后还是连接失败,需要检查navicat的版本,建议升级到最新版本,兼容性更好。
- 修改配置后一定要执行FLUSH PRIVILEGES命令或者重启服务,否则配置不会生效。
- 如果连接时提示主机不允许连接,需要检查用户的host字段是否允许当前客户端的主机地址访问,必要时可以修改为%允许所有主机访问。
验证连接
完成插件修改后,打开navicat新建mysql连接,输入正确的主机地址、端口、用户名和密码,点击测试连接,如果提示连接成功,说明问题已经解决。