MySQL连接错误:“Public Key Retrieval is not allowed”


前言

“Public Key Retrieval is not allowed”错误及其解决方案


MySQL连接错误:“Public Key Retrieval is not allowed” 问题总结

1. 错误原因
  • 触发环境:MySQL服务器版本为8.0或更高,且用户认证插件为默认的 caching_sha2_password
  • 根本原因:MySQL 8.0+为了增强安全性,默认使用SSL加密连接。当SSL未启用时,客户端默认不允许以不安全的方式从服务器检索公钥来进行身份验证,从而阻止了潜在的中间人攻击。
2. 解决方案(核心)

通过在的连接字符串或驱动属性中明确允许客户端检索公钥。

最终生效的配置方法(如图中所示):
在数据库连接工具的 “Advanced” (高级) 标签页中,直接修改 驱动属性

  • 关键属性allowPublicKeyRetrieval
  • 设置值TRUE

在这里插入图片描述

3. 其他配置方法(供参考)

A. 连接字符串/URL(适用于代码或配置文件中)
在JDBC连接URL的末尾添加参数:

jdbc:mysql://your-host:3306/your-database?allowPublicKeyRetrieval=true&useSSL=false

B. 应用程序配置文件(以Spring Boot为例)
application.properties 中:

spring.datasource.url=jdbc:mysql://localhost:3306/your_db?allowPublicKeyRetrieval=true&useSSL=false
4. 补充说明与安全建议
  • 关于 useSSL=false:您可能注意到,上面的代码示例中通常伴随 useSSL=false。这是因为在本地开发环境可信的内部网络中,为求简便可以暂时禁用SSL。您图中仅设置 allowPublicKeyRetrieval=TRUE 也能成功,是因为工具可能采用了其他默认SSL设置(如useSSL=truerequireSSL=false 等)。
  • 安全警告
    • allowPublicKeyRetrieval=true 会降低连接的安全性,因为它允许在未加密的连接上传输公钥。
    • 生产环境强烈建议
      1. 启用SSL加密(配置 useSSL=true 并提供有效的证书)。
      2. 考虑更改用户认证插件mysql_native_password(一种旧的认证方式,无需公钥交换),但这并非最佳安全实践,仅作为临时或兼容性方案。
5. 解决流程图(快速决策)
graph TD
    A[遇到错误] --> B{环境类型?}
    B --> C[本地/开发环境]
    B --> D[生产环境]
    
    C --> E[**首选方案**:<br>设置allowPublicKeyRetrieval=true<br>useSSL=false(简化连接)]
    E --> F[问题解决]
    
    D --> G[**正确方案**:<br>1(设置allowPublicKeyRetrieval=true) 并 <br>2(配置有效的SSL证书启用加密连接)]
    G --> F

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TE-茶叶蛋

踩坑不易,您的打赏,感谢万分

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

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

打赏作者

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

抵扣说明:

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

余额充值