Auth 尝试从 Fantom 脚本连接到托管在 MongoLab 中的 MongoDB 失败。怎么了?
Auth Failed trying to connect from a Fantom script to a MongoDB hosted in MongoLab. What's wrong?
我正在尝试连接到在 MongoLab using a Fantom v1.0.67 script. The driver I'm using is afMongo v1.0.4 中托管的远程 MongoDB v3.0.8。连接线为:
mongoClient := MongoClient(
ActorPool(),
`mongodb://mydbuser:mydbpassword@ds0#####.mongolab.com:#####/mymongodb`
)
请注意,占位符 mydbuser、mydbpassword 和 ##### 已替换为正确的值。当我 运行 来自 shell 的以下命令时,连接成功:
mongo ds0#####.mongolab.com:#####/mymongodb -u mydbuser -p mydbpassword
但是在 Fantom 脚本中,我得到了这个错误:
afMongo::MongoCmdErr: Command 'authenticate' failed. MongoDB says: auth failed
afMongo::Operation.runCommand (Operation.fan:36)
afMongo::Operation.runCommand (Operation.fan)
afMongo::Connection$.authenticate (Connection.fan:34)
afMongo::TcpConnection.authenticate (Connection.fan:51)
afMongo::ConnectionManagerPooled.checkOut (ConnectionManagerPooled.fan:458)
afMongo::ConnectionManagerPooled.leaseConnection (ConnectionManagerPooled.fan:320)
afMongo::Cmd.run (Cmd.fan:71)
afMongo::Database.runCmd (Database.fan:36)
afMongo::MongoClient.runAdminCmd (MongoClient.fan:107)
afMongo::MongoClient.buildInfo (MongoClient.fan:64)
afMongo::MongoClient.startup (MongoClient.fan:119)
afMongo::MongoClient.makeFromUri$ (MongoClient.fan:41)
afMongo::MongoClient.makeFromUri$ (MongoClient.fan)
afMongo::MongoClient.makeFromUri (MongoClient.fan:38)
我也尝试过 Robomongo v0.8.4,结果相似:弹出对话框说...
- 成功连接到 ds0#####。mongolab.com:#####
- 授权失败
我 运行 Fantom 脚本以及 Robomongo 成功连接并验证了本地托管的 MongoDB v2.6.3 和 v3.0.8 数据库。
我的 Java 版本是 Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
我不知道 Robomongo 或 Fantom/afMongo 是否依赖于 Java 或已过时的系统库。
请问出了什么问题或我应该检查什么?
Robomongo v0.8.4 和 afMongo 1.0.4 中的身份验证失败是由于 MongoDB v3 called SCRAM-SHA-1 中的新身份验证机制。
afMongo 已更新为在 SASL
上实现了 SCRAM-SHA-1
。它会自动检测 Mongo v3 数据库并切换身份验证协议,在需要时回退到旧的 MONGODB-CR
- 请参阅 this commit.
这些更改尚未发布,因为它依赖于一种仅在 Fantom 1.0.68 中可用的新方法 Buf.pbk(...)
- 它本身未发布。更新后的 afMongo v1.0.6 将在 Fantom 1.0.68 发布后立即发布。
您可以从源代码编译 Fantom 1.0.68 和 afMongo 1.0.6,但老实说,最简单的修复(同时)是只使用 v2.6 MongoDB数据库。
请注意,如果需要,MongoChef GUI 客户端可以针对 MongoDB v3 数据库进行身份验证。
我正在尝试连接到在 MongoLab using a Fantom v1.0.67 script. The driver I'm using is afMongo v1.0.4 中托管的远程 MongoDB v3.0.8。连接线为:
mongoClient := MongoClient(
ActorPool(),
`mongodb://mydbuser:mydbpassword@ds0#####.mongolab.com:#####/mymongodb`
)
请注意,占位符 mydbuser、mydbpassword 和 ##### 已替换为正确的值。当我 运行 来自 shell 的以下命令时,连接成功:
mongo ds0#####.mongolab.com:#####/mymongodb -u mydbuser -p mydbpassword
但是在 Fantom 脚本中,我得到了这个错误:
afMongo::MongoCmdErr: Command 'authenticate' failed. MongoDB says: auth failed
afMongo::Operation.runCommand (Operation.fan:36)
afMongo::Operation.runCommand (Operation.fan)
afMongo::Connection$.authenticate (Connection.fan:34)
afMongo::TcpConnection.authenticate (Connection.fan:51)
afMongo::ConnectionManagerPooled.checkOut (ConnectionManagerPooled.fan:458)
afMongo::ConnectionManagerPooled.leaseConnection (ConnectionManagerPooled.fan:320)
afMongo::Cmd.run (Cmd.fan:71)
afMongo::Database.runCmd (Database.fan:36)
afMongo::MongoClient.runAdminCmd (MongoClient.fan:107)
afMongo::MongoClient.buildInfo (MongoClient.fan:64)
afMongo::MongoClient.startup (MongoClient.fan:119)
afMongo::MongoClient.makeFromUri$ (MongoClient.fan:41)
afMongo::MongoClient.makeFromUri$ (MongoClient.fan)
afMongo::MongoClient.makeFromUri (MongoClient.fan:38)
我也尝试过 Robomongo v0.8.4,结果相似:弹出对话框说...
- 成功连接到 ds0#####。mongolab.com:#####
- 授权失败
我 运行 Fantom 脚本以及 Robomongo 成功连接并验证了本地托管的 MongoDB v2.6.3 和 v3.0.8 数据库。
我的 Java 版本是 Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
我不知道 Robomongo 或 Fantom/afMongo 是否依赖于 Java 或已过时的系统库。
请问出了什么问题或我应该检查什么?
Robomongo v0.8.4 和 afMongo 1.0.4 中的身份验证失败是由于 MongoDB v3 called SCRAM-SHA-1 中的新身份验证机制。
afMongo 已更新为在 SASL
上实现了 SCRAM-SHA-1
。它会自动检测 Mongo v3 数据库并切换身份验证协议,在需要时回退到旧的 MONGODB-CR
- 请参阅 this commit.
这些更改尚未发布,因为它依赖于一种仅在 Fantom 1.0.68 中可用的新方法 Buf.pbk(...)
- 它本身未发布。更新后的 afMongo v1.0.6 将在 Fantom 1.0.68 发布后立即发布。
您可以从源代码编译 Fantom 1.0.68 和 afMongo 1.0.6,但老实说,最简单的修复(同时)是只使用 v2.6 MongoDB数据库。
请注意,如果需要,MongoChef GUI 客户端可以针对 MongoDB v3 数据库进行身份验证。