啊宇哥哥 2025-08-09 10:05 采纳率: 98.3%
浏览 6
已采纳

问题: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` 参数,或确保使用正确的认证方式并配置好用户权限。理解该错误的上下文有助于快速定位并解决连接问题。
  • 写回答

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_passwordcaching_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 的步骤如下:

    1. 打开 DBeaver,右键点击“数据库” -> “新建数据库连接”
    2. 选择 MySQL 数据库
    3. 进入“连接设置” -> “驱动属性”标签页
    4. 在 JDBC URL 输入框中添加参数 allowPublicKeyRetrieval=true
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 8月9日