Frage

Ich bin derzeit mit MongoDB Anwendungsprotokolle aufzeichnen, und während ich ganz zufrieden bin sowohl mit der Leistung und mit in der Lage, beliebige strukturierte Daten in Protokolldatensätze zu entleeren, ich bin beunruhigt durch die Veränderlichkeit der Protokolldatensätze einmal gespeichert .

In einer traditionellen Datenbank würde ich die Zuschüsse für meine Logtabellen strukturieren, so dass die Anwendung Benutzer hatte INSERT und SELECT-Privilegien, aber aktualisieren oder löschen nicht. In ähnlicher Weise in CouchDB, ich könnte eine Update-Validator Funktion schreiben, die alle Versuche zurückgewiesen ein vorhandenes Dokument zu ändern.

Allerdings habe ich es nicht gelungen, einen Weg finden, um Operationen auf einer MongoDB-Datenbank oder eine Sammlung über die drei Zugriffsebenen zu beschränken (kein Zugriff, nur lesend, „Gott-Modus“) dokumentiert in der Sicherheit Thema auf dem MongoDB Wiki

Hat jemand anderes MongoDB als Dokumentspeicher in einer Umgebung eingesetzt, wo Unveränderlichkeit (oder zumindest die Änderungsverfolgung) für Dokumente eine Anforderung war? Welche Tricks oder Techniken haben Sie verwendet, dass schlecht geschrieben oder bösartige Anwendung Code, um sicherzustellen, könnten die vorhandenen Protokolldatensätze nicht ändern oder zerstören? Muß ich meine MongoDB Protokollierung in einer Dienstschicht wickeln, die die Schreib nur Politik erzwingt, oder kann ich eine Kombination von Konfiguration, Abfrage-Hacking und Replikation eine konsistente, Audit-able Aufzeichnung gewährleisten gehalten wird?

War es hilfreich?

Lösung

Ich würde sagen, die beste Wette, den Zugang zu MongoDB in einer Dienstschicht einpacken würde, die Ihre spezifischen Verträge erzwingen. Wir tun nicht viel in der Art von feinkörniger Zugriffskontrolle, weil es so viele verschiedenen Fälle sind, dass sie alle zu lösen richtig heikel ist richtig zu machen. So zum größten Teil ist es an die Anwendungsschicht diese Art von Kontrollen zu implementieren.

Andere Tipps

So fügen Sie schreiben nur (auf Sammlungsebene) Benutzer die MongoDB die folgende tun.

Angenommen, Sie einen Benutzer haben wollen, dass kann nur schreiben ( einfügen nur) zu einer bestimmte Sammlung auf einer bestimmten Datenbank.

Erstellen Sie eine Datei createuser.js mit folgendem Inhalt:

function createCollectionWriter(database, username, password, rolename, collection)
{
    db.getSiblingDB(database).createUser({
        user : username,
        pwd  : password,
        roles : [ ]
    });

    db.getSiblingDB(database).createRole({
        role  : rolename,
        privileges : [
        {
            resource : { db : database, "collection" : collection },
            actions  : [ "insert" ]
        }
        ],
        roles : []
    });

    db.getSiblingDB(database).grantRolesToUser(username, [ rolename ] );
}

und führen diese aus Befehlszeile

$ mongo --eval="load('createuser.js'); createCollectionWriter('yourdb', 'user1', 'pass1', 'rolename', 'col1')"

Dies erzeugt einen Benutzer mit Benutzername user1 mit Passwort pass1 und der Nutzer hat nur schreiben Zugriff auf Datenbank des ihredb Sammlung col1 .

Ein Nebeneffekt davon ist, dass Rolle Rollenname wird erstellt. Wenn Sie Benutzer vorhandene, die einen Schreibzugriff auf die gleiche Sammlung haben sollte, gewähren Rolle Rollenname in diesem vorhandenen Benutzer.

Fühlen Sie sich frei, den Code zu verwenden und ändern bereitgestellt oben.)

In MongoDB 1.3.2 Sie einige Einschränkung Benutzer hinzufügen:

db.addUser("guest", "passwordForGuest", true)

Aber es ist nur vorhanden jetzt nicht besser. Vielleicht können Sie einige Feature-Anfrage hinzufügen

siehe Informationen in MongoDB Dokumentation: http://www.mongodb.org / Anzeige / docs / Security + und + Authentifizierung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top