Attribut & # 8208-contrôle d'accès basé (ABAC) en nosql

Un modèle utile pour la sécurité consiste à appliquer des autorisations fondées sur les données dans un dossier plutôt que de céder séparément les autorisations à l'enregistrement. Cela pourrait être fondée sur les métadonnées, colonne individuelle (des clones Bigtable), ou d'un élément (bases de données NoSQL Aggregate) valeurs.

Un bon exemple est un nom de client étant mentionné dans un document. Vous pouvez restreindre l'accès à tous les documents citant que # 173-client aux seuls personnes ayant accès à l'information de ce client. Vous pouvez restreindre l'accès à ces documents par le traitement des données dans le document, et en appliquant les autorisations de sécurité pertinentes sur la base de la valeur de ces données.

Aucune base de données NoSQL offrent cette possibilité dès la sortie de la boîte. Voilà car les autorisations doivent être affectés à l'enregistrement après les données sont sauvegardées par l'application, mais avant qu'il ne soit disponible pour la récupération par d'autres applications ou les utilisateurs. Donc, cette affectation d'autorisation doit avoir lieu dans la limite de transaction.

En outre, très peu de bases de données NoSQL soutiennent ACID # 8208 transactions conformes (MarkLogic, FoundationDB et Neo4j, font par exemple). Si une base de données ne supporte pas sur # 8208 # 8208-de-la-boîte # 8208 affectation d'autorisations fondées sur des données au sein d'un document, mais ne supporte pas les transactions ACID et pré # 8208-commit déclencheurs, puis une solution de contournement simple est possible.




Il est généralement facile d'écrire un déclencheur qui vérifie la présence d'une valeur dans un enregistrement et de modifier les autorisations sur la base de sa valeur. Tant que la base de données supporte le faire pendant le processus de commettre, et non après la validation, alors vous savez de vos données est sécurisé à l'aide d'un simple pré # 8208-commit déclencheur.

A titre d'exemple, MarkLogic Server prend en charge les transactions ACID entièrement sérialisables et pré-# 8208 commettre déclencheurs. Voici un document XML simple que je veux soutenir pour le contrôle d'accès basé sur 8208 # attribut:

jbloggsACMELorem Ipsum Dolar sit amet ...

Les déclencheurs de MarkLogic Server utilisent le langage XQuery du W3C. L'exemple suivant XQuery est un déclencheur simple qui, lorsqu'il est installé dans MarkLogic et les ayants droit de lire et écrire des autorisations:

version xquery "1,0 ml" -import Module namespacetrgr = 'http://marklogic.com/xdmp/triggers'at' /MarkLogic/triggers.xqy'-declare variable $ TRGR: uri comme xs: string externe déclarer la variable $ TRGR: déclenchement comme node () externe si (“ ACME ” = 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 ()

Une fois que la gâchette est installée dans le fichier setperms.xqy dans une base Modules MarkLogic Server, exécutez le code suivant dans l'application de codage Web pour MarkLogic - Console de requête pour permettre la gâchette. Sur une installation du serveur MarkLogic par défaut, vous pouvez trouver la console de requête à l'URL: http: // localhost: 8000 / QCONSOLE.

Voici le code montrant comment installer le déclencheur aide de la console de requêtes:

version xquery "1,0 ml" -import Module namespacetrgr = 'http: //marklogic.com/xdmp/triggers'at' /MarkLogic/triggers.xqy'-trgr:create-trigger("setperms","Set ventes Doc Permissions",trgr:trigger-data-event(trgr:collection-scope("meetingreports"),trgr:document-content("modify"),trgr:pre-commit()), TRGR: déclencheur-module (xdmp: base de données («Modules»), «/triggers/","setperms.xqy»), fn: true (), xdmp: default-permissions (), fn: false ()) 

» » » » Attribut & # 8208-contrôle d'accès basé (ABAC) en nosql