Проверка подлинности Mongo успешно выполняется с помощью командной строки или интерпретатора, ошибка с библиотеками - PullRequest
0 голосов
/ 13 сентября 2018

Для данного пользователя foo с паролем bar я могу успешно пройти аутентификацию на базе данных admin и получить желаемый результат на одном из наших узлов сегментов с помощью следующей команды:

mongo PRIMARY --host exampleShard1.com \
              --port 27018 \
              --username foo \
              -p bar \
              --authenticationDatabase 'admin' \
              --eval 'db.serverStatus().connections'

Однако при попытке выполнить точно такую ​​же команду через стороннюю библиотеку, такую ​​как драйвер Java или Python pymongo , аутентификация проходит успешно, но я не могу выполнить какую-либокоманды успешно выполнены из-за «не авторизованных» ошибок.

Например, вот приведенная выше версия рабочей команды pymongo:

#!/usr/bin/python3

from pymongo import MongoClient

mongoClient = MongoClient("exampleShard1.com", 27018)
mongoClient.admin.authenticate("foo", "bar")
primaryDb = mongoClient["PRIMARY"]
print(primaryDb.eval("db.serverStatus().connections"))

Несмотря на то, что это выглядит как эквивалент рабочей команды источника,эта версия завершается ошибкой с версией следующей ошибки:

not authorized on local to execute command
{
    $eval: db.serverStatus().connections,
    args: [],
    lsid: { 
        id: UUID("f5a936ee-71ad-4568-8bf2-a45c69424200")
    },
    $clusterTime: {
        signature: {
            keyId: 111,
            hash: BinData(0, 6F)
        },
        clusterTime: Timestamp(1536848021, 159)
    },
    $db: "local",
    $readPreference: {
        mode: "primaryPreferred"
    }
}

Это несмотря на то, что метод authenticate() возвращает "True", подтверждая успешную аутентификацию.

Я думаю, что естьтребуемое значение устанавливается автоматически из командной строки, а не из версии сценария или что команда lВ любом случае версия каким-то образом обходит дополнительный уровень аутентификации, в который попадает версия скрипта.

На данный момент я, к сожалению, не могу попробовать, и я исчерпал Google за помощь.Любое руководство будет с благодарностью!

...