Public Key Retrieval is not allowed
mysql从5.1.6升级到8.0.22,项目启动报错:Public Key Retrieval is not allowed
导致“Public Key Retrieval is not allowed”主要是由于当禁用SSL/TLS协议传输后,客户端会使用服务器的公钥进行传输,默认情况下客户端不会主动去找服务器拿公钥,此时就会出现上述错误。
经过查阅官方文档,出现Public Key Retrieval的场景可以概括为在禁用SSL/TLS协议传输切当前用户在服务器端没有登录缓存的情况下,客户端没有办法拿到服务器的公钥。具体的场景如下:
- 新建数据库用户,首次登录;
- 数据库的用户名、密码发生改变后登录;
- 服务器端调用FLUSH PRIVELEGES指令刷新服务器缓存。
针对上述错误,有如下的解决方案:
- 在条件允许的情况下,不要禁用SSL/TLS协议,即不要在CLI客户端使用--ssl-mode=disabled,或在JDBC连接串中加入useSSL=false;
- 如果必须禁用SSL/TLS协议,则可以尝试使用CLI客户端登录一次MySQL数据库制造登录缓存;
- 如果必须禁用SSL/TLS协议,则可以通过增加如下参数允许客户端获得服务器的公钥:
- 在JDBC连接串中加入allowPublicKeyRetrieval=true参数;
- 在CLI客户端连接时加入--get-server-public-key参数;
- 在CLI客户端连接时加入--server-public-key-path=file_name参数,指定存放在本地的公钥文件。
本文来自博客园,作者:bgtong,转载请注明原文链接:https://www.cnblogs.com/bgtong/p/16695859.html
分类:
bug
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了