返回

告别“Public Key Retrieval is not allowed”:MySQL 连接错误的终极解决方案

后端

克服“Public Key Retrieval is not allowed”错误:与 MySQL 数据库建立无缝连接

在与 MySQL 数据库建立连接时,“Public Key Retrieval is not allowed”错误可能会成为开发过程中的一大障碍。本文将深入探讨错误的原因并提供一种全面的解决方案,帮助你轻松解决此问题,建立可靠的数据库连接。

错误背后的根源

当 MySQL 服务器未启用公钥检索功能时,就会出现“Public Key Retrieval is not allowed”错误。JDBC(Java 数据库连接)在建立与 MySQL 数据库的连接时默认使用密码身份验证。但是,如果你希望使用公钥进行身份验证,则必须启用公钥检索功能。

启用公钥检索功能

步骤 1:修改 MySQL 配置文件

  • 打开 MySQL 配置文件 my.cnf
  • 找到 [mysqld] 部分。
  • 添加以下行:
public-key-retrieval=ON

步骤 2:重启 MySQL 服务器

  • 保存 my.cnf 文件。
  • 重启 MySQL 服务器。

配置 JDBC 连接参数

步骤 1:添加 useSSL 参数

  • 在 JDBC 连接 URL 中添加 useSSL=true 参数。

步骤 2:指定用户、密码和公钥路径

  • 在 JDBC 连接属性中添加以下参数:
user=your_username
password=your_password
publicKeyPath=path_to_your_public_key

测试你的连接

通过以下步骤测试你的连接:

  • 加载 JDBC 驱动
Class.forName("com.mysql.jdbc.Driver");
  • 创建连接 URL
String url = "jdbc:mysql://localhost:3306/your_database?useSSL=true";
  • 创建连接属性
Properties props = new Properties();
props.put("user", "your_username");
props.put("password", "your_password");
props.put("publicKeyPath", "path_to_your_public_key");
  • 建立连接
Connection conn = DriverManager.getConnection(url, props);
  • 测试连接
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 1");
  • 处理结果
while (rs.next()) {
  System.out.println(rs.getInt(1));
}
  • 关闭连接
rs.close();
stmt.close();
conn.close();

如果查询结果为 1,则连接已成功建立。

常见问题解答

  1. 为什么需要启用公钥检索?

    • 启用公钥检索允许 JDBC 使用公钥对你的身份进行身份验证,从而提高安全性。
  2. 如何获取公钥路径?

    • 公钥路径是指存储你的公钥的文件的路径。
  3. 为什么我的连接仍然失败?

    • 确保公钥路径正确且公钥文件存在。
  4. 是否可以使用除密码之外的其他身份验证方法?

    • 是的,可以使用其他身份验证方法,例如 Kerberos 或 LDAP。
  5. 我应该使用密码还是公钥进行身份验证?

    • 密码身份验证更简单,而公钥身份验证更安全。选择取决于你的安全要求。

结论

遵循本指南中的步骤,你可以轻松解决“Public Key Retrieval is not allowed”错误,并建立与 MySQL 数据库的安全可靠的连接。通过启用公钥检索功能和配置 JDBC 连接参数,你可以在开发过程中消除连接问题,确保无缝的数据访问。