Auth Не удалось подключиться из сценария Fantom к MongoDB, размещенной в MongoLab. В чем дело?
Я пытаюсь подключиться к удаленной MongoDB v3.0.8, размещенной в MongoLab, используя скрипт Fantom v1.0.67. Я использую драйвер afMongo v1.0.4. Линия подключения:
mongoClient := MongoClient(
ActorPool(),
`mongodb://mydbuser:mydbpassword@ds0#####.mongolab.com:#####/mymongodb`
)
Обратите внимание, что заполнители mydbuser, mydbpassword и ##### заменяются правильными значениями. Соединение установлено успешно, когда я запускаю следующую команду из оболочки:
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 (сборка 1.8.0_05-b13)
Я не знаю, зависят ли Robomongo или Fantom / afMongo от Java или системной библиотеки, которая устарела.
Что не так или что я должен проверять, пожалуйста?
1 ответ
Сбои аутентификации в Robomongo v0.8.4 и afMongo 1.0.4 связаны с новым механизмом аутентификации в MongoDB v3, который называется SCRAM-SHA-1.
AfMongo был обновлен с реализацией SCRAM-SHA-1
над 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 из исходного кода, но, честно говоря, самое простое решение (пока) - просто использовать базу данных MongoDB v2.6.
Обратите внимание, что при необходимости клиент GUI MongoChef может проходить аутентификацию в базах данных MongoDB v3.