Создайте пользователя MongoDB из командной строки

Я установил базу данных MongoDB с пользователем admin, который имеет только права администратора, а не читать или записывать доступ к базам данных.

Теперь я хочу:

  • Добавить новую базу данных,
  • и добавьте нового пользователя в эту базу данных.

И: Мне нужно сделать это из командной строки. Поэтому я попробовал:

$ mongo admin -u admin -p admin --eval "db.addUser('dummyuser', 'dummysecret')"

(Обратите внимание, что, поскольку я все еще использую MongoDB 2.0, я использую старый формат db.addUser.)

Это имело бы смысл, если бы я мог сказать, для какой базы данных должен быть этот пользователь. Но сейчас я борюсь. Как указать базу данных для этой команды? Если бы я был в интерактивной оболочке, я мог бы просто запустить

> use dummydb

но как это сделать из командной строки? Моя первая попытка состояла в том, чтобы объединить обе команды с помощью ;, но это не сработало:

$ mongo admin -u admin -p admin --eval "use dummydb;db.addUser('dummyuser', 'dummysecret')"

просто дает мне синтаксическую ошибку.

Как я получу это правильно?

Ответ 1

Синтаксис use db поддерживается только в интерактивном сеансе оболочки.

Если вы хотите изменить базы данных из сценария администратора, вы можете использовать db.getSiblingDB('dbname').

Таким образом, ваша эквивалентная командная строка с использованием --eval будет выглядеть так:

# MongoDB 2.6+: use createUser()
$ mongo admin -u admin -p admin --eval "db.getSiblingDB('dummydb').createUser({user: 'dummyuser', pwd: 'dummysecret', roles: ['readWrite']})"

# MongoDB 2.4: use addUser()
$ mongo admin -u admin -p admin --eval "db.getSiblingDB('dummydb').addUser('dummyuser', 'dummysecret')"

В руководстве MongoDB есть раздел, посвященный различиям между интерактивным и скриптовым mongo. Это включает эквиваленты для других интерактивных помощников оболочки, таких как show dbs и show collections.

Ответ 2

Решил его, поместив команды

use dummydb
db.addUser('dummyuser', 'dummysecret')

в файл .js, а затем запустить MongoDB, вызвав:

$ mongo admin -u admin -p admin < setupMongoDB.js

Что это: -)

Ответ 3

Выше в моем случае не сработало

use dumyDb

db.createUser({user: "admin",pwd: "[email protected]",roles: [ { role: "readWrite", db: "reporting" } ],mechanisms: [ "SCRAM-SHA-256" ]   }