在使用 mysql 8.0 或更高版本时,可能会遇到以下错误:java.sql.sqlnontransientconnectionexception: public key retrieval is not allowed
这是因为 mysql 8.0 默认启用了 caching_sha2_password
插件,而 jdbc 驱动默认不允许检索公钥。以下是几种常见的解决方法:
解决方案一:修改数据库连接字符串
在 jdbc 连接 url 中添加 allowpublickeyretrieval=true
参数:
jdbc:mysql://localhost:3306/your_database?usessl=false&allowpublickeyretrieval=true&servertimezone=utc
- allowpublickeyretrieval=true:允许检索公钥。
- usessl=false:禁用 ssl,视需求而定。
解决方案二:修改 mysql 用户认证插件
alter user 'your_user'@'your_host' identified with mysql_native_password by 'your_password';
解决方案三:更新 mysql jdbc 驱动
确保使用最新版的 mysql jdbc 驱动,以避免与 mysql 8.0 的认证方式不兼容
maven 示例:
<dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>8.0.30</version> </dependency>
总结
- 如果不想修改认证插件,使用 allowpublickeyretrieval=true 解决问题。
- 可以修改用户认证插件为 mysql_native_password,或更新 jdbc 驱动。
到此这篇关于java.sql.sqlnontransientconnectionexception: public key retrieval is not allowed的文章就介绍到这了,更多相关java.sql.sqlnontransientconnectionexception内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论