当 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的主要内容,如果未能解决你的问题,请参考以下文章