问题:DBeaver连接MySQL时提示Public Key Retrieval is not allowed
在使用 DBeaver 连接 MySQL 数据库时,用户可能会遇到错误提示:“Public Key Retrieval is not allowed”。此问题通常出现在使用了基于公钥身份验证的 MySQL 服务器配置中。错误的根本原因在于 DBeaver 默认未启用允许从服务器获取公钥的功能,导致无法完成身份验证流程。该问题常见于使用了 sha256_password 或 caching_sha2_password 等安全认证插件的 MySQL 8.0+ 版本。解决方法包括:在连接配置的 JDBC URL 中添加 `allowPublicKeyRetrieval=true` 参数,或确保使用正确的认证方式并配置好用户权限。理解该错误的上下文有助于快速定位并解决连接问题。
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
ScandalRafflesia 2025-08-09 10:05关注解决 DBeaver 连接 MySQL 时提示“Public Key Retrieval is not allowed”的深度解析
1. 问题现象
当用户使用 DBeaver 连接 MySQL 8.0+ 数据库时,可能会遇到如下错误提示:
Public Key Retrieval is not allowed该错误通常发生在使用
sha256_password或caching_sha2_password认证插件的场景下。2. 初步分析:为什么会出现这个错误?
DBeaver 使用的是 JDBC 驱动(如 MySQL Connector/J)来连接数据库。在 MySQL 8.0+ 中,默认的认证插件是
caching_sha2_password,该插件在某些情况下需要客户端从服务器获取公钥进行身份验证。然而,JDBC 驱动默认设置为
allowPublicKeyRetrieval=false,因此禁止从服务器获取公钥,从而导致连接失败。3. 解决方案一:修改 JDBC URL 参数
在 DBeaver 的连接配置中,找到 JDBC URL 设置项,并添加如下参数:
allowPublicKeyRetrieval=true示例完整的 JDBC URL:
jdbc:mysql://localhost:3306/mydb?useSSL=false&allowPublicKeyRetrieval=true注意:URL 中的参数使用
&而不是&,以避免 XML 或 HTML 解析错误。4. 解决方案二:更改 MySQL 用户的认证方式
如果不想启用公钥获取功能,可以将 MySQL 用户的认证方式更改为使用密码直接验证的插件,如
mysql_native_password。执行如下 SQL 更改用户认证方式:
ALTER USER 'your_user'@'your_host' IDENTIFIED WITH mysql_native_password BY 'your_password';随后刷新权限:
FLUSH PRIVILEGES;5. 深入分析:MySQL 8.0+ 的认证机制变化
MySQL 8.0 引入了更安全的认证机制,尤其是
caching_sha2_password插件。它支持:- 更安全的密码存储方式
- 支持基于公钥的加密验证
- 在 SSL 不可用时仍能保证安全连接
但这也要求客户端驱动支持相应的协议和配置参数。
6. 安全性考虑:是否应该启用 allowPublicKeyRetrieval?
启用
allowPublicKeyRetrieval=true会带来一定的安全风险,因为客户端会从服务器下载公钥用于加密传输。如果服务器被中间人攻击(MITM),可能导致密钥泄露。因此,建议:
- 在开发或测试环境中使用该参数
- 在生产环境中使用 SSL 加密连接并禁用此参数
7. 常见误区与排查流程
很多用户在遇到该问题时,容易误以为是密码错误或网络问题。以下是一个典型的排查流程图:
graph TD A[连接失败] --> B{错误信息是否包含 "Public Key Retrieval"?} B -->|是| C[检查 JDBC URL 是否包含 allowPublicKeyRetrieval=true] C --> D{是否使用 caching_sha2_password?} D -->|是| E[启用 allowPublicKeyRetrieval 或修改认证方式] D -->|否| F[检查其他连接参数] B -->|否| G[检查用户名、密码、网络连接等]8. DBeaver 中配置 JDBC 参数的路径
在 DBeaver 中配置 JDBC URL 的步骤如下:
- 打开 DBeaver,右键点击“数据库” -> “新建数据库连接”
- 选择 MySQL 数据库
- 进入“连接设置” -> “驱动属性”标签页
- 在 JDBC URL 输入框中添加参数
allowPublicKeyRetrieval=true
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报