1) Перед установку даже наборы реплик в Монго я создал пользователь с правами администратора, с «readWriteAnyDatabase», «userAdminAnyDatabase», «dbAdminAnyDatabase», «clusterAdmin» ролями.Не удается проверить подлинность с mongoenine к MongoDB реплик
2) Затем я устанавливаю свои конфигурации /etc/mongodb.conf на всех 3 серверах.
dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongodb.log
logappend=true
port = 27017
auth = true
replSet = test4
3) инициированные реплики, но получил ошибки (Не помню точно, что была ошибка, но что-то связанное с этим одной из сервера не вышло. Так что я решил, что он просто не может аутентификации)
config = {"_id" : "test4", "version" : 1, "members" : [{"_id" : 0,"host" : "xxx.xxx.xxx.xxx:27017"}, {"_id" : 1,"host" : "xxx.xxx.xxx.xxx:27017"}, {"_id":2,"host" : "xxx.xxx.xxx.xxx:27017"}]}
rs.initiate(config)
4) чтобы решить эту ошибку, я генерироваться кеуген и добавил аутентификацию кеуген в мой файл mongodb.conf.
dbpath=/var/lib/mongodb
keyFile = /etc/keyFile
logpath=/var/log/mongodb/mongodb.log
logappend=true
port = 27017
auth = true
replSet = test4
И все работает как шарм. База данных копировала себя поверх реплик. Пользователь Admin работал так же, как ожидалось.
5) Тогда я создал пользователя со всеми необходимыми разрешениями для другой базы данных, у меня есть, давайте назовем это «testdb» и пользователем: notadmin, pass: notadmin.
Но есть одна странная вещь, которую я заметил. Когда я вхожу Монго в консоли я не вижу реплик, пока я не войти базы данных администратора в качестве администратора, как это:
use admin
db.auth('admin', 'admin')
Тогда мои консольных изменения в test4: Primary> или test4: СРЕДНЯЯ> и я могу выполнять действия с репликами. Полагаю, это должно быть так.
И все работает отлично, если я вставляю данные через библиотеку pymongo. Разрешения работают, пользователь admin может вставлять в любую базу данных, данные разрешения, а пользователь notadmin может вставлять в testdb.
Но если я пытаюсь сделать то же самое с моделями mongoengine,
mongodsn = 'mongodb://notadmin:[email protected]:27017,xx.x.xx.xxx:27017,xxx.xxx.xxx.xx:27017/'
db_instance = mongoengine.connect('testdb', host=mongodsn, replicaSet='test4', readPreference='secondaryPreferred')
rt = ReconnectTest()
rt.content = 'item#{0:d}'.format(x)
rt.save()
я получаю ошибку аутентификации:
mongoengine.errors.OperationError: Could not save document (command SON([('authenticate', 1), ('user', u'notadmin'), ('nonce', u'9ae2f85cd41f6c74'), ('key', u'8f814aa2434s4t2e0ff9bae03762e')]) failed: auth fails)
Единственное, что она позволяет мне от пользователя с правами администратора, чтобы написать администратору база данных. Так что-то вроде это работает:
mongodsn = 'mongodb://admin:[email protected]:27017,xx.x.xx.xxx:27017,xxx.xxx.xxx.xx:27017/'
db_instance = mongoengine.connect('admin', host=mongodsn, replicaSet='test4', readPreference='secondaryPreferred')
rt = ReconnectTest()
rt.content = 'item#{0:d}'.format(x)
rt.save()
Я так растерялся, потому что mongoengine просто обертка вокруг PyMongo. Так почему я могу делать действия с pymongo, и не могу сделать то же самое с mongoenige. Как выполнить проверку подлинности с помощью mongoengine на testdb?
ли вам когда-нибудь решить это? – okoboko