Public Key Retrieval is not allowed
,这通常是由于 MySQL 8.0 及以上版本使用了新的默认认证插件 caching_sha2_password
,而客户端(这里是你的 Java 应用程序)没有配置允许公钥检索导致的。
查找解决办法之前,先看看SQL打开了没有!!!!!!!!!
解决方法:
1. 在 JDBC 连接 URL 中允许公钥检索
你可以在 JDBC 连接 URL 中添加 allowPublicKeyRetrieval=true
参数来允许公钥检索:
jdbc:mysql://你的数据库地址:3306/你的数据库名?allowPublicKeyRetrieval=true&useSSL=false
-
allowPublicKeyRetrieval=true
:允许客户端从服务器检索公钥。 -
useSSL=false
:如果不需要 SSL 加密连接,可以关闭 SSL(根据你的需求调整)。
2. 更改 MySQL 用户的认证插件
如果你不想修改代码,可以将 MySQL 用户的认证插件从 caching_sha2_password
改为 mysql_native_password
。执行以下 SQL 命令:
ALTER USER '你的用户名'@'你的主机' IDENTIFIED WITH mysql_native_password BY '你的密码';
例如:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
然后刷新权限:
FLUSH PRIVILEGES;
3. 升级 MySQL 驱动
如果你使用的是较旧版本的 MySQL 驱动(如 mysql-connector-java-5.x
),建议升级到最新版本(如 mysql-connector-java-8.x
),因为新版本对 caching_sha2_password
的支持更好。
在 Maven 中更新依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <!-- 使用最新版本 --> </dependency>
4. 检查 MySQL 服务器配置
确保 MySQL 服务器配置允许客户端使用 caching_sha2_password
插件,并且网络连接没有问题。
总结:
-
最简单的解决方法是修改 JDBC 连接 URL,添加
allowPublicKeyRetrieval=true
。 -
如果不想修改代码,可以更改 MySQL 用户的认证插件为
mysql_native_password
。 -
升级 MySQL 驱动也是一个推荐的解决方案。