mysql - fabric-ca-server 连接到 azure mysql:不支持此身份验证插件
问题描述
我很困惑为什么我无法使用 azure 的 MySql 数据库启动fabric-ca-server,我不断得到this authentication plugin is not supported
在一个简单的 go 脚本中使用完全相同的连接字符串是可行的:
db, err := sql.Open("mysql", sqlConnString)
if err != nil {
return "", err
}
defer db.Close()
rows, err := db.Query(sqlString)
if err != nil {
return "", err
}
columns, err := rows.Columns()
...
但是使用以下命令启动fabric-ca-server:
fabric-ca-server start --db.datasource="user@server:pw@tcp(server.mysql.database.azure.com:3306)/fabricca?parseTime=true&allowNativePasswords=true" --db.type=mysql -b admin:admin
导致错误:
2019/08/07 23:39:35 [DEBUG] Initializing DB
2019/08/07 23:39:35 [DEBUG] Initializing 'mysql' database at '****:****@tcp(server.mysql.database.azure.com:3306)/fabricca?parseTime=true'
2019/08/07 23:39:35 [DEBUG] Using MySQL database, connecting to database...
2019/08/07 23:39:35 [DEBUG] Database Name: fabricca
2019/08/07 23:39:35 [DEBUG] Connecting to MySQL server, using connection string: ****:****@tcp(server.mysql.database.azure.com:3306)/?parseTime=true
2019/08/07 23:39:35 [ERROR] Error occurred initializing database: Failed to connect to MySQL database: this authentication plugin is not supported
我尝试了以下版本,结果相同
- 1.4.0
- 1.4.1
- 1.4.2
使用以下参数:
- <无>
- ?parseTime=true
- ?parseTime=true&allowNativePasswords=true
mysql服务器版本为5.7
我已经尝试过事先创建数据库并在没有现有数据库的情况下开始
我尝试过使用管理员用户,一个特定用户,拥有所选数据库的所有授权
我尝试使用不同的密码插件创建用户(在 azure mysql 5.7 上默认为 mysql_native_password)
但是,错误不断弹出。连接字符串似乎没有任何问题,因为我可以在其他 go 脚本中使用它而不会出现任何问题。
尝试使用 tls & 不使用 tls。我可以看到正在使用的唯一区别是:https ://github.com/hyperledger/fabric-ca/blob/477f5a2e8200232a50a3751976f6fa3d3f9062c9/lib/server/db/mysql/mysql.go#L66
有没有人遇到过这个问题,或者知道发生了什么?
解决方案
不幸的是,看起来我们仍在使用一个非常旧版本的 mysql 驱动程序,它根本不支持身份验证插件。我假设您的示例代码下载了更新版本的驱动程序。
推荐阅读
- python - Python 函数中的类型规范
- php - 注册完成后如何添加成功信息
- kotlin - 带有附加功能的 Intent 有一系列我们不使用的参数——它们的目的是什么?
- c# - 如何将 stringBuilder 修复为字符串和反转?
- mysql - 在 DUPLICATE KEY 上设置旧值 = 旧值 + 新值
- java - GLSurfaceView.Renderer 不适用于 android.support.v4.view.ViewPager
- reactjs - 如何使用 mobx 将令牌从 cookie 传递给每个请求?
- pandas - 如何根据数据中的日期在数据框中添加月份列?
- java - 尝试使用 JGraphT 和 JGraphX 构建和可视化 Gomory-Hu-Tree
- javascript - 访问字符串列表以推送或更新到模型中的列表