MongoDB - резервное копирование и восстановление пользователей и ролей - PullRequest
0 голосов
/ 29 декабря 2018

Каковы рекомендации по синхронизации пользователей и ролей между экземплярами Mongo?

На одном компьютере с Windows я пытаюсь скопировать пользователей и роли MongoDB в базе данных администратора из одного экземпляра Mongo в другой.Аутентификация включена для каждого экземпляра.Никакой комбинации mongodump \ mongorestore или mongoexport \ mongoimport я не пробовал.При использовании mongodump \ restore на шаге восстановления отображается:

при условии, что пользователи в каталоге дампа принадлежат <= 2.4 (аутентификация версии 1). Ошибка: коллекции пользователей и ролей в дампе имеют несовместимую версию аутентификации с целевым сервером.: не могу восстановить пользователей с аутентификацией версии 1 на сервер с аутентификацией версии 5 </p>

Я не нашел опции командной строки, чтобы запретить эту глупость.У меня есть Mongo версии 4, и это все установлено.

Можно подумать, что --dumpDbUsersAndRoles и --restoreDbUsersAndRoles будут симметричными, но это не так.

Я смог запустить это, mongoexport -p 27017 -u admin - пароль - пожалуйста, -d admin --collection system.roles --out myRoles.json

Однако при попытке mongoimport

mongoimport -p 26017 -u admin -пароль, пожалуйста -d admin --collection "system.roles" --file myRoles.json

вывод отображает ошибку при проверке настроек: недопустимое имя коллекции: имя коллекции 'system.roles' нельзя начинать с 'система ".

1 Ответ

0 голосов
/ 29 декабря 2018

Учебник для начинающих

Пользователи прикреплены к базам данных.В идеале, у вас есть конкретные пользователи базы данных, хранящиеся в соответствующей базе данных.Все «глобальные» пользователи должны войти в админ.Хорошая часть: наборы реплик заботятся о синхронизации этих пользователей с каждым членом набора реплик.

Решение

При этом, как представляется, совершенно очевидно, как с этим бороться.В худшем случае гораздо проще иметь готовый .js, который просто воссоздает 3-4 глобальные роли, а не возится с коллекциями system.* в базе данных администратора.Преимущество этого заключается в том, что вы также можете автоматически выполнять другие действия по настройке, например настройку с использованием шардинга, если TSHTF и вам необходимо перестроить кластер с нуля.

use admin;
db.createRole([...])
db.createRole([...])
// do other stuff, like sharding setup

Запустите его для основноговаш набор реплик или экземпляр mongos (если у вас есть защищенный кластер), использующий

mongo daHost:27017/admin myjsfile.js

после настройки компьютеров, но до включения аутентификации.

Другой вариант будетиспользуйте Ansible для создания пользователя.

Что касается дампа и восстановления, вы можете не указывать имя коллекции.

...