Jak mogę wprowadzić Mongo jako administrator lub zresetować użytkowników?

29

Bawiłem się z uprawnieniami i zablokowałem się w bazie danych Mongo. Jestem prawie pewien, że to zrobiłem, próbując jawnie dodać dostęp do bazy danych, ale zamiast tego nadpisałem tylko zezwolenie na bazę danych. Więc jestem skutecznie zablokowany z bazy danych Mongo i wszystko, co czytam, mówi mi, jak utworzyć superużytkownika, jeśli mam uprawnienie dodawania użytkownika. W tej chwili nie sądzę, że mam użytkowników, którzy mają takie uprawnienia. Czy istnieje sposób na wejście do bazy danych jako pełny dostęp? Jestem właścicielem serwera i mam dostęp do konta root.

Tony
źródło

Odpowiedzi:

38

Jeśli się zablokowałeś, musisz wykonać następujące czynności:

  1. Zatrzymaj instancję MongoDB
  2. Usuń opcje --auth i / lub --keyfile z konfiguracji MongoDB, aby wyłączyć uwierzytelnianie
  3. Uruchom instancję bez uwierzytelniania
  4. Edytuj użytkowników zgodnie z potrzebami
  5. Uruchom ponownie instancję z włączonym uwierzytelnianiem
daveh
źródło
Naprawdę nie wystarczyło auth, dzięki!
Andrei
14

Miałem podobny problem, gdy utworzyłem użytkownika bez uprzedniego dodania administratora. Poniższe kroki pomogły rozwiązać problem:

  1. Otwórz plik konfiguracyjny MongoDB za pomocą sudo( sudo vi mongodb.conf).
    Plik można znaleźć w /etc/folderze.
  2. Komentarz "auth = true".
  3. Zatrzymaj usługę MongoDB ( sudo service mongod stop)
  4. Uruchom usługę MongoDB ( sudo service mongod start)
  5. Następnie utwórz superużytkownika „root” za pomocą poniższego polecenia:

    use admin
    
    db.createUser({user:"admin",pwd:"password",roles:[{role:"root",db:"admin"}]});
    

    W celach informacyjnych https://docs.mongodb.com/manual/reference/built-in-roles/#superuser-roles

  6. Wróć i odkomentuj "auth=true". Zatrzymaj i uruchom / uruchom ponownie usługę mongodb.

Divya Krishnan
źródło
Nie mogę ci wystarczająco podziękować. Utknąłem, próbując to rozgryźć, gdy załadowałem projekt na serwer deweloperów. Dziękuję bardzo! :)
Woppi
Tak samo. Komunikaty o błędach serwera są w tym przypadku spektakularnie nieprzydatne. Dziękuję Ci!
Tom
7

Jeśli używasz zestawu replik zkeyfile

Bezpieczeństwo między członkami zestawu repliki przy użyciu uwierzytelnienia wewnętrznego

Plik klucza służy do uwierzytelniania w replikacji.

security:
  keyFile: <path-to-keyfile>
replication:
  replSetName: <replicaSetName>

Możesz użyć tego polecenia, aby zalogować się jako administrator do mongod:

mongo -u __system -p "$(tr -d '\011-\015\040' < path-to-keyfile)" --authenticationDatabase local

Posłowie możesz utworzyć lub zmodyfikować swojego administratora.

Rola wewnętrzna

__systemMongoDB przypisuje tę rolę do obiektów użytkownika reprezentujących elementy klastra, takich jak elementy zestawu replik i instancje mongo. Rola uprawnia jej posiadacza do podjęcia dowolnej akcji przeciwko dowolnemu obiektowi w bazie danych.

Nie przypisuj tej roli do obiektów użytkowników reprezentujących aplikacje lub administratorów użytkowników, poza wyjątkowymi okolicznościami.

Iwanow
źródło
Gdzie znalazłeś te informacje?
ośmiościan
2

Sprawdź odpowiedzi na to pytanie, mogą ci pomóc

https://stackoverflow.com/questions/20117104/mongodb-root-user

Zasadniczo, jeśli nadal masz dostęp do serwera, możesz mieć dostęp do Adminbazy danych.

Jest więcej na tej stronie http://docs.mongodb.org/v2.4/reference/user-privileges/

Zauważ, że wersja 2.6 zmienia sposób, w jaki to działa całkowicie. W wersji 2.6 musisz spędzić więcej czasu z http://docs.mongodb.org/manual/security/

Meligy
źródło
1
Jak wspomniano w poście, to jedyne informacje, jakie udało mi się znaleźć. Nie mam na to uprawnień
Tony
0

Musisz zatrzymać Mongo, usunąć pliki administracyjne, a następnie uruchomić Mongo

sudo service mongod stop
mv /data/admin.* .
sudo service mongod start
Tony
źródło
2
To niszczy bazę danych użytkowników administracyjnych i umożliwia dostęp za pośrednictwem „localHostExcetption”. Nie jest to dobry sposób na administrowanie użytkownikami, gdy masz problem.
daveh