Ошибка аутентификации в скрипте Python для подключения к серверу MongoDB с помощью pymodm - PullRequest
0 голосов
/ 10 октября 2018

Сервер MongoDB размещается в док-контейнере.Создан суперпользователь с правами root для входа в систему с использованием имени пользователя и пароля.Использование pymodm для подключения к серверу MongoDB из скрипта Python.

Я могу подключиться к серверу MongoDB, расположенному на докере, из оболочки, а также из инструмента Compass.Попытка подключить и вставить новые элементы программно с использованием скрипта Python завершается неудачно с ошибкой Authentication Failed.

Сценарий выглядит следующим образом:

from pymodm import connect
from pymodm import MongoModel, fields
import urllib.parse

class Dummy(MongoModel):    
    email = fields.EmailField(primary_key=True)
    name = fields.CharField()

    class Meta:
        connection_alias = 'Mongo'

# Establish a connection to the database.
mongo_uri = "mongodb://monadmin:" + urllib.parse.quote("myPassword@123") + "@192.168.x.x:27017/Test"

# Establish a connection to the database.
def Connect2DB()
    try:
        #connect('mongodb://localhost:27017/PMOTest')
        connect(mongo_uri, alias="Mongo")
        print("db connection success")
        return True
    except:
        print("db connection failed")
        return False

def Insert_record():
    try:
        Dummy(email="hello@test.com", name="test").save()     
        print("save success")
    except ex:
        print("save failed")


if __name__ == "__main__":
    if Connect2DB():
        Insert_record()

Соединение установлено успешно, но запись вставки завершается с ошибкойследующая ошибка: pymongo.errors.OperationFailure: Ошибка аутентификации

1 Ответ

0 голосов
/ 19 октября 2018

mongo_uri = "mongodb://monadmin:" + urllib.parse.quote("myPassword@123") + "@192.168.x.x:27017/Test?authSource=admin

Вам необходимо добавить ?authSource=admin

Для используемого мной образа докера mongo, он содержал базу данных с именем admin.Чтобы использовать базу данных администратора для аутентификации, вы должны указать команде выполнить аутентификацию, добавив часть authSource в ваш uri.

...