Auth尝试从Fantom脚本连接到MongoLab中托管的MongoDB失败。怎么了?

时间:2015-12-28 00:40:27

标签: mongodb mlab robo3t fantom

我正在尝试使用MongoLab v1.0.67脚本连接到Fantom中托管的远程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:#####
  • 授权失败

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

我的Java版本是Java(TM)SE运行时环境(版本1.8.0_05-b13)

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

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

1 个答案:

答案 0 :(得分:2)

Robomongo v0.8.4和afMongo 1.0.4中的auth失败是由MongoDB v3 called SCRAM-SHA-1中的新认证机制造成的。

afMongo已更新为SCRAM-SHA-1超过SASL的实施。它会自动检测Mongo v3数据库并切换auth协议,并在需要时回退到较早的MONGODB-CR - 请参阅this commit

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

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

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