启动项目报错Public Key Retrieval is not allowed
时间: 2025-05-02 12:43:21 浏览: 25
### 解决 JDBC 连接数据库时出现 `Public Key Retrieval is not allowed` 错误
当遇到 `Public Key Retrieval is not allowed` 错误时,通常是因为 MySQL 驱动程序尝试验证服务器的公钥,而当前配置不允许这种操作。以下是几种常见的解决方案:
#### 方法一:修改 JDBC URL 参数
可以通过在 JDBC URL 中添加参数来允许公钥检索。具体来说,在连接字符串中增加 `allowPublicKeyRetrieval=true` 和其他必要的参数可以解决问题。
示例连接字符串如下:
```plaintext
jdbc:mysql://your_database_host:port/your_database?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
```
此方法适用于通过代码直接管理数据库连接的情况[^1]。
#### 方法二:调整 DBeaver 或 IntelliJ IDEA 的设置
如果使用的是图形化工具(如 DBeaver),则可以直接在 GUI 设置中启用 `allowPublicKeyRetrieval` 参数。例如,在新建数据库连接的过程中,找到对应选项并将其值更改为 `YES` 即可完成配置[^4]。
对于 IntelliJ IDEA 用户而言,也可以按照上述方式编辑数据源的 URL 字符串,或者利用内置的数据源配置界面手动勾选相关选项[^2]。
#### 方法三:确认用户名与密码无误
需要注意的是,有时即使启用了 `allowPublicKeyRetrieval=true`,仍然会报同样的错误。此时应仔细核对所使用的数据库账户名及其对应的密钥是否匹配正确。因为一旦登录凭证存在任何偏差,则同样可能触发此类异常提示[^5]。
综上所述,针对不同场景采取相应措施能够有效规避这个问题的发生。
```java
// Java 示例代码展示如何定义带参数的 Connection 对象
String url = "jdbc:mysql://localhost:3306/testdb?";
Properties properties = new Properties();
properties.setProperty("user", "root");
properties.setProperty("password", "mypassword");
properties.setProperty("allowPublicKeyRetrieval", "true"); // 添加属性支持 PublicKey Retrival
properties.setProperty("useSSL", "false");
try (Connection conn = DriverManager.getConnection(url, properties)) {
System.out.println("Connected successfully!");
} catch (SQLException e) {
e.printStackTrace();
}
```
阅读全文
相关推荐


















