在DBeaver里面连接本地数据库的时候,报错:Public Key Retrieval is not allowed
时间: 2025-07-04 11:20:23 浏览: 11
<think>我们正在处理用户的问题:DBeaver连接本地数据库时出现“Public Key Retrieval is not allowed”错误,需要解决方法。
根据提供的引用信息,我们可以知道两个关键点:
1. 引用[1]提到:可以在连接字符串中添加allowPublicKeyRetrieval=true参数来解决。
2. 引用[2]提到:这个错误与防火墙无关,而是与MySQL的身份验证机制或客户端配置有关。
因此,解决方案的核心是在连接配置中添加参数allowPublicKeyRetrieval=true。
接下来,我们需要指导用户在DBeaver中如何操作。DBeaver是一个数据库管理工具,通常通过图形界面配置连接属性。
步骤:
1. 打开DBeaver,找到数据库导航器(Database Navigator)。
2. 右键单击并选择“新建数据库连接”(New Database Connection)。
3. 选择MySQL数据库类型。
4. 在连接设置中,填写主机、端口、数据库名、用户名和密码等基本信息。
5. 然后,进入“驱动属性”(Driver Properties)选项卡。
6. 在驱动属性列表中,找到名为“allowPublicKeyRetrieval”的属性(如果没有,可以手动添加)。
7. 将其值设置为“true”。
8. 测试连接,然后完成配置。
另外,也可以直接在JDBC URL中添加参数。在连接设置的“URL”一栏,通常已经有一个JDBC URL,例如:
jdbc:mysql://localhost:3306/your_database
我们在URL后面添加参数,变成:
jdbc:mysql://localhost:3306/your_database?allowPublicKeyRetrieval=true
注意:如果有多个参数,可以用“&”连接,例如:
jdbc:mysql://localhost:3306/your_database?allowPublicKeyRetrieval=true&useSSL=false
但是,请注意,添加useSSL=false可能会降低安全性,只有在确定不需要SSL时才添加。对于本地开发环境,通常可以接受。
为什么会出现这个错误?
这个错误通常发生在使用caching_sha2_password认证插件时(MySQL 8.0默认),客户端在未使用SSL的情况下尝试连接,并且没有提供公钥。而客户端出于安全考虑默认不允许检索公钥(public key retrieval)。因此,我们需要显式地允许它。
此外,如果用户使用的是旧版本的MySQL驱动,也可能出现此问题。因此,确保使用较新的驱动也是解决方法之一。
因此,我们还可以建议用户检查驱动版本,在DBeaver中更新驱动:
1. 在连接设置中,点击“编辑驱动设置”(Edit Driver Settings)。
2. 在“库”(Libraries)选项卡中,可以删除旧的驱动,然后添加新的驱动jar包。
但是,根据引用信息,主要解决方案是添加allowPublicKeyRetrieval=true。
总结步骤:
方法一(推荐):
- 在连接设置的“驱动属性”中设置allowPublicKeyRetrieval为true。
方法二:
- 直接在JDBC URL后面添加参数allowPublicKeyRetrieval=true。
同时,如果用户希望更安全,可以配置SSL连接,但这需要服务器端也配置好SSL证书。对于本地测试,通常可以不用SSL。
最后,我们生成相关问题。
相关问题:
1. 如何更新DBeaver中的MySQL驱动?
2. 除了allowPublicKeyRetrieval,还有哪些常见的MySQL连接参数?
3. 为什么MySQL 8.0会出现Public Key Retrieval错误?
4. 如何在MySQL中启用SSL连接?</think>### 解决 DBeaver 连接本地数据库报错 "Public Key Retrieval is not allowed" 的方法
此错误通常与 MySQL 8.0 及以上版本的身份验证机制相关。当客户端未配置公钥检索时,会导致连接失败[^2]。以下是详细解决方案:
#### ✅ 解决方案 1:修改 JDBC 连接参数(推荐)
1. 在 DBeaver 连接配置中打开 **驱动属性** 选项卡
2. 添加以下参数:
```properties
allowPublicKeyRetrieval = true
useSSL = false # 本地环境可关闭 SSL
```
3. 或直接在 JDBC URL 中添加参数:
```url
jdbc:mysql://localhost:3306/your_db?allowPublicKeyRetrieval=true&useSSL=false
```
此方法允许客户端检索服务器公钥,解决身份验证问题[^1]。
#### ✅ 解决方案 2:修改 MySQL 用户认证方式
```sql
-- 登录 MySQL 命令行
ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
```
此命令将认证方式从默认的 `caching_sha2_password` 改为旧版 `mysql_native_password`,避免公钥检索需求。
#### ✅ 解决方案 3:更新 MySQL 驱动
1. 在 DBeaver 中打开驱动配置
2. 下载最新版 MySQL Connector/J 驱动(建议 8.0.25+)
3. 替换旧驱动文件,新驱动对公钥检索有更好支持
#### ⚠️ 注意事项
1. `allowPublicKeyRetrieval=true` 仅建议在**本地开发环境**使用
2. 生产环境应配置 SSL 证书:
```url
jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=true
```
3. 防火墙不会导致此错误[^2],无需调整防火墙设置
> **测试建议**:修改后点击 "Test Connection" 验证,成功连接后保存配置。
---
### 📌 相关问题
1. MySQL 8.0 的 `caching_sha2_password` 和 `mysql_native_password` 认证方式有何区别?
2. 如何在生产环境中安全配置 MySQL 的 SSL 加密连接?
3. DBeaver 连接其他数据库(如 PostgreSQL)出现类似错误应如何解决?
4. 为什么 MySQL 8.0 默认使用新的身份验证插件?
[^1]: 引用自 DBeaver 连接参数配置建议
[^2]: 引用自 MySQL 身份验证机制分析
阅读全文
相关推荐

















