MongoDB jaki jest domyślny użytkownik i hasło?

109

Używam tych samych parametrów połączenia w środowisku lokalnym i produkcyjnym. Gdy ciąg połączenia tomongodb://localhost/mydb

Jaka jest nazwa użytkownika i hasło? Czy utrzymywanie tego w ten sposób jest bezpieczne?

Juan Pablo Fernandez
źródło

Odpowiedzi:

218

Domyślnie mongodb nie ma włączonej kontroli dostępu, więc nie ma domyślnego użytkownika ani hasła.

Aby włączyć kontrolę dostępu, użyj opcji wiersza poleceń --authlub ustawienia pliku konfiguracyjnego security.authorization.

Możesz skorzystać z poniższej procedury lub zapoznać się z tematem Włączanie uwierzytelniania w dokumentacji MongoDB.

Procedura

  1. Uruchom MongoDB bez kontroli dostępu.

    mongod --port 27017 --dbpath /data/db1
    
  2. Połącz się z instancją.

    mongo --port 27017
    
  3. Utwórz administratora użytkownika.

    use admin
    db.createUser(
      {
        user: "myUserAdmin",
        pwd: "abc123",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
    
  4. Uruchom ponownie instancję MongoDB z kontrolą dostępu.

    mongod --auth --port 27017 --dbpath /data/db1
    
  5. Uwierzytelnij się jako administrator użytkowników.

    mongo --port 27017 -u "myUserAdmin" -p "abc123" \
      --authenticationDatabase "admin"
    
Camilo Silva
źródło
19
Jeśli użytkownik zostanie utworzony z rolą userAdminAnyDatabase, nie będzie można utworzyć żadnej bazy danych. Dlatego sekcja ról powinna wyglądać następująco: role: [{role: "root", db: "admin"}]
georgeos Kwietnia
1
jeśli chcesz znaleźć ścieżkę dbpath, użyj: grep dbPath /etc/mongod.conf
rckd
14

Oprócz tego, o czym już wspomniał @Camilo Silva, jeśli chcesz dać bezpłatny dostęp do tworzenia baz danych, odczytu, zapisu itp., Ale nie chcesz tworzyć roli roota, możesz zmienić trzeci krok w następujący sposób:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, 
             { role: "dbAdminAnyDatabase", db: "admin" }, 
             { role: "readWriteAnyDatabase", db: "admin" } ]
  }
)
Razvan Dumitru
źródło
4

W przypadku MongoDB wcześniejszych niż 2.6 polecenie dodania użytkownika root to addUser(np.)

db.addUser({user:'admin',pwd:'<password>',roles:["root"]})
czarny
źródło
1
Do wersji 2.6 miałeś db.addUser. Począwszy od 2.6 iw aktualnej wersji 3.4.x możesz stworzyć użytkownika z db.CreateUser.
Razvan Dumitru
2

Oprócz wcześniej udzielonych odpowiedzi, jedną z opcji jest zastosowanie podejścia „wyjątku hosta lokalnego” w celu utworzenia pierwszego użytkownika, jeśli baza danych jest już uruchomiona z kontrolą dostępu ( --authprzełącznikiem). Aby to zrobić, musisz mieć dostęp localhost do serwera, a następnie uruchomić:

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

Jak podano w dokumentacji MongoDB:

Wyjątek localhost umożliwia włączenie kontroli dostępu, a następnie utworzenie pierwszego użytkownika w systemie. Z wyjątkiem localhost, po włączeniu kontroli dostępu połącz się z interfejsem localhost i utwórz pierwszego użytkownika w bazie danych administratora. Pierwszy użytkownik musi mieć uprawnienia do tworzenia innych użytkowników, na przykład użytkownika z rolą userAdmin lub userAdminAnyDatabase. Połączenia korzystające z wyjątku localhost mają dostęp tylko do tworzenia pierwszego użytkownika w bazie danych administratora.

Oto link do tej sekcji dokumentów.

Fjut
źródło