Ich versuche, meiner MongoDB eine Autorisierung hinzuzufügen.
Ich mache das alles unter Linux mit MongoDB 2.6.1.
Meine mongod.conf-Datei hat das alte Kompatibilitätsformat
(so kam es mit der Installation).
1) Ich habe einen Administrator erstellt, wie hier in (3) beschrieben.
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
2) Ich habe dann mongod.conf bearbeitet, indem ich diese Zeile auskommentiert habe
auth = true
3) Schließlich habe ich den Mongod-Dienst neu gestartet und versucht, mich anzumelden mit:
/usr/bin/mongo localhost:27017/admin -u sa -p pwd
4) Ich kann eine Verbindung herstellen, aber dies wird beim Verbinden angezeigt.
MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:47:16 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
5) Nun scheint es, dass dieser sa
Benutzer, den ich erstellt habe, überhaupt keine Berechtigungen hat.
root@test02:~# mc
MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:57:03 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
[admin] 2014-05-29 17:57:03.011 >>> use admin
switched to db admin
[admin] 2014-05-29 17:57:07.889 >>> show collections
2014-05-29T17:57:10.377-0400 error: {
"$err" : "not authorized for query on admin.system.namespaces",
"code" : 13
} at src/mongo/shell/query.js:131
[admin] 2014-05-29 17:57:10.378 >>> use test
switched to db test
[test] 2014-05-29 17:57:13.466 >>> show collections
2014-05-29T17:57:15.930-0400 error: {
"$err" : "not authorized for query on test.system.namespaces",
"code" : 13
} at src/mongo/shell/query.js:131
[test] 2014-05-29 17:57:15.931 >>>
Was ist das Problem? Ich habe diesen ganzen Vorgang dreimal wiederholt und
ich glaube, ich habe alles wie in den MongoDB-Dokumenten angegeben gemacht. Aber es funktioniert nicht.
Ich hatte erwartet, dass dieser sa
Benutzer zu allem berechtigt ist, damit
er andere Benutzer erstellen und ihnen spezifischere Berechtigungen erteilen kann.
Antworten:
Ich kratzte mich auch am Kopf wegen des gleichen Problems, und alles funktionierte, nachdem ich die Rolle als Root festgelegt hatte, als ich den ersten Administrator hinzufügte.
Wenn Sie den
admin
Benutzer bereits erstellt haben , können Sie die Rolle folgendermaßen ändern:Eine vollständige Referenz zu den Authentifizierungseinstellungen finden Sie in den Schritten, die ich nach stundenlanger Recherche über das Internet zusammengestellt habe.
quelle
userAdminAnyDatabase
stattroot
?db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
, und das macht mich verwirrt. Ich bin nicht berechtigt, einen Befehl auszuführen, und dennoch kann ich einen Befehl ausführen, um mich selbst zu rooten, und diesen Befehl dann ausführen. Sehr seltsam: Sdb.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
nicht funktioniert hat, stellen Sie sicher, dass Sie zurück zuuse admin
... hatten das gleiche Problem, nachdem ich zurückgeschaltet hatte, funktionierte es wie ein ZauberEs ist ein bisschen verwirrend - ich glaube, Sie müssen sich readWrite gewähren, um eine Datenbank abzufragen. Ein Benutzer mit dbadmin oder useradmin kann die Datenbank verwalten (einschließlich der Gewährung zusätzlicher Rechte), jedoch keine Abfragen ausführen oder Daten schreiben.
Also gib dir readWrite und es sollte dir gut gehen -
http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
quelle
Vielleicht ist ein kurzes Beispiel für das Ändern eines aktuellen Benutzers für jemanden hilfreich. Das habe ich eigentlich gesucht.
Nach dem Rat von @JohnPetrone habe ich hinzugefügt readwrite Rolle meines Admin - Benutzer mit grantRolesToUser
quelle
Sie können Folgendes versuchen: Die Verwendung des Flags --authenticationDatabase hilft.
quelle
Ich weiß, dass diese Antwort in diesem Thread sehr spät kommt, aber ich hoffe, Sie überprüfen sie.
Der Grund, warum Sie diesen Fehler erhalten, basiert auf der spezifischen Rolle, die Sie dem Benutzer zugewiesen haben, die Sie inzwischen gesammelt haben, und darauf, diesem Benutzer die Rolle zu geben
root
zuweisen, wird Ihr Problem gelöst. Sie müssen jedoch zunächst verstehen, was diese Rollen genau tun, bevor Sie sie gewähren an Benutzer.Im Lernprogramm haben Sie dem Benutzer die
userAdminAnyDatabase
Rolle zugewiesen, mit der er die Benutzer aller Ihrer Datenbanken verwalten kann. Was Sie mit Ihrem Benutzer tun wollten, lag außerhalb seiner Rollendefinition.Die
root
Rolle hat diese Rolle in ihrer Definition enthalten, sowie diereadWriteAnyDatabase
,dbAdminAnyDatabase
und andere Rollen es einen Super - User zu machen (im Grunde , weil man alles damit machen kann).Sie können die Rollendefinitionen überprüfen, um festzustellen, welche Rollen Sie Ihren Benutzern zum Ausführen bestimmter Aufgaben geben müssen. https://docs.mongodb.com/manual/reference/built-in-roles/ Es ist nicht ratsam, alle Benutzer zu Super-Benutzern zu machen :)
quelle
show collections
), sollten Sie ihm diese Fähigkeit und sonst nichts gebenroles: [ { role: "read", db: "admin" } ]
. Beachten Sie, dass die Rolle hier gelesen wird, datenbankspezifisch ist und Sie nichts anderes tun können. Überprüfen Sie heraus diesen Link für andere Rollen docs.mongodb.com/manual/reference/built-in-rolesEs ist eine einfache Frage.
oder
quelle
Ich hatte hier in einer Windows-Umgebung ein ähnliches Problem: Ich habe Bitnami DreamFactory installiert und es installiert auch eine andere MongoDb, die beim Systemstart gestartet wird. Ich habe meinen MongoDbService ausgeführt (der fehlerfrei gestartet wurde), aber nachdem ich viel Zeit verloren hatte, bemerkte ich, dass ich tatsächlich eine Verbindung zum MongoDb-Service von Bitnami herstellte. Bitte überprüfen Sie, ob auf Ihrem Server keine weitere Instanz von mongoDB ausgeführt wird.
Viel Glück!
quelle
Beachten Sie außerdem, dass
mongod
Sie solche Fehler "Berechtigung verweigert" erhalten können , wenn Ihr Mongo-Shell-Client keine ordnungsgemäße Verbindung zur Instanz herstellt.Stellen Sie sicher, dass Ihr Client eine Verbindung öffnet, indem Sie den Verbindungsport überprüfen, aber auch, dass der Port, in dem Sie verwenden,
mongod
nicht verwendet wird. Sie können einen anderen Port festlegen, indem Sie den--port <port>
Parameter sowohl in der Shell als auch im Prozess verwenden.quelle
Ich hatte dieses Problem, weil der Hostname in meinem MongoDB-Kompass stattdessen für mein Projekt auf admin zeigte. Behoben durch Hinzufügen des / Projektnamens nach dem Hostnamen :) Versuchen Sie Folgendes:
Verwenden Sie dieselbe Verbindungszeichenfolge auch in Ihrem Code:
Viel Glück.
quelle
quelle
Einverstanden, dass Sie sich bei admin db authentifizieren müssen und mindestens eine Rolle mit korrekten Berechtigungen benötigen, die eine "lokale Host-Ausnahme" von DB vermeiden würde (dies gilt für lokal gehostete MongoDBs), obwohl Sie alles an Ort und Stelle haben Wenn Sie bei fast jedem Befehl nicht autorisierte Ausnahmen erhalten, während Sie auf mongoDB zugreifen, das mit Mongo Atlas erstellt wurde , können Sie hier den Grund kennen, warum:
/dba/219003/not-authorized-on-admin-to-execute-command-mongodb-atlas-m0-free-tier-cluster?newreg=471a9a26108243d78d4ca74a87e7a115
und überprüfen Sie dies auch, wenn Sie mongoDB auf mongo Atlas gehostet haben :
https://docs.atlas.mongodb.com/unsupported-commands/
quelle
quelle
Dies kann daran liegen, dass Sie noAuth = true in mongodb.conf nicht festgelegt haben
Nachdem Sie dies eingestellt haben, starten Sie den Dienst mit neu
Service Mongod Neustart
quelle