Attribut & # 8208-Based Access Control (ABAC) in NoSQL

Ein nützliches Muster für Sicherheit Berechtigungen auf Daten innerhalb eines Datensatzes auf Basis anzuwenden, anstatt separat Berechtigungen für den Datensatz zugeordnet werden. Dies könnte auf beiden Metadaten basieren, einzelne Spalte (Bigtable Klone) oder Element (Aggregate NoSQL-Datenbanken) Werte.

Ein gutes Beispiel ist ein Kundenname in einem Dokument erwähnt. Sie können den Zugang zu allen Dokumenten einschränken möchten erwähnen, dass # 173-Kunden nur auf diejenigen Personen, die Zugang zu diesen Informationen des Kunden. Sie können innerhalb des Dokuments, durch die Verarbeitung der Daten Zugang zu diesen Dokumenten zu beschränken und die entsprechenden Sicherheitsberechtigungen Anwendung basierend auf dem Wert der Daten.

Keine NoSQL-Datenbanken bieten diese Möglichkeit direkt aus der Box. Das ist, weil die Berechtigungen müssen dem Datensatz zugeordnet werden, nachdem die Daten von der Anwendung gespeichert ist, aber bevor es zum Abruf durch andere Anwendungen oder Benutzer verfügbar ist. So müssen diese Berechtigungszuweisung innerhalb der Transaktionsgrenze auftreten.

Auch sehr wenige NoSQL-Datenbanken unterstützen ACID # 8208-konformen Transaktionen (Marklogic, FoundationDB und Neo4j, zum Beispiel tun). Wenn eine Datenbank nicht aus, unterstützen # 8208-of # 8208-the # 8208-Box Zuweisung von Berechtigungen auf Basis von Daten innerhalb eines Dokuments, aber nicht ACID-Transaktionen und Pre # 8208-commit Trigger unterstützen, dann eine einfache Abhilfe möglich ist.

Es ist in der Regel leicht, einen Auslöser zu schreiben, die innerhalb eines Datensatzes für das Vorhandensein eines Wertes überprüft und Berechtigungen auf seinen Wert basiert zu ändern. Solange eine Datenbank dabei während des Prozesses begehen unterstützt, und nicht nach dem Commit, dann wissen Sie, Ihre Daten sicher gemacht wird durch eine einfache Pre # mit 8208-commit-Trigger.

Als Beispiel unterstützt Marklogic Server vollständig serializable ACID-Transaktionen und Pre # 8208-commit Trigger. Es folgt eine einfache XML-Dokument, das ich für das Attribut # 8208-basierte Zugriffskontrolle unterstützen:

jbloggsGIPFELLorem Ipsum Dolar sit amet ...

Marklogic Servers Trigger verwenden, um die W3C XQuery-Sprache. Die folgende XQuery-Beispiel ist eine einfache Trigger, der, wenn in Marklogic installiert ist, lesen zuordnet und Schreibrechte:

XQuery-Version "1.0-ml" -import Modul namespacetrgr = 'https://marklogic.com/xdmp/triggers'at' /MarkLogic/triggers.xqy'-declare Variable trgr $: uri als xs: string externe erklären Variable $ trgr: Trigger als Knoten () externe if (# 147-ACME # 148- = fn:doc($trgr:uri)/MeetingReport/Customer)thenxdmp:document-set-permissions($trgr-uri,(xdmp:permission(#147-seniorsales#148-,#148-update#148-),xdmp:permission(#147-sales#148-,#148-read#148-)))else ()

Sobald der Auslöser in der Datei installiert setperms.xqy in einem Marklogic Server Module Datenbank, führen Sie den folgenden Code in die Web-Codierung Anwendung für Marklogic - Abfrage-Konsole, den Auslöser zu aktivieren. Auf einem Standard-Server-Installation Marklogic, können Sie die Query-Konsole unter der URL finden: http: // localhost: 8000 / qconsole.

Hier ist der Code zeigt, wie der Trigger mit Query-Konsole zu installieren:

XQuery-Version "1.0-ml" -import Modul namespacetrgr = 'http: //marklogic.com/xdmp/triggers'at' /MarkLogic/triggers.xqy'-trgr:create-trigger("setperms","Set Verkäufe Doc Permissions",trgr:trigger-data-event(trgr:collection-scope("meetingreports"),trgr:document-content("modify"),trgr:pre-commit()), trgr: Trigger-Modul (xdmp: Datenbank ( "Module"), "/triggers/","setperms.xqy"), fn: true (), xdmp: default-Berechtigungen (), fn: false ()) 

Menü