Mysql 解决1251- Client does not support authentication protocol requested by server...的问题

Mysql 解决1251- Client does not support authentication protocol requested by server...的问题

navicat 链接mysql 报错Client does not support authentication protocol requested by server

navicat 连接mysql 报错Client does not support authentication protocol requested by server

安装完MySQL8.0.11和Navicat Premium12后,我们会用Navicat去测试连接MySQL,但是测试时出现以下错误提示:

2059 Authentication plugin 'caching_sha2_password' cannot be loaded

一、问题描述

使用Navicat客户端连接本地mysql,报错:1251- Client does not support authentication protocol requested by server;consider upgrading Mysql client。

原因分析

mysql8 之前的版本中加密规则是mysql_native_password,而MySQL8.0.11版本启用了新特性,用户登录加密规则改为了caching_sha2_passwords

解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password。mysql_native_password

二、查看用户信息

打开命令行小黑屏,进入MySQL的bin目录,然后输入mysql -u root -p,输入密码,登录成功

执行SQL查询用户信息

select host,user,plugin,authentication_string from mysql.user;

备注:host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码

三、问题原因 上网搜索解决方案,网上说出现这种情况的原因是:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,

解决问题方法有两种:

方法1.升级navicat驱动;

方法2.把mysql用户登录密码加密规则还原成mysql_native_password.

这里采用方法2解决,具体操作步骤如下。

四、解决 在命令行输入如下命令,修改密码。

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
更新user为root,host为% 的密码为123456
 
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
更新user为root,host为localhost 的密码为123456

或者

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 (这行我没有写,不过貌似也可以)
 
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码 
 
FLUSH PRIVILEGES; #刷新权限

再次查询用户信息

再次在Navicat中连接mysql,连接成功

直接换了一个mysql-connector-java版本,原来是5版本,换了个8就可以啦

alter user 'root'@'localhost' identified with mysql_native_password by 'root';