MongoDB каковы пользователь и пароль по умолчанию?

103

Я использую одну и ту же строку подключения для локальной и производственной среды. Когда строка подключенияmongodb://localhost/mydb

Какое имя пользователя и пароль? Насколько безопасно хранить это так?

Хуан Пабло Фернандес
источник

Ответы:

210

По умолчанию mongodb не имеет включенного контроля доступа, поэтому нет пользователя или пароля по умолчанию.

Чтобы включить контроль доступа, используйте параметр командной строки --authили параметр файла конфигурации security.authorization.

Вы можете использовать следующую процедуру или обратиться к Включение аутентификации в документации MongoDB.

Процедура

  1. Запустите MongoDB без контроля доступа.

    mongod --port 27017 --dbpath /data/db1
    
  2. Подключитесь к экземпляру.

    mongo --port 27017
    
  3. Создайте пользователя-администратора.

    use admin
    db.createUser(
      {
        user: "myUserAdmin",
        pwd: "abc123",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
    
  4. Перезапустите экземпляр MongoDB с контролем доступа.

    mongod --auth --port 27017 --dbpath /data/db1
    
  5. Авторизуйтесь как администратор пользователя.

    mongo --port 27017 -u "myUserAdmin" -p "abc123" \
      --authenticationDatabase "admin"
    
Камило Сильва
источник
17
Если пользователь создан с ролью userAdminAnyDatabase, то создать какую-либо базу данных будет невозможно. Поэтому раздел ролей должен быть таким: роли: [{role: "root", db: "admin"}]
georgeos
4
Пожалуйста, дайте ссылку на исходный пост из руководства MongoDB
ntcho
1
если вы хотите найти использование dbpath: grep dbPath /etc/mongod.conf
rckd
13

В дополнение к тому, что уже упоминал @Camilo Silva, если вы хотите предоставить бесплатный доступ для создания баз данных, чтения, записи баз данных и т.д., но вы не хотите создавать корневую роль, вы можете изменить 3-й шаг следующим образом:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, 
             { role: "dbAdminAnyDatabase", db: "admin" }, 
             { role: "readWriteAnyDatabase", db: "admin" } ]
  }
)
Разван Думитру
источник
4

Для MongoDB ранее, чем 2.6, команда для добавления пользователя root addUser(например)

db.addUser({user:'admin',pwd:'<password>',roles:["root"]})
Черный
источник
1
До версии 2.6 у вас был db.addUser. Начиная с 2.6 и в текущей версии 3.4.x вы можете создать пользователя с помощью db.CreateUser.
Разван Думитру
1

В дополнение к ранее предоставленным ответам одним из вариантов является использование подхода «исключение localhost» для создания первого пользователя, если ваша база данных уже запущена с контролем доступа ( --authпереключатель). Для этого вам нужно иметь доступ к серверу localhost, а затем запустить:

mongo
use admin
db.createUser(
 {
     user: "user_name",
     pwd: "user_pass",
     roles: [
           { role: "userAdminAnyDatabase", db: "admin" },
           { role: "readWriteAnyDatabase", db: "admin" },
           { role: "dbAdminAnyDatabase", db: "admin" }
        ]
 })

Как указано в документации MongoDB:

Исключение localhost позволяет включить контроль доступа, а затем создать первого пользователя в системе. За исключением localhost, после включения контроля доступа подключитесь к интерфейсу localhost и создайте первого пользователя в базе данных администратора. Первый пользователь должен иметь права на создание других пользователей, например пользователя с ролью userAdmin или userAdminAnyDatabase. Подключения, использующие исключение localhost, имеют доступ только для создания первого пользователя в базе данных администратора.

Вот ссылка на этот раздел документации.

Фют
источник