MySQL抛出的Public Key Retrieval is not allowed

有时候在连接实例的时候会遇到这样的报错Public Key Retrieval is not allowed

问题分析

这是因为账号使用了sha256_password或者caching_sha2_password 密码插件

而sha256_password或者caching_sha2_password 插件为了加快认证过程,在服务端维护了一个密码哈希缓存。当客户端发起连接时:

  • 如果用户的密码哈希已经被缓存,服务端可以直接验证,无需客户端发送明文密码进行验证。
  • 如果缓存中没有该用户的密码哈希,则客户端需要发送明文密码进行认证。

在发送明文密码时,出于安全考虑,MySQL 要求:

  • 要么客户端和服务端之间建立 SSL 加密连接。
  • 要么客户端允许通过服务端公钥加密明文密码。

如果两者都不满足,就会抛出 Public Key Retrieval is not allowed 错误。

以下三种情况会导致缓存中没有用户的密码哈希

  • 发生重启
  • 发生HA
  • 有操作flush privileges

解决方法

1、客户端的话可以设置驱动中的allowPublicKeyRetrieval=true

2、JDBC的话可以在连接字符串中添加allowPublicKeyRetrieval=true参数,以允许公钥检索。

复制代码
jdbc:mysql://localhost:3306/?allowPublicKeyRetrieval=true

3、将账号的密码插件改为mysql_native_password

注意事项

设置allowPublicKeyRetrieval=true的方法会自动从 MySQL 服务端获取 RSA 公钥,但这种方法有一定的安全风险,可能会受到中间人攻击。攻击者可以伪造 RSA 公钥,窃取用户密码。

相关推荐
2601_962218616 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
李高钢7 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
toooooop88 小时前
MySQL source导入实战:踩坑记,phpMyAdmin 502、source导入巨慢问题解决
mysql
yuzhiboyouye9 小时前
那xml对应的sql语法,列举一下
xml·数据库·sql
. . . . .9 小时前
乐观锁 vs 悲观锁
数据库·sql
Leo.yuan9 小时前
2026年多数据库实时同步的四种架构方案及工具推荐
数据库·架构
hasty10 小时前
Origin 校验不是身份认证:MySQL MCP Server 漏洞给 AI 平台的警告
数据库·mysql·安全
梦想平凡11 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
凤山老林11 小时前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
企业数字化笔记11 小时前
AI写的系统出现504怎么办?接口超时和数据库慢查询排查
数据库·后端