2015-10-02 18 views
6

Ich versuche, einige Einschränkungen auf meinem MongoDB-Server zu implementieren:MongoDB Berechtigungen: der Zugriff auf zwei Datenbanken

Zwei Datenbanken auf meinem Server sollen in Bezug auf Löschen/Drop-Operationen beschränkt werden - nur ein spezielles Benutzerkonto sollte erlaubt sein tun Sie dies. Alle anderen Datenbank sollte vollkommen uneingeschränkt sein (natürlich mit Ausnahme der Admin-Datenbank):

Ich habe versucht, diese Situation zu modellieren zwei Benutzer mit:

 | database A & B | all the other databases | 
--------------------------------------------------------- 
user a | read & write |  read & write  | 
user b |  read-only  |  read & write  | 

machen alle, alle Datenbanken lesen ist einfach, die readAnyDatabase Rolle verwenden. Allerdings Modellierung dieses Benutzers b kann nur lesen, Datenbank A & B aber & gelesen Schreibzugriff auf alle anderen Datenbanken (einschließlich der Datenbanken, die später erstellt werden) gibt mir Kopfschmerzen.

Wie kann dieses Sicherheitsmodell in MongoDB implementiert werden?

+1

Also kurz gesagt Sie 'Benutzer B' begrenzte Funktion zu haben, die nur auf bestimmten DB gelesen wird? –

+0

Ja. Gleichzeitig sollte dieser Benutzer jedoch vollständige Berechtigungen für alle anderen Datenbanken haben, die derzeit existieren und in Zukunft existieren werden (einschließlich derjenigen, die von Benutzer b erstellt wurden). – Robert

Antwort

0

allererst ermöglichen Authentifizierung in Ihrer mongodb.conf Datei

auth = true 

Erstellen Sie eine Datenbank perm Benutzerberechtigungen für das Halten, die wir unten gehen zu erstellen.

use perm 

dann erstellen userb mit Nur-Lese-Berechtigungen für DatabaseA und DatabaseB

db.createUser(
    { 
     user: "userb", 
     pwd: "12345", 
     roles: [ 
     { role: "read", db: "DatabaseA" }, 
     { role: "read", db: "DatabaseB" } 
     ] 
    } 
) 

userb nur alle Datenbanken Zugriff auf userb wird lesen DatabaseA und DatabaseB Ruhe gelassen werden read-write

Jetzt sein userb kann sich mit dem folgenden Befehl einloggen

mongo --port 27017 -u userb -p 12345 --authenticationDatabase perm 
+0

Es hat für mich funktioniert. Vielen Dank. –

+1

userb hat Lesezugriff auf DatabaseA und DatabaseB, aber was ist mit den anderen Datenbanken? In meiner Frage schrieb ich, dass ich userb brauche um auf die anderen Datenbanken zugreifen zu können. Mit dem Userb, wie er vom angezeigten Befehl erstellt wurde, funktioniert dies nicht, da userb keinen Zugriff auf eine andere Datenbank hat. – Robert

2

Es ist nicht möglich.

können Sie mehrere Rollen kombinieren und aus mehreren Datenbanken erben, aber:

Wenn eine Rolle gewährt, erhält ein Benutzer alle Vorzüge dieser Rolle. Ein Benutzer kann mehrere Rollen gleichzeitig haben. In diesem Fall erhält der Benutzer die Union aller Privilegien der jeweiligen Rollen.

-

Rollen gewähren immer Privilegien und nie Zugang zu beschränken. Wenn zum Beispiel ein Benutzer und readWriteAnyDatabase Rollen in einer Datenbank lesen kann, hat der größere Zugriff.

Sie finden diese Absätze in .

Um Lesezugriff auf alle zukünftigen Datenbanken zu geben, müssen Sie die Rolle readWriteAnyDatabase auf Benutzerb setzen. Das bedeutet, dass Sie für die Datenbanken A und B nicht auf die Rolle read herunterstufen können.

Ich fürchte, Sie müssen die Rollen für die neuen dbs manuell festlegen.

Verwandte Themen