MongoDB rollenbasierte Zugriffskontrolle (RBAC) erklärt

MongoDB rollenbasierte Zugriffskontrolle (RBAC) erklärt

  • Sicherheit
6 Minuten Lesezeit Aktualisiert Jan 28, 2021

Auf einen Blick: MongoDB Role-Based Access Control (RBAC) erhöht die Sicherheit, indem es Benutzerberechtigungen über Rollen verwaltet. Es ermöglicht die Zuweisung integrierter und benutzerdefinierter Rollen, unterstützt mehrere Authentifizierungsmethoden und erfordert Konfigurationen für Zugriffskontrolle.

  • Die Zugriffskontrolle ist standardmäßig nicht aktiviert.
  • Ein Nutzer kann mehrere Rollen haben, die seinen Zugriffsbereich definieren.

Die Zugriffskontrolle von MongoDB ermöglicht es Datenbankadministratoren, MongoDB-Instanzen durch Erzwingung einer Benutzerauthentifizierung zu sichern. MongoDB unterstützt mehrere Authentifizierungsmethoden und gewährt Zugriff durch rollenbasierte Autorisierung.

Rollen sind die Fundamente in MongoDB und bieten Benutzerisolation für ein hohes Maß an Sicherheit und Verwaltung.

In diesem Artikel werfen wir einen Blick auf die häufigsten Rollen in MongoDB. Anschließend untersuchen wir das Rollenmanagement, indem wir viele gängige rollenbezogene Funktionen veranschaulichen.

Wie MongoDB RBAC funktioniert

Einem Benutzer kann eine oder mehrere Rollen zugewiesen werden, und der Umfang des Benutzerzugriffs auf das Datenbanksystem wird durch diese zugewiesenen Rollen bestimmt. Benutzer haben außerhalb der zugewiesenen Rollen keinen Zugriff auf das System.

Wichtig ist, dass die MongoDB-Zugriffskontrolle standardmäßig nicht aktiviert ist; Sie müssen sie über die security.authorization-Einstellung aktivieren.

Wenn diese Einstellung aktiviert ist, müssen sich Benutzer autorisieren, bevor sie mit der Datenbank interagieren. Benutzerrechte können eine bestimmte Ressource (Datenbank, Sammlung, Cluster) und erlaubte Aktionen auf dieser Ressource umfassen.

Eine Rolle gewährt die Berechtigung, bestimmte Aktionen auf einer bestimmten Ressource auszuführen. Ein einzelnes Benutzerkonto kann aus mehreren Rollen bestehen. Rollen können zugewiesen werden:

  • Zum Zeitpunkt der Benutzererstellung
  • Beim Aktualisieren der Rollen bestehender Nutzer

Es gibt zwei Arten von Rollen in MongoDB:

  • Eingebaute Rollen. MongoDB stellt integrierte Rollen bereit, um eine Reihe von Rechten zu bieten, die in einem Datenbanksystem häufig benötigt werden.
  • Benutzerdefinierte Rollen. Wenn integrierte Rollen nicht alle erwarteten Rechte bieten, können Datenbankadministratoren benutzerdefinierte Rollen mit der createRole-Methode definieren. Diese Rollen werden benutzerdefinierte Rollen genannt.

Als Nächstes schauen wir uns die Vielfalt der Rollen genauer an.

Eingebaute Rollen

Benutzerdefinierte Rollen

Eingebaute Rollen Mongodb

In diesem Abschnitt gehen wir die häufigsten eingebauten Rollen von MongoDB durch.

Datenbankbenutzerrollen

Datenbank-Benutzerrollen sind normale Benutzerrollen, die in regulären Datenbankinteraktionen nützlich sind.

Rolle Beschreibung
Lesen Lesen Sie alle Nicht-System-Sammlungen und die system.js-Sammlung
readWrite Sowohl Lese- als auch Schreibfunktionen auf Nicht-System-Sammlungen sowie auf der system.js-Sammlung

Rollen zur Datenbankverwaltung

Dies sind Rollen, die zur Durchführung administrativer Operationen an Datenbanken verwendet werden.

Rolle Beschreibung
dbAdmin Erledige administrative Aufgaben wie Indexierung und Erhebung von Statistiken, kann aber keine Benutzer oder Rollen verwalten
userAdmin Bietet die Möglichkeit, Rollen und Benutzer einer bestimmten Datenbank zu erstellen und zu ändern
dbOwner Dies ist der Besitzer der Datenbank, der jede beliebige Aktion ausführen kann. Es entspricht der Kombination aller oben genannten Rollen: readWrite, dbAdmin und userAdmin.

Cluster-Admin-Rollen

Diese Rollen ermöglichen es Nutzern, mit MongoDB-Clustern zu interagieren und sie zu verwalten.

Rolle Beschreibung
clusterManager Ermöglicht Management- und Überwachungsfunktionen im Cluster. Bietet Zugriff auf Konfigurationen und lokale Datenbanken, die beim Sharding und Replikation verwendet werden
clusterMonitor Bereitstellen Sie schreibgeschützten Zugriff auf MongoDB-Überwachungstools wie Cloud Manager oder Ops Manager Monitoring Agent bereit
hostManager Bietet die Möglichkeit, einzelne Server zu überwachen und zu verwalten
clusterAdmin Diese Rolle umfasst die höchste Anzahl an Cluster-Administratorrechten und ermöglicht es einem Benutzer, praktisch alles zu tun. Diese Funktionalität entspricht der Kombination aus clusterManager, clusterMonitor, hostManager und dropDatabase-Aktion.

Rollen zur Sicherung und Wiederherstellung

Dies sind die Rollen, die für das Sichern und Wiederherstellen von Daten in einer MongoDB-Instanz erforderlich sind. Sie können nur mit der Admin-Datenbank zugewiesen werden.

Rolle Beschreibung
Backup Bietet die notwendigen Rechte zum Sichern von Daten. Diese Rolle ist für MongoDB Cloud Manager und Ops Manager, Backup-Agenten und das Monogdump-Utility erforderlich.
Wiederherstellung Gewährt die Privilegien zur Durchführung von Restaurierungsaufgaben

Alle Datenbankrollen

Dies sind Datenbankrollen, die Rechte zur Interaktion mit allen Datenbanken bieten, mit Ausnahme lokaler und Konfigurationsdatenbanken.

Rolle Beschreibung
readAnyDatabase Lies jede Datenbank
readWriteAnyDatabase Gewährt allen Datenbanken Lese- und Schreibrechte
userAdminAnyDatabase Benutzer und Rollen in allen Datenbanken erstellen und verändern
dbAdminAnyDatabase Führen Sie Datenbankverwaltungsfunktionen auf allen Datenbanken durch

Superuser-Rollen

MongoDB kann sowohl direkten als auch indirekten systemweiten Superuser-Zugriff bereitstellen. Die folgenden Rollen gewähren Superuser-Rechte, die auf eine bestimmte Datenbank oder mehrere Datenbanken beschränkt sind.

  • dbOwner
  • userAdmin
  • userAdminAnyDatabase

Die wahre Superuser-Rolle ist die Root-Rolle , die systemweite Rechte für alle Funktionen und Ressourcen bereitstellt.

Für eine ausführliche Erklärung aller Benutzerrollen und -privilegien siehe bitte die offizielle MongoDB-Dokumentation.

In Situationen, in denen integrierte Rollen nicht die notwendigen Rechte für den Umfang der Zugriffsanforderungen bereitstellen oder den Umfang und die Handlungen eines Benutzers einschränken können, können Sie benutzerdefinierte benutzerdefinierte Rollen definieren.

MongoDB Role Management stellt die notwendigen Methoden zur Erstellung und Verwaltung benutzerdefinierter Rollen bereit. Die am häufigsten verwendeten Methoden zur Erstellung benutzerdefinierter Rollen sind in der folgenden Tabelle dargestellt. (Eine vollständige Liste der Methoden ist hier zu finden.)

MongoDB-Rollenmanagement

Methode Beschreibung
db.createRole() Schaffen Sie eine Rolle und ihre Privilegien
db.updateRole() Aktualisieren Sie die benutzerdefinierte Rolle
db.dropRole() Löschen Sie eine benutzerdefinierte Rolle
db.grantPrivilegesToRole() Einer Rolle neue Privilegien zuweisen
db.revokePrivilegesFromRole() Entzieht Privilegien einer Rolle

In diesem Abschnitt besprechen wir, wie man Rollen innerhalb einer MongoDB-Instanz erstellt und ändert.

Rollen werden mit folgender Syntax definiert:

    roles: [
{
role: "", db: ""
}
]

Zuweisung von Benutzerrollen bei der Benutzererstellung

Erstens erstellen Sie einen Benutzer mit Lese- und Schreibzugriff auf eine bestimmte Datenbank (Supermarkt) mit der createUser-Methode mit Rollenparameter.

Ergebnis:

    db.createUser(
{
user: "harry",
pwd: "test123",
roles: [
{
role: "readWrite",
db: "supermarket"
}
]
}
)

Ergebnis:

Dann erstellen Sie einen administrativen Benutzer für die Supermarktdatenbank mit Rollen, die Lesezugriff auf alle anderen Datenbanken sowie die Backup- und Wiederherstellungsfunktionen gewähren.

Ergebnis:

    db.createUser(
{
user: "harryadmin",
pwd: "admin12345",
roles: [
{
role: "dbOwner", db: "supermarket"
},
{
role: "readAnyDatabase", db: "admin"
},
{
role: "backup", db: "admin"
},
{
role: "restore", db: "admin"
}
]
}
)

Ergebnis:

Wie im obigen Codeblock gezeigt, können Sie Benutzer mit mehreren Rollen erstellen, die Zugang zu einer Vielzahl von Funktionen innerhalb der Datenbank bieten.

Abruf von Rolleninformationen

Mit der getRole-Methode können Benutzer Informationen über eine bestimmte Rolle erhalten. Der untenstehende Code zeigt, wie man die Details der readWriteAnyDatabase-Rolle aus der Admin-Datenbank erhält.

Ergebnis:

    db.getRole("readWriteAnyDatabase")

Ergebnis:

Um die mit dieser Rolle verbundenen Rechte zu erhalten, verwenden Sie die Option showPrivileges, indem Sie ihren Wert auf 'true' setzen. Dies kann auch in der getUser-Methode verwendet werden.

Ergebnis:

    db.getRole("readWriteAnyDatabase", { showPrivileges: true})

Ergebnis:

Identifikation zugewiesener Benutzerrollen

Die getUser-Methode ermöglicht es Ihnen, die einem bestimmten Benutzer zugewiesenen Rollen mit folgender Syntax zu identifizieren:

    db.getUser("")

Im untenstehenden Beispiel können Sie die Benutzerdetails der Nutzer "harry" und "harryadmin" mit ihren Rollen mithilfe der getUser-Methode abrufen.

Ergebnis:

    db.getUser("harry")
db.getUser("harryadmin")

Ergebnis:

Vergabe und Widerruf von Benutzerrollen

Mit den Methoden grantRolesToUser und revokeRolesFromUser können Sie die bestehenden Benutzern zugewiesenen Rollen anpassen. Diese Methoden verwenden folgende Syntax:

    db. (
"",
[
{ role: "", db: "" }
]
)

Das folgende Beispiel zeigt, wie man Benutzerrollen vergeben kann. Du fügst dem Benutzer "harry" eine neue Rolle hinzu und erhältst die notwendigen Rechte, um als Datenbankadministrator (dbAdmin) Statistiken aus der "Fahrzeug"-Tabelle zu sammeln.

Ergebnis:

    db.grantRolesToUser(
"harry",
[
{ role: "dbAdmin", db: "vehicles" }
]
)

Ergebnis:

Jetzt hast du dem Benutzer eine neue Rolle hinzugefügt, "harry". Also entfernen wir diese neu vergebene Rolle mit der Methode revieRolesFromUser .

Ergebnis:

    db.revokeRolesFromUser(
"harry",
[
{ role: "dbAdmin", db: "vehicles" }
]
)

Ergebnis:

Erstellen benutzerdefinierter Rollen

Mit der createRole-Methode können Sie eine neue Rolle entsprechend Ihren Bedürfnissen erstellen. Die grundlegende Struktur der createRole-Methode ist unten dargestellt.

Hinweis: Die Verwendung des Rollen-Parameters innerhalb der createRole-Methode ermöglicht es Ihnen, die Rechte anderer Rollen innerhalb der benutzerdefinierten Rolle zu erben. Wenn keine weiteren Rechte benötigt werden, müssen Sie beim Erstellen einer benutzerdefinierten Rolle einen leeren Rollenparameter definieren.

    db.createRole(
{
role: "",
privileges: [
{
resource: { db: "", collection: ""},
actions: [ "" ]
}
],
roles: [
{ role: "", db: "" } ] } )

Um eine benutzerdefinierte Rolle allen Datenbanken oder Sammlungen zuzuordnen, können Sie die Ressourcen mit leeren Doppelanführungszeichen angeben, wie unten gezeigt.

    resource: { db: "", collection: ""}

Im nächsten Codeblock erstellst du eine Rolle, die den Zugriff eines Benutzers auf eine bestimmte Datenbanksammlung (Inventarsammlung der Supermarktdatenbank) einschränkt. Sie begrenzt die Benutzeraktionen, um Befehle zu finden und zu aktualisieren, ohne weitere Privilegien zu erben.

Ergebnis:

    db.createRole(
{
role: "inventoryeditor",
privileges: [
{
resource: { db: "supermarket", collection: "inventory"},
actions: [ "find", "update" ]
}
],
roles: [ ]
}
)

Ergebnis:

Wir können die benutzerdefinierten Rollen mit dem isBuiltin-Parameter identifizieren. Die inventoryeditor-Rolle hat false für diesen Parameter, was ihn als nicht-integrierte Rolle anzeigt.

Jetzt weißt du, wie man eine eigenständige, benutzerdefinierte Rolle erstellt. Als Nächstes erstellst du eine benutzerdefinierte Rolle, die einige Rechte von einer anderen eingebauten Rolle erbt.

Im untenstehenden Codeblock erstellst du eine Inventorymanager-Rolle mit allen CURD-Rechten und erbst die Rechte von der userAdmin-Rolle .

Ergebnis:

    db.createRole(
{
role: "inventorymanager",
privileges: [
{
resource: { db: "supermarket", collection: "inventory"},
actions: [ "find", "update", "insert", "remove" ]
}
],
roles: [
{ role: "userAdmin", db: "supermarket" }
]
}
)

Ergebnis:

Wenn du die Inventory Manager-Rolle mit der getRole-Methode überprüfst, werden die Details der Rolle angezeigt, einschließlich der vererbten Berechtigungen.

Benutzerdefinierte Rollen an Benutzer zuweisen

Sie können einem neuen Benutzer benutzerdefinierte Rollen zuweisen oder die Rollen eines bestehenden Benutzers aktualisieren, ähnlich wie bei einer eingebauten Rolle. Lassen Sie uns einen neuen Benutzer mit der Inventarmanager-Rolle erstellen und einen bestehenden Benutzer mit der Inventoryeditor-Rolle aktualisieren in den folgenden Beispielen.

Einen neuen Nutzer erstellen:

Ergebnis:

Vergabe neuer Rollen:

Ergebnis:

    db.createUser(
{
user: "managerjerry",
pwd: "manager123",
roles: [
{
role: "inventorymanager",
db: "admin"
}
]
}
)

Ergebnis:

Vergabe neuer Rollen:

    db.grantRolesToUser(
"repairmanager",
[
{ role: "inventoryeditor", db: "admin" }
]
)

Ergebnis:

Aktualisieren und Löschen benutzerdefinierter Rollen

Sie können die benutzerdefinierten Rollen mit der Methode updateRole aktualisieren und die Rollen mit der dropRole-Methode löschen.

Aktualisieren wir die Rolle inventoryeditor mit einem zusätzlichen Privileg, um Dokumente innerhalb der angegebenen Sammlung zu erstellen, im untenstehenden Beispiel.

Ergebnis:

    db.updateRole(
"inventoryeditor",
{
privileges: [
{
resource: { db: "supermarket", collection: "inventory"},
actions: [ "find", "update", "insert" ]
}
],
roles: [ ]
}
)

Ergebnis:

Das Wichtigste, das man beim Aktualisieren der Rollen beachten sollte, ist, dass alte Werte in den Berechtigungs- und Rollenarrays vollständig ersetzt werden. Daher muss man die vollständigen Arrays mit den Modifikationen bereitstellen, wenn man eine benutzerdefinierte Rolle aktualisiert.

Die dropRole-Methode verfügt über eine einzige Funktionalität, um eine benutzerdefinierte Rolle zu entfernen. Sie können die Rolle inventoryeditor aus der Datenbank entfernen, wie unten gezeigt.

Ergebnis:

    db.dropRole("inventoryeditor")

Ergebnis:

Der obige Screenshot zeigt, dass die Rollenlöschung erfolgreich war, und wenn wir versuchen, die gelöschte Rolle abzurufen, wird ein Nullwert zurückgegeben. Wenn eine Rolle gelöscht wird, betrifft das alle mit der gelöschten Rolle verbundenen Benutzer und widerrufen alle von der benutzerdefinierten Rolle gewährten Privilegien.

Früher hast du die Rolle Inventoryeditor dem Benutzer RepairManager zugewiesen. Wenn du diese Benutzerdaten überprüfst, kannst du feststellen, dass die Rolle "inventoryeditor" nicht mehr dem Benutzer "repairmanager" zugewiesen ist.

Ergebnis:

    db.getUser("repairmanager")

Ergebnis:

In Situationen, in denen einem Benutzer nur eine benutzerdefinierte Rolle zugewiesen wird, wenn diese Rolle gelöscht wird, führt dies zu einem leeren Rollenarray, was effektiv alle Benutzerrechte verweigert.

Sie können dieses Szenario überprüfen, indem Sie die Rolle Inventorymanager löschen und die Benutzerdaten von managerjerry erhalten. Dies führt zu einem leeren Rollen-Array für den User ManagerJerry, wie unten durch den Vergleich der Benutzerdaten vor und nach der Rollenlöschung demonstriert wird.

Ergebnis:

    db.getUser("managerjerry")
db.dropRole("inventorymanager")
db.getUser("managerjerry")

Ergebnis:

Daher ist es von größter Bedeutung, dass Sie prüfen, ob die Rollen mit Benutzern verknüpft sind und wie sich dies auf den Funktionsumfang des Benutzers auswirkt, bevor Sie benutzerdefinierte Rollen löschen.

Abschließend kann die dropRole-Methode nur benutzerdefinierte Rollen löschen. Wenn Sie versuchen, eine eingebaute Rolle mit dieser Methode zu löschen, führt dies zu einem Fehler, wie unten gezeigt.

Damit ist dieser umfassende Blick auf die Rollen und das Rollenmanagement von MongoDB abgeschlossen.

Verwandte Literatur

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus Sicherheit

Abonnieren Sie The Brief

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Danke

Sie haben The Brief abonniert
Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.