Ich habe einen Administrator für Mongo mithilfe der folgenden Anweisungen erstellt:
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
Vom Mongo-Client aus kann ich mich anscheinend authentifizieren:
> use admin
switched to db admin
> db.auth('admin','SECRETPASSWORD');
1
>
Aber ich kann mich nicht anders verbinden. Beispielsweise:
mongo -u admin -p SECRETPASSWORD
gibt den Fehler:
JavaScript execution failed: Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:L228
Ich habe auth = true
in etc/mongod.conf
.
Was vermisse ich?
db.changeUserPassword("admin", "password")
Passwort für jede Datenbank ändern.Antworten:
Die Authentifizierung wird auf Datenbankebene verwaltet. Wenn Sie versuchen, über eine Datenbank eine Verbindung zum System herzustellen, sucht Mongo tatsächlich nach den Anmeldeinformationen, die Sie in der Sammlung angeben
<database>.system.users
. Wenn Sie also versuchen, eine Verbindung zu "test" herzustellen, sucht es nach den Anmeldeinformationen intest.system.users
und gibt einen Fehler zurück, da es sie nicht finden kann (da sie in gespeichert sindadmin.system.users
). Das Recht, von allen Datenbanken zu lesen und zu schreiben, bedeutet nicht, dass Sie sich direkt mit ihnen verbinden können.Sie müssen zuerst eine Verbindung zur Datenbank herstellen, in der sich die Anmeldeinformationen befinden. Versuchen:
Weitere Informationen finden Sie unter http://docs.mongodb.org/manual/reference/privilege-documents/.
quelle
Ich erhielt auch diesen Fehler. Ich musste lediglich die Datenbank angeben, in der die Benutzerauthentifizierungsdaten gespeichert waren:
Update 18. November 2017:
ist eine bessere Lösung. Mongo fordert Sie zur Eingabe Ihres Passworts auf. Auf diese Weise werden Sie Ihr Klartext-Passwort nicht in den Shell-Verlauf aufnehmen, was nur eine schreckliche Sicherheitspraxis ist.
quelle
Möglicherweise müssen Sie Ihre Mongo-Shell aktualisieren. Ich hatte lokal Version 2.4.9 der Mongo-Shell und beim Versuch, eine Verbindung zu einer Mongo 3-Datenbank herzustellen, ist dieser Fehler aufgetreten. Ein Upgrade der Shell-Version auf 3 löste das Problem.
quelle
Ich weiß, dass dies offensichtlich erscheint, aber ich musste auch ein einfaches Anführungszeichen um das U / N und das P / W verwenden, bevor es funktionierte
quelle
mongo -u <myuser> -p <mypasswd
nicht funktioniert hat. Warum machtadmin
es hier einen Unterschied?In MongoDB 3.0 werden jetzt mehrere Authentifizierungsmechanismen unterstützt.
Wenn Sie mit einer neuen 3.0-Datenbank begonnen hätten, in der neue Benutzer erstellt wurden, wurden diese mit SCRAM-SHA-1 erstellt.
Sie benötigen also einen Treiber, der diese Authentifizierung unterstützt:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers
Wenn Sie eine Datenbank mit vorhandenen Benutzerdaten von 2.x aktualisieren würden, würde diese weiterhin MONGODB-CR verwenden, und die Benutzerauthentifizierungsdatenbank müsste aktualisiert werden:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram
Jetzt müssen Sie eine Verbindung zu MongoDB 3.0 mit Benutzern herstellen, die mit SCRAM-SHA-1 erstellt wurden, um die Authentifizierungsdatenbank (über den Befehlszeilen-Mongo-Client) anzugeben und andere Mechanismen zu verwenden, wenn Sie einen Treiber verwenden.
$> mongo -u USER -p PASSWORD --authenticationDatabase admin
In diesem Fall wird zur Authentifizierung die Datenbank "admin" verwendet, die auch die Standardeinstellung ist.
quelle
Es scheint, dass das Problem darin besteht, dass ein Benutzer, der mit der in den Mongo-Dokumenten beschriebenen Methode erstellt wurde, keine Berechtigung zum Herstellen einer Verbindung mit der Standarddatenbank (Test) hat, selbst wenn dieser Benutzer mit den Rollen "userAdminAnyDatabase" und "dbAdminAnyDatabase" erstellt wurde.
quelle
Gehen Sie zur Terminal-Shell und geben Sie ein
mongo
.Geben Sie dann ein
use db_name
.Geben Sie dann Folgendes ein:
Probiere auch:
db.getUsers()
quelle
mongo 'mongodb://localhost:27017/admin' -u admin -p
2. Wechseln Sie dann zur Zieldatenbank:> use targetDb
3.> db.createUser(...)
Eine andere Möglichkeit: Als Sie den Benutzer erstellt haben, haben Sie möglicherweise versehentlich
use
eineadmin
andere als die gewünschte Datenbank erstellt . Sie müssen--authenticationDatabase
die Datenbank festlegen , unter der der Benutzer tatsächlich erstellt wurde.mongodb
scheint Sietest
beim Öffnen der Shell standardmäßig in die Datenbank aufzunehmen, sodass Sie schreiben müssen,--authenticationDatabase test
anstatt--authenticationDatabase admin
versehentlich zuuse
laufen,test
als Sie ausgeführt wurdendb.createUser(...)
.Angenommen, Sie haben Zugriff auf den Computer, auf dem die Mongodb-Instanz ausgeführt wird, können Sie die Autorisierung deaktivieren
/etc/mongod.conf
(ausauthorization
Sicherheitsgründen verschachtelt auskommentieren ), den Server neu starten und dann Folgendes ausführen:Und Sie könnten so etwas bekommen:
Beachten Sie, dass der
db
Wert gleich isttest
. Das liegt daran, dass ich beim Erstellen des Benutzers nicht zuerstuse admin
oder ausgeführt habeuse desiredDatabaseName
. So können Sie den Benutzer mit löschendb.dropUser("myusername")
und dann einen anderen Benutzer unter Ihrer gewünschten Datenbank erstellen, wie folgt:Hoffentlich hilft das jemandem, der in meiner Position als Noob war, mit diesem Zeug.
quelle
Im Gegensatz zu MYSQl und den meisten RDBMS hat MongoDB ein anderes Setup.
Der eingebaute Basisauthentifizierungsbenutzer ist nicht bereits eingerichtet. Sie müssen ihn manuell einrichten. Sie müssen zur Mongo.conf gehen und die Autorisierung aktivieren. Wenn Sie dies vorsichtig tun, wird beim Starten Ihrer Mongo-Instanz ein Fehler ausgegeben. Sie überprüfen dann, ob Ihr Mongo-Server gestartet wurde oder nicht.
Der nächste Schritt ist das Aktivieren der Autorisierung in Mongo als Benutzer: -
Wir müssen einen Benutzer erstellen, der Root-Zugriff hat, und die Mongo Auth-Konfiguration ändern.
Wechseln Sie zur Admin-Datenbank: -
Benutzer mit Root-Berechtigung erstellen: -
Ändern Sie Ihre mongo.conf in Autorisierung aktivieren: -
Bitte gehen Sie diese Schritt-für-Schritt-Anleitung durch, um die Authentifizierung in MongoDB einzurichten.
quelle
Dies ist eine Art spezifischer Fall, aber für den Fall, dass jemand mit meinem Problem hierher kommt:
In MongoHQ wird ein Feld mit dem Namen "Passwort" angezeigt, aber es ist eigentlich nur der Hash des Passworts. Sie müssen einen neuen Benutzer hinzufügen und das Kennwort an einer anderen Stelle speichern (da MongoHQ es Ihnen nicht anzeigt).
quelle
Der richtige Weg, um sich bei Mongo Shell anzumelden, ist
mongo localhost: 27017 -u 'uuuuu' -p '> xxxxxx' --authenticationDatabase dbname
quelle
Sie können auch Folgendes versuchen: -
Fand es in diesem Beitrag
Hier kann der localhost offensichtlich ein anderer Host sein und der / admin kann eine andere Datenbank sein, auf die die Authentifizierung angewendet wurde
quelle
Suchen Sie nach der Mongo-Version des Clients, von dem aus wir eine Verbindung zum Mongo-Server herstellen.
Mein Fall, Mongo Server war von Version Mongo4.0.0, aber mein Client war von Version 2.4.9. Aktualisieren Sie die Mongo-Version, um Mongo Cli zu aktualisieren.
quelle