MySQL 8.0 Public Key Retrieval is not allowed问题

文章讨论了在升级到MySQL8.0后遇到的密码格式强化和无法连接数据库的问题。解决方案包括修改用户密码、允许PublicKeyRetrieval或启用SSL/TLS。还提到了修改加密方式为mysql_native_password以及刷新权限。同时指出,禁用SSL可能导致PublicKeyRetrieval错误,建议在必要时建立登录缓存或使用特定连接参数。
摘要由CSDN通过智能技术生成

最近更新了MySQL 8.0 发现一系列问题

1、首先安装许久 密码忘记啦

由于 密码格式加强 常用 密码不符合规范

运气还不错 以前的链接还能正常使用 密码可以快速 更改

alter user 'root'@'localhost' identified by '你的密码';

2、突然无法连接数据库

java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed

目前解决方案

url 链接追加 allowPublicKeyRetrieval=true

完整url如下

url=jdbc:mysql://127.0.0.1:3306/yc_blog?allowPublicKeyRetrieval=true&useOldAliasMetadataBehavior=true&useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
user=root
password=你的密码

网友提供的解决方案

(1) 报错原因

mysql8 之前的版本中加密规则是mysql_native_password

而在mysql8之后,加密规则是sha256_password caching_sha2_password

换另一种方式来说,就是java里面的mysql客户端版本太低,高版本的客户端不会有这个问题。

(2)解决办法

网上说添加如下参数在连接后面 allowPublicKeyRetrieval=true,但是这种方式并不安全,可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码。

最佳解决办法:

ALTER USER 'root'@'%' IDENTIFIED BY 'qwe123' PASSWORD EXPIRE NEVER;#更改加密方式 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'qwe123';#更新用户密码 
FLUSH PRIVILEGES;#刷新权限 

后续

当第一次正常登陆后,尝试删除URL上配置的信息,发现JDBC又可以正常连接数据库哦???

答疑如下

MySQL 8.0的Public Key Retrival错误,毫无规律可言怎么破?

提出全面的解决方案

根据前面的分析,导致Public Key Retrieval is not allowed主要是由于当禁用SSL/TLS协议传输后,客户端会使用服务器的公钥进行传输,默认情况下客户端不会主动去找服务器拿公钥,此时就会出现上述错误。

经过查阅官方文档,出现Public Key Retrieval的场景可以概括为在禁用SSL/TLS协议传输切当前用户在服务器端没有登录缓存的情况下,客户端没有办法拿到服务器的公钥。具体的场景如下:

  1. 新建数据库用户,首次登录;
  2. 数据库的用户名、密码发生改变后登录;
  3. 服务器端调用FLUSH PRIVELEGES指令刷新服务器缓存。

针对上述错误,有如下的解决方案:

  1. 在条件允许的情况下,不要禁用SSL/TLS协议,即不要在CLI客户端使用--ssl-mode=disabled,或在JDBC连接串中加入useSSL=false;
  2. 如果必须禁用SSL/TLS协议,则可以尝试使用CLI客户端登录一次MySQL数据库制造登录缓存;
  3. 如果必须禁用SSL/TLS协议,则可以通过增加如下参数允许客户端获得服务器的公钥:
  • 在JDBC连接串中加入allowPublicKeyRetrieval=true参数;
  • 在CLI客户端连接时加入--get-server-public-key参数;
  • 、在CLI客户端连接时加入--server-public-key-path=file_name参数,指定存放在本地的公钥文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值