Ballerina 持久化运行报错:公钥检索不被允许导致SQL连接器连接池初始化失败
Ballerina 持久化运行报错:公钥检索不被允许导致SQL连接器连接池初始化失败
嗨,我正好碰到过这个问题,来给你捋捋解决办法!
你遇到的这个Public Key Retrieval is not allowed错误,本质是MySQL 8.0及以上版本默认用了更安全的caching_sha2_password身份验证插件,但Ballerina的SQL连接器出于安全考虑,默认禁止了公钥检索操作,导致连接池初始化失败。结合你用Docker部署MySQL的场景,给你两个可行的解决方案:
方案一:修改Ballerina的数据库连接配置
直接在你的Ballerina代码里,给数据库客户端配置加上allowPublicKeyRetrieval=true参数,同时如果不需要SSL连接的话,可以顺便加上useSSL=false避免额外警告。示例代码如下:
import ballerina/sql; import ballerina/sql.driver.mysql; sql:Client dbClient = check new ( host = "localhost", port = 3305, user = "root", password = "my-secret-pw", database = "你的数据库名称", // 记得替换成实际的库名 options = { allowPublicKeyRetrieval: true, useSSL: false } );
方案二:调整MySQL Docker容器的启动参数
如果你不想改动代码,可以在启动MySQL容器时,指定用旧版的mysql_native_password身份验证插件。不过要注意,得先停掉并删除已有的容器,再重新创建:
# 停止并删除旧容器 docker stop persist-mysql docker rm persist-mysql # 用新参数启动容器 docker run -e "MYSQL_ROOT_PASSWORD=my-secret-pw" --name persist-mysql -p 3305:3306 -d mysql --default-authentication-plugin=mysql_native_password
两种方案选一个就行,推荐方案一,因为它不会降低MySQL的默认安全性,只是在连接器层面开启必要的公钥检索权限。
备注:内容来源于stack exchange,提问作者sahanhe
相关产品推荐
相关产品推荐

