使用 Java 连接 MySQL 时,为什么会出现'不允许公钥检索”错误?

DDD
发布: 2024-11-01 17:20:02
原创
609 人浏览过

Why am I getting the

MySQL 连接错误:“不允许公钥检索”

尝试使用 Java 的 MySQL Connector 8.0 连接到 MySQL 数据库时。 11、您可能会遇到以下异常:

java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
登录后复制

此错误表明客户端正在尝试从服务器检索公钥,但连接尚未配置为允许这样做。

解决方案

要解决此问题,您需要将allowPublicKeyRetrieval=true 客户端选项添加到连接字符串中。这将允许客户端自动从服务器请求公钥。但是,请务必注意,将此选项设置为 true 可能会允许恶意代理执行 MITM 攻击以获取明文密码。

具有AllowPublicKeyRetrieval 的示例连接管理器

以下代码片段更新 ConnectionManager 类中的 getConnection 方法以包含 allowedPublicKeyRetrieval 选项:

<code class="java">public static Connection getConnection() throws SQLException {

    MysqlDataSource dataSource = new MysqlDataSource();

    dataSource.setUseSSL(false);
    dataSource.setServerTimezone(serverTimeZone);
    dataSource.setServerName(serverName);
    dataSource.setDatabaseName(databaseName);
    dataSource.setPortNumber(portNumber);
    dataSource.setUser(user);
    dataSource.setPassword(password);

    dataSource.setAllowPublicKeyRetrieval(true); // Allow public key retrieval

    return dataSource.getConnection();
}</code>
登录后复制

附加说明

出于测试或开发目的,您可以还可以考虑通过设置 useSSL=false 来禁用 SSL,如提供的解决方案中所建议的:

<code class="java">jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false</code>
登录后复制

以上是使用 Java 连接 MySQL 时,为什么会出现'不允许公钥检索”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!