MongoDB "root" Benutzer

Antworten:

92

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 adminDatenbank 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.createUserwie db.addUserentfernt 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.

WiredPrairie
quelle
5
addUser ist veraltet seit 2.6 auf 3.2.3 Ich habe db.createUser
jorfus
1
von diesem LinkChanged 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.
Rocksteady
Einige Fehler: db.createUser ({Benutzer: "dev1", pwd: "pass", Rollen: [{Rolle: "userAdminAnyDatabase", db: "xxxxxxx"}]}); 2018-02-26T16: 59: 28.688 + 0500 E QUERY [thread1] Fehler: Benutzer konnte nicht hinzugefügt werden: Keine Rolle mit dem Namen userAdminAnyDatabase @ xxxxxx: _getErrorWithCode@src/mongo/shell/utils.js: 25: 13 DB.prototype. createUser@src/mongo/shell/db.js: 1267: 15 @ (Shell): 1: 1
Ashfaq Muhammad
1
Ich würde die Antwort von @Jerry der vorziehen.
89

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 !!!

JERRY
quelle
4
danke - die admin Datenbank ist die Verbindungsdatenbank hier
danday74
Ich sehe, dass einige Leute 'db' in der Eigenschaft 'role' verwenden. Was ist, wenn wir keine 'db' haben? Ich habe einen Benutzer erstellt und die Rolle 'root' zugewiesen, aber db: 'admin'. Jetzt kann ich mit Mungo nicht mehr auf andere Sammlungen zugreifen. Können Sie zeigen, wie man das löst, da ich mit dieser Art von Technologie noch nicht vertraut bin?
Chourn Solidet
Wenn Sie den Befehl von --evalausführen, müssen Sie ihn db.getSiblingDB("admin")zuvor verwenden createUser. Andernfalls wird der Administrator-Root-Benutzer in der Standardtestdatenbank erstellt, was normalerweise nicht der Fall ist.
JustAMartin
26

Mongodb Benutzerverwaltung:

Rollenliste:

read
readWrite
dbAdmin
userAdmin
clusterAdmin
readAnyDatabase
readWriteAnyDatabase
userAdminAnyDatabase
dbAdminAnyDatabase

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:

db.getUsers();

Weitere Informationen: https://docs.mongodb.com/manual/reference/security/#read

KARTHIKEYAN.A
quelle
db.createUser ({Benutzer: "dev1", pwd: "pass", Rollen: [{Rolle: "userAdminAnyDatabase", db: "xxxxxxx"}]}); 2018-02-26T16: 59: 28.688 + 0500 E QUERY [thread1] Fehler: Benutzer konnte nicht hinzugefügt werden: Keine Rolle mit dem Namen userAdminAnyDatabase @ xxxxxx: _getErrorWithCode@src/mongo/shell/utils.js: 25: 13 DB.prototype. createUser@src/mongo/shell/db.js: 1267: 15 @ (Shell): 1: 1
Ashfaq Muhammad
Abfrage: db.createUser({ user: "dev1", pwd: "pass", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }); Ergebnis: Successfully added user: { "user" : "user", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
KARTHIKEYAN.A
Haben Sie eine userAdminAnyDatabase-Regel in Ihrem System erstellt oder war sie bereits vorhanden? Warum ist es nicht in meinem System. Ich benutze centOS 7
Ashfaq Muhammad
6

Es gibt eine Superuser-Rolle: root , eine integrierte Rolle , erfüllt möglicherweise Ihre Anforderungen.

Ahyong
quelle
2
Ja, und nur zur Veranschaulichung, die rootRolle wurde in MongoDB 2.6 eingeführt.
SolarBear
2

Ich habe viele dieser Antworten bemerkt. Verwenden Sie diesen Befehl:

use admin

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.updateUserBefehl, albiet, der normalerweise zum Aktualisieren des Benutzerkennworts verwendet wird.

Donato
quelle
-1

"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

Lakmal Vithanage
quelle