首页  >  文章  >  数据库  >  使用 Java 连接 MySQL 时,为什么会出现“不允许公钥检索”错误?

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

DDD
DDD原创
2024-11-01 17:20:02610浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn