MongoDb ist standardmäßig nicht authentifiziert. Sie können jedoch das Äquivalent eines Root- / Superusers erstellen, indem Sie die "any" -Rollen für einen bestimmten Benutzer in der admin
Datenbank verwenden.
Etwas wie das:
use admin
db.addUser( { user: "<username>",
pwd: "<password>",
roles: [ "userAdminAnyDatabase",
"dbAdminAnyDatabase",
"readWriteAnyDatabase"
] } )
Update für 2.6+
Obwohl es in 2.6 einen neuen Root- Benutzer gibt, stellen Sie möglicherweise fest, dass er Ihren Anforderungen nicht entspricht, da er noch einige Einschränkungen aufweist:
Bietet Zugriff auf die Vorgänge und alle Ressourcen der Rollen readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase und clusterAdmin zusammen.
root enthält keinen Zugriff auf Sammlungen, die mit dem System beginnen. Präfix.
Update für 3.0+
Verwenden Sie db.createUser
wie db.addUser
entfernt wurde.
Update für 3.0.7+
root hat nicht mehr die oben genannten Einschränkungen.
Der Stamm verfügt über die Aktion "Berechtigung validieren" auf dem System. Sammlungen. Bisher enthält root keinen Zugriff auf Sammlungen, die mit dem System beginnen. anderes Präfix als system.indexes und system.namespaces.
Changed in version 3.0.7: The root has validate action on system. collections. Previously, root does not include any access to collections that begin with the system. prefix other than system.indexes and system.namespaces.
Die beste Superuser-Rolle wäre die Wurzel. Die Syntax lautet:
use admin db.createUser( { user: "root", pwd: "password", roles: [ "root" ] })
Weitere Informationen finden Sie in den integrierten Rollen.
Hoffe das hilft !!!
quelle
--eval
ausführen, müssen Sie ihndb.getSiblingDB("admin")
zuvor verwendencreateUser
. Andernfalls wird der Administrator-Root-Benutzer in der Standardtestdatenbank erstellt, was normalerweise nicht der Fall ist.Mongodb Benutzerverwaltung:
Rollenliste:
Benutzer erstellen:
db.createUser(user, writeConcern) db.createUser({ user: "user", pwd: "pass", roles: [ { role: "read", db: "database" } ] })
Benutzer aktualisieren:
db.updateUser("user",{ roles: [ { role: "readWrite", db: "database" } ] })
Benutzer löschen:
db.removeUser("user")
oder
db.dropUser("user")
Benutzer anzeigen:
Weitere Informationen: https://docs.mongodb.com/manual/reference/security/#read
quelle
db.createUser({ user: "dev1", pwd: "pass", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
Ergebnis:Successfully added user: { "user" : "user", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
Es gibt eine Superuser-Rolle: root , eine integrierte Rolle , erfüllt möglicherweise Ihre Anforderungen.
quelle
root
Rolle wurde in MongoDB 2.6 eingeführt.Ich habe viele dieser Antworten bemerkt. Verwenden Sie diesen Befehl:
welches zur Admin-Datenbank wechselt. Zumindest in Mongo v4.0.6 wird beim Erstellen eines Benutzers im Kontext der Admin-Datenbank ein Benutzer erstellt mit
"_id" : "admin.administrator"
:> use admin > db.getUsers() [ ] > db.createUser({ user: 'administrator', pwd: 'changeme', roles: [ { role: 'root', db: 'admin' } ] }) > db.getUsers() [ { "_id" : "admin.administrator", "user" : "administrator", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } ]
Ich betone
"admin.administrator"
, denn ich habe eine Mongoid-Anwendung (Mongodb Ruby Adapter) mit einer anderen Datenbank als admin und verwende den URI, um auf die Datenbank in meiner mongoid.yml-Konfiguration zu verweisen:development: clients: default: uri: <%= ENV['MONGODB_URI'] %> options: connect_timeout: 15 retry_writes: false
Dies verweist auf die folgende Umgebungsvariable:
export MONGODB_URI='mongodb://administrator:[email protected]/mysite_development?retryWrites=true&w=majority'
Beachten Sie, dass die Datenbank mysite_development und nicht admin ist. Wenn ich versuche, die Anwendung auszuführen, wird die Fehlermeldung "Benutzeradministrator (Mechanismus: scram256) ist nicht berechtigt, auf mysite_development zuzugreifen" angezeigt.
Also kehre ich zur Mongo-Shell zurück, lösche den Benutzer, wechsle zur angegebenen Datenbank und erstelle den Benutzer neu:
$ mongo > db.dropUser('administrator') > db.getUsers() [] > use mysite_development > db.createUser({ user: 'administrator', pwd: 'changeme', roles: [ { role: 'root', db: 'admin' } ] }) > db.getUsers() [ { "_id" : "mysite_development.administrator", "user" : "administrator", "db" : "mysite_development", "roles" : [ { "role" : "root", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } ]
Beachten Sie, dass _id und db geändert wurden, um auf die spezifische Datenbank zu verweisen, von der meine Anwendung abhängt:
"_id" : "mysite_development.administrator", "db" : "mysite_development",
Nachdem ich diese Änderung vorgenommen hatte, verschwand der Fehler und ich konnte in meiner Anwendung eine Verbindung zu MongoDB herstellen.
Zusätzliche Hinweise:
In meinem obigen Beispiel habe ich den Benutzer gelöscht und den Benutzer im richtigen Datenbankkontext neu erstellt. Wenn Sie den Benutzer bereits im richtigen Datenbankkontext erstellt, ihm jedoch die falschen Rollen zugewiesen haben, können Sie dem Benutzer eine integrierte Mongodb-Rolle zuweisen:
db.grantRolesToUser('administrator', [{ role: 'root', db: 'admin' }])
Es gibt auch einen
db.updateUser
Befehl, albiet, der normalerweise zum Aktualisieren des Benutzerkennworts verwendet wird.quelle
"userAdmin ist effektiv die Superuser-Rolle für eine bestimmte Datenbank. Benutzer mit userAdmin können sich alle Berechtigungen gewähren. userAdmin autorisiert einen Benutzer jedoch nicht explizit für Berechtigungen, die über die Benutzerverwaltung hinausgehen." von dem Link, den Sie gepostet haben
quelle