Как создать новый MongoDB из командной строки с включенным auth?

Для того, чтобы создать базу данных MongoDB в задаче Capistrano, мне нужно выяснить, как создать новую базу данных через оболочку MongoDB, когда MongoDB работает с включенным auth.

С включенным auth оболочка MongoDB не может ничего сделать без предварительной аутентификации, но при использовании базы данных admin должна произойти аутентификация, насколько мне известно. Поэтому я подключался к нему для начинающих вроде:

sudo -u mongodb mongo admin --eval "db.auth(username, password)"

И это подтверждает мои действия для дальнейших действий, но... в этот момент мне нужно создать базу данных и пользователя для нее в том же сеансе оболочки. Однако я не могу:

sudo -u mongodb mongo admin --eval "db.auth(username, password);use new_database"

Потому что use database не может использоваться в eval. Поэтому я попытался вместо этого:

sudo -u mongodb mongo admin --eval "db.auth(username, password);db = connect('localhost:27017/new_database')"

И это действительно даст мне экземпляр новой базы данных, которую я хочу создать, но если я попытаюсь:

sudo -u mongodb mongo admin --eval "db.auth(username, password);connect('localhost:27017/new_database').addUser(new_user, new_password)"

Я получаю ошибку аутентификации, поэтому, по-видимому, с помощью команды connect() забывается, что я аутентифицировался раньше.

Итак, вот где я застрял, пытаясь создать базу данных в одной строке с MongoDB, используя auth и пользователя admin.

Любые предложения о том, как я могу это сделать?

Ответ 1

Вы можете использовать db.getSiblingDB(name) для ссылки на новую базу данных и добавить новую учетную запись, например:

mongo -u username -p password admin --eval "db.getSiblingDB('new_database').addUser('new_user', 'new_password');"

Теперь вы должны иметь возможность аутентифицироваться из командной строки с помощью -u и -p:

mongo -u new_user -p new_password new_database

Ответ 2

Остерегайтесь того факта, что функция addUser устарела с версии 2.6.

Используйте db.createUser() и db.updateUser() вместо db.addUser() для добавления пользователей в MongoDB.

Ваш код должен быть как ниже:

mongo -u username -p password admin --eval "db.getSiblingDB('new_database').createUser({ user : 'new_user', pwd :  'new_password', roles : [{ role: 'readWrite', db: 'new_database'}]});"