当 DBeaver 驱动程序设置中的“allowPublicKeyRetrieval=true”时,只能连接到在 docker 容器中运行的 mysql

Posted

技术标签:

【中文标题】当 DBeaver 驱动程序设置中的“allowPublicKeyRetrieval=true”时,只能连接到在 docker 容器中运行的 mysql【英文标题】:Can only connect to a mysql running in a docker container when "allowPublicKeyRetrieval=true" in DBeaver driver settings 【发布时间】:2022-01-19 05:48:18 【问题描述】:

我正在使用 docker 容器运行 mysql 服务器,用于从我的主机本地开发 golang 应用程序,问题是,我尝试使用各种客户端连接到它,它总是连接成功,但是在返回错误时返回运行查询,例如在 vscode 的 sqltools 中:

Request connection/GetChildrenForTreeItemRequest failed with message: 
ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; 
consider upgrading MySQL client

当我尝试与 golang 连接时,我得到:

go run ./cmd/web
ERROR   2021/12/16 04:28:55 main.go:32: Error 1045: Access denied for user 'web'@'172.18.0.1' (using password: YES)
exit status 1

(Golang数据源是“user:pass@/database?parseTime=true”使用mysql驱动)

然而,DBeaver 能够成功连接,但如果我尝试在不更改任何设置的情况下进行连接,我会收到以下消息:

Connection error:
Public Key Retrieval is not allowed

因此,转到驱动程序设置并将“allowPublicKeyRetrieval”从“false”更改为“true”将使一切正常。

有没有办法允许使用 golang 驱动程序进行这种“公钥检索”?有什么我可以从 mysql 控制台更改的东西,所以不需要吗?我在文档(https://github.com/go-sql-driver/mysql)中看不到任何内容,并且在找到成功连接它的方法之前我无法继续我的项目:(

【问题讨论】:

【参考方案1】:

首先检查in here,如果将?allowPublicKeyRetrieval=true 添加到您的JDBC 查询就足够了。

检查您如何启动 Mysql docker image,确保您公开您的端口。 广告尝试使用Mysql一开始生成的root账号/密码as shown here。 运行后,您可以检查web 用户。

【讨论】:

【参考方案2】:

我想你可能已经明白了,但如果你不明白,这就是我的答案。

您似乎在关注“Let's Go”这本书(我是)。书中的说明是用CREATE USER 'web'@'localhost';创建一个用户。如果您查看错误 Error 1045: Access denied for user 'web'@'172.18.0.1'...,它会告诉您正在尝试连接 172.18.0.1 而不是 localhost

解决此问题的最简单方法是使用CREATE USER 'web'@'%'; 创建用户,其中% 意味着它允许从任何地方进行连接。

【讨论】:

以上是关于当 DBeaver 驱动程序设置中的“allowPublicKeyRetrieval=true”时,只能连接到在 docker 容器中运行的 mysql的主要内容,如果未能解决你的问题,请参考以下文章

DBeaver下载驱动文件失败

DBeaver中的mysql表无法设置外键

dbeaver修改时间合适

DBeaver中的Oracle db表数据加载太慢

DBeaver设置Maven镜像仓库

尝试使用DBeaver同时执行多个查询时,无法与Ignite群集通信