Как создать новый MongoDB из командной строки с включенной аутентификацией?
для того, чтобы создать базу данных MongoDB в задаче Capistrano, мне нужно выяснить, как создать новую базу данных через оболочку MongoDB, когда MongoDB работает с включенной аутентификацией.
С включенным 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 и администратор.
любые предложения о том, как я могу это сделать?
2 ответов
можно использовать db.getSiblingDB(имя) для ссылки на новую базу данных и добавления новой учетной записи, например:
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
помните, что 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'}]});"