MySQL 8 连接报错:Public Key Retrieval is not allowed

错误日志

复制代码
2025-11-17 10:11:08 ERROR 21740 --- [论坛系统] [eate-1546318093] com.alibaba.druid.pool.DruidDataSource   : 
create connection SQLException, url: jdbc:mysql://localhost:3306/forum_db?useSSL=false&serverTimezone=UTC, 
errorCode 0, state 08001

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

问题描述

Spring Boot 在启动项目时,数据库连接池(Druid)无法创建 MySQL 连接,抛出:

复制代码
Public Key Retrieval is not allowed

出现原因

MySQL 8 默认用户认证方式为 caching_sha2_password

当客户端(JDBC)尝试连接数据库时,需要从服务器获取 RSA 公钥。如果 MySQL 未允许客户端获取公钥,就会报:

复制代码
Public Key Retrieval is not allowed

Spring Boot + MySQL 8 在未加入某些参数时就会发生此问题。

解决方法(推荐)

application.yml 的数据源 URL 中加入:

复制代码
allowPublicKeyRetrieval=true

✔ 正确配置示例:

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/forum_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
    username: root
    password: 密码

可选解决方案(不推荐)

将 MySQL 用户认证方式改成旧版本的 mysql_native_password

sql 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;

不推荐用此方式,因为安全性较低。


最终结论

这是 MySQL 8 的认证机制导致的连接问题,通过在 JDBC URL 中加入:

复制代码
allowPublicKeyRetrieval=true

即可解决,属于常见的 MySQL 8 JDBC 连接参数问题。


相关推荐
snow@li20 分钟前
中台:中台即复用 / 理解企业架构中的能力抽象与分层共享 / 中台体系全景梳理 / 共性能力抽象、沉淀并复用
数据库
SelectDB技术团队25 分钟前
AB 实验指标计算场景:Apache Doris / SelectDB 的技术能力、选型对比与实践
大数据·数据库·数据分析·apache·用户运营·apache doris·selectdb
snow@li37 分钟前
数据库:B+ 树 / 数据库索引的底层支柱
数据库
梦想的旅途21 小时前
企业微信二次开发实战:基于RPA接口的私域中台架构设计与选型指南
数据库·企业微信·rpa
SQL-First布道者1 小时前
Spring JDBC Ultra 十边型战士
java·spring boot·后端·mysql·spring·mybatis
许彰午1 小时前
87_Python Django模型与数据库
数据库·python·django
—Miss. Z—2 小时前
计算机二级MySQL选择题考点Ⅱ
数据库·mysql·oracle
敖行客 Allthinker2 小时前
IM 融合专题:后端架构师的核心修炼
java·开发语言·数据库
翔云1234562 小时前
MySQL 中 CURRENT_TIMESTAMP 到底取的是 INSERT 时间,还是 COMMIT 时间?
数据库·mysql
矜持的左手2 小时前
硬件故障后数据文件大小不对故障处理—Oracle碎片扫描恢复
数据库·oracle