2

我正在尝试使用Fantom v1.0.67 脚本连接到托管在MongoLab中的远程 MongoDB v3.0.8。我正在使用的驱动程序是afMongo v1.0.4。连接线是:

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:#####
  • 授权失败

我针对本地托管的 MongoDB v2.6.3 和 v3.0.8 数据库运行了 Fantom 脚本以及 Robomongo 连接和身份验证成功。

我的 Java 版本是 Java(TM) SE Runtime Environment (build 1.8.0_05-b13)

我不知道 Robomongo 或 Fantom/afMongo 是否依赖于过时的 Java 或系统库。

请问有什么问题或者我应该检查什么?

4

1 回答 1

2

Robomongo v0.8.4 和 afMongo 1.0.4 中的身份验证失败是由于MongoDB v3 中称为 SCRAM-SHA-1的新身份验证机制。

afMongo 已更新为SCRAM-SHA-1over的实现SASL。它会自动检测 Mongo v3 数据库并切换身份验证协议,在需要时回退到较旧的协议MONGODB-CR- 请参阅此提交

这些更改尚未发布,因为它依赖于Buf.pbk(...)仅在 Fantom 1.0.68 中可用的新方法 - 该方法本身尚未发布。更新的 afMongo v1.0.6 将在 Fantom 1.0.68 发布后立即发布。

您可以从源代码编译 Fantom 1.0.68 和 afMongo 1.0.6,但老实说,最简单的修复(同时)是只使用 v2.6 MongoDB 数据库。

请注意,如果需要,MongoChef GUI 客户端可以针对 MongoDB v3 数据库进行身份验证。

于 2015-12-28T01:42:28.587 回答