MongoDB, які користувач та пароль за замовчуванням?


103

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

Що таке ім'я користувача та пароль? Чи безпечно так тримати?

Відповіді:


211

За замовчуванням 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: [{role: "root", db: "admin"}]
georgeos

4
Будь ласка, зв’яжіть оригінальну публікацію з MongoDB Manual
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, команда для додавання кореневого користувача є addUser(наприклад)

db.addUser({user:'admin',pwd:'<password>',roles:["root"]})

1
До версії 2.6 у вас було db.addUser. Починаючи з 2.6 та в поточній версії 3.4.x ви можете створити користувача за допомогою db.CreateUser.
Разван Думітру


1

На додаток до раніше наданих відповідей, одним із варіантів є дотримання підходу «localhost виняток», щоб створити першого користувача, якщо ваш db вже запущений з контролем доступу ( --authперемикачем). Для цього вам потрібно мати доступ до локального хосту до сервера, а потім запустити:

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, мають доступ лише для створення першого користувача в базі даних адміністратора.

Ось посилання на цей розділ документів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.