我正在尝试使用MongoLabv1.0.67脚本连接到Fantom中托管的远程MongoDB v3.0.8。我使用的驱动程序是afMongov1.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脚本,并通过本地托管的mongodb v2.6.3和v3.0.8数据库成功地连接和验证了robomongo。
我的Java版本是Java(TM)SE运行时环境(构建1.80y05-B13)
我不知道Robomongo或Faunt/AfMango是否依赖于Java或系统库已经过时了。
请问出什么事了,或者我该查什么?

最佳答案

robomongo v0.8.4和afmongo 1.0.4中的身份验证失败都是由于MongoDB v3 called SCRAM-SHA-1中的新身份验证机制造成的。
afmongo已经更新了SCRAM-SHA-1overSASL的实现。它自动检测mongo v3数据库并切换auth协议,在需要时返回到旧的MONGODB-CR-参见this commit
这些更改尚未发布,因为它依赖于fantom 1.0.68中提供的新方法Buf.pbk(...),而fantom1.0.68本身是未发布的。fantom 1.0.68发布后,将立即发布更新的afmongo v1.0.6。
您可以从源代码处编译fantom 1.0.68和afmongo1.0.6,但老实说,最简单的解决方案(同时)是只使用v2.6mongodb数据库。
注意,如果需要,MongoChefgui客户端可以针对mongodb v3数据库进行身份验证。

关于mongodb - Auth尝试从Fantom脚本连接到MongoLab中托管的MongoDB失败。怎么了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34486392/

10-16 20:02
查看更多