Wie kann ich Mongo als Superuser eingeben oder Benutzer zurücksetzen?

29

Ich habe mit Berechtigungen rumgespielt und mich aus der Mongo-Datenbank ausgesperrt. Ich bin mir ziemlich sicher, dass ich dies getan habe, indem ich versucht habe, den Zugriff auf eine Datenbank explizit hinzuzufügen, aber stattdessen habe ich nur die Erlaubnis für die Datenbank überschrieben. Ich bin also effektiv von meiner Mongo-Datenbank ausgeschlossen und alles, was ich lese, sagt mir, wie ich einen Superuser erstelle, wenn ich die Berechtigung zum Hinzufügen von Benutzern habe. Im Moment glaube ich nicht, dass ich Benutzer habe, die dieses Privileg haben. Gibt es eine Möglichkeit, die Datenbank als allen Zugriff einzugeben? Ich besitze den Server und habe Root-Zugriff.

Tony
quelle

Antworten:

38

Wenn Sie sich ausgesperrt haben, müssen Sie Folgendes tun:

  1. Stoppen Sie Ihre MongoDB-Instanz
  2. Entfernen Sie die Optionen --auth und / oder --keyfile aus Ihrer MongoDB-Konfiguration, um die Authentifizierung zu deaktivieren
  3. Starten Sie die Instanz ohne Authentifizierung
  4. Bearbeiten Sie die Benutzer nach Bedarf
  5. Starten Sie die Instanz mit aktivierter Authentifizierung neu
daveh
quelle
Auth zu entfernen war in der Tat nicht genug, danke!
Andrei
14

Ich hatte ein ähnliches Problem, als ich einen Benutzer erstellte, ohne zuerst einen Superuser hinzuzufügen. Die folgenden Schritte haben zur Lösung des Problems beigetragen:

  1. Öffnen Sie die MongoDB-Konfigurationsdatei mit sudo( sudo vi mongodb.conf).
    Die Datei befindet sich im /etc/Ordner.
  2. Kommentar "auth = true".
  3. Beenden Sie den MongoDB-Dienst ( sudo service mongod stop)
  4. Starten Sie den MongoDB-Dienst ( sudo service mongod start)
  5. Erstellen Sie dann den Superuser "root" mit dem folgenden Befehl:

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

    Als Referenz https://docs.mongodb.com/manual/reference/built-in-roles/#superuser-roles

  6. Geh zurück und entkommentiere "auth=true". Beenden und starten / starten Sie den Mongodb-Dienst neu.

Divya Krishnan
quelle
Ich kann dir nicht genug danken. Ich habe versucht, dies herauszufinden, als ich das Projekt auf den Entwickler-Server hochgeladen habe. Ich danke dir sehr! :)
Woppi
Dito. Serverfehlermeldungen sind in dieser Hinsicht spektakulär wenig hilfreich. Vielen Dank!
Tom
7

Wenn Sie einen Replikatsatz mit einemkeyfile

Sicherheit zwischen Mitgliedern des Replikatsatzes mithilfe der internen Authentifizierung

Schlüsseldatei wird für die Authentifizierung bei der Replikation verwendet.

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

Sie können diesen Befehl verwenden, um sich als Administrator bei Mongod anzumelden:

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

Nach dem Passwort können Sie Ihren Admin-Benutzer erstellen oder ändern.

Interne Rolle

__systemMongoDB weist diese Rolle Benutzerobjekten zu, die Cluster-Mitglieder darstellen, z. B. Replikatsatzmitglieder und Mongos-Instanzen. Die Rolle berechtigt den Inhaber, Maßnahmen gegen ein beliebiges Objekt in der Datenbank zu ergreifen.

Weisen Sie diese Rolle nur in Ausnahmefällen Benutzerobjekten zu, die Anwendungen oder menschliche Administratoren darstellen.

Ivanov
quelle
Wo haben Sie diese Informationen gefunden?
Oktoeder
2

Überprüfen Sie die Antworten auf diese Frage, sie könnten helfen

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

Wenn Sie weiterhin Zugriff auf den Server haben, können Sie möglicherweise auf die AdminDatenbank zugreifen.

Auf dieser Seite befindet sich noch mehr http://docs.mongodb.org/v2.4/reference/user-privileges/

Beachten Sie, dass die Version 2.6 die Funktionsweise vollständig ändert. Für 2.6 müssen Sie mehr Zeit mit http://docs.mongodb.org/manual/security/ verbringen.

Meligy
quelle
1
Wie in der Post erwähnt, ist dies die einzige Information, die ich finden konnte. Ich habe keine Erlaubnis, das zu tun
Tony
0

Sie müssen Mongo stoppen, die Admin-Dateien entfernen und dann Mongo starten

sudo service mongod stop
mv /data/admin.* .
sudo service mongod start
Tony
quelle
2
Dies zerstört die Datenbank der administrativen Benutzer und ermöglicht den Zugriff über die "localHostExcetption". Dies ist keine gute Möglichkeit, Benutzer zu administrieren, wenn Sie ein Problem haben.
Daveh