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