当前位置: 首页 > article >正文

MySQL 连接报错: “Public Key Retrieval is not allowed“ 问题解决方案

MySQL 连接报错: “Public Key Retrieval is not allowed” 问题解决方案

在使用 MySQL 8.0 驱动器时,如果没有正确配置公钥检索选项,常会造成以下错误:

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

这是一个简单而常见的问题,原因为驱动程序在连接 MySQL 服务器时,不允许通过非安全连接获取公钥。本文将分析错误原因,并提供解决方案。


错误原因分析

在使用 MySQL 8.0 驱动时,存在一些编码系统和驱动配置的新改,通常原因如下:

  1. MySQL 的驱动默认使用 caching_sha2_password 验证机制
    无法获取公钥时,驱动会报错。

  2. allowPublicKeyRetrieval 未启用
    驱动默认会阻止通过非 SSL 方式获取服务器公钥,以保证安全性。

  3. SSL 配置不正确
    如果连接程序启用了 SSL ,但没有正确配置证书或相关配置,也会造成连接失败。

  4. Druid 连接池的配置不充分
    Druid 是一种常见的数据库连接池,如果没有配置具体参数,会导致通信错误。


解决方案

基于上述原因,可以采用以下方案解决连接失败问题:

方案 1:配置 allowPublicKeyRetrieval=true

在连接 URL 中添加 allowPublicKeyRetrieval=true 参数,并确保其他配置正确:

jdbc:mysql://172.16.8.88:8306/dcg_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
注意
  • 该参数允许客户端通过非 SSL 连接获取公钥,因而进行加密登录。
  • 在公网环境下,该参数存在安全风险,建议只在发展或内部环境下使用。

方案 2:确保禁用 SSL

如果不需要使用 SSL ,确保连接 URL 中已显式指定 useSSL=false

jdbc:mysql://172.16.8.88:8306/dcg_cloud?useSSL=false&allowPublicKeyRetrieval=true

方案 3:启用 SSL 并配置证书

如果需要使用 SSL 保护通信,则确保正确配置相关证书:

jdbc:mysql://172.16.8.88:8306/dcg_cloud?useSSL=true&requireSSL=true&clientCertificateKeyStoreUrl=file:/path/to/client-keystore&clientCertificateKeyStorePassword=password&trustCertificateKeyStoreUrl=file:/path/to/truststore&trustCertificateKeyStorePassword=password

方案 4:升级/降级 MySQL 驱动程序

如果完全不需要 MySQL 8.0 特性,可考虑降级到 5.x 驱动程序。或者,升级到最新的 8.x 驱动,通常也能解决对应的 bug 和兼容性问题。


总结

如果遇到 “Public Key Retrieval is not allowed” 错误,可依据实际情况,选择上述方案中的一种或多种解决方案。

在实现后,连接问题应该已经解决,同时需根据安全需求核实安全性,以免暴露在公网环境下。

在这里插入图片描述


http://www.kler.cn/a/576435.html

相关文章:

  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数
  • PPT 小黑第21套
  • 【AI赋能】AI 工具生成视频教材:从创意到成品的全流程指南
  • 扩展------项目中集成阿里云短信服务
  • vLLM + Open-WebUI 本地私有化部署 DeepSeek-R1-Distill-Qwen-32B 方案
  • 深入解析PHP性能瓶颈:识别与优化策略
  • element-ui popover 组件源码分享
  • 安装与配置 STK-MATLAB 接口
  • 红果短剧安卓+IOS双端源码,专业短剧开发公司
  • git push报错【remote: You are not allowed to push code to this project.】解决办法
  • Leetcode 刷题记录 03 —— 滑动窗口
  • 进程存储相关的关键数据结构
  • 网络编程 day4
  • 使用开源OPUS-MT模型进行文本翻译(python)
  • 针对Ollama进行DeepSeek本地部署存在的安全风险,使用nginx进行反向代理配置是一种有效的解决方案
  • 开发环境搭建-07.后端环境搭建-前后端联调-Nginx反向代理和负载均衡配置
  • 微软发布Dragon Copilot,打造医疗行业首款AI语音助手
  • 深度学习代码解读——自用
  • Qt调试功能使用方法
  • bash: uwsgi: 未找到命令