Как создать новый 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'}]});"