MySQL数据库报Public Key Retrieval is not allowed错误

“Public Key Retrieval is not allowed” 通常是在使用数据库连接时出现的错误,原因是客户端尝试从服务器获取公钥,但服务器配置不允许或未开启相关功能。以下是常见的解决方法:

解决方案:

在数据库连接字符串(URL)中添加 allowPublicKeyRetrieval=true 参数,允许客户端获取公钥。

示例:

jdbc:mysql://localhost:3306/数据库名?allowPublicKeyRetrieval=true&useSSL=false

通常建议同时加上 useSSL=false 避免 SSL 连接问题,生产环境需根据安全需求调整。


“Public Key Retrieval is not allowed” 是 MySQL 客户端与服务器建立连接时常见的加密相关错误,通常与 MySQL 8.0+ 引入的默认身份验证插件(caching_sha2_password)及 SSL 配置有关。下面从技术原理、触发场景、深层原因及解决方案进行深度分析。

一、技术背景:MySQL 身份验证与加密机制

MySQL 8.0 引入了更安全的默认身份验证插件 caching_sha2_password(替代旧的 mysql_native_password),其认证流程如下:

  1. 客户端向服务器发起连接请求。
  2. 服务器生成一个随机字符串(nonce),并使用用户密码的哈希值加密后发送给客户端。
  3. 客户端需使用自己的密码哈希对该字符串解密,再加密后返回给服务器验证。

关键细节caching_sha2_password 要求客户端在某些场景下(如密码加密需要公钥时)从服务器获取公钥。若服务器配置禁止公钥检索,或客户端未允许该操作,则会触发 “Public Key Retrieval is not allowed” 错误。

二、错误触发的核心原因

该错误本质是 客户端请求获取服务器公钥,但服务器拒绝或客户端未开启权限,具体场景包括:

  1. 客户端未允许公钥检索MySQL 客户端(如 JDBC 驱动)默认禁用 allowPublicKeyRetrieval 参数,若认证过程中需要公钥(如客户端未缓存公钥时),则会因权限不足报错。

  2. 服务器禁用公钥提供服务器配置 sha256_password_private_key_path 或 caching_sha2_password_private_key_path 错误,导致无法生成公钥;或通过 --skip-sha256-password-public-key 等参数主动禁用公钥提供。

  3. SSL 配置冲突若客户端强制启用 SSL(useSSL=true)但服务器未配置 SSL 证书,或 SSL 连接协商失败,可能间接导致公钥检索流程受阻。

  4. 驱动版本不兼容旧版本 JDBC 驱动(如 5.x 版本)对 caching_sha2_password 支持不完善,可能误判公钥检索需求,导致错误。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一道信息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值