我正在尝试使用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:弹出对话框说...
我运行Fantom脚本以及Robomongo成功连接和验证本地托管的MongoDB v2.6.3和v3.0.8数据库。
我的Java版本是Java(TM)SE运行时环境(版本1.8.0_05-b13)
我不知道Robomongo或Fantom / afMongo是否依赖于过时的Java或系统库。
有什么问题或我应该检查什么?
答案 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数据库进行身份验证。