Vidéo: Attribute Based Access Control 2024
Un modèle de sécurité utile consiste à appliquer des autorisations basées sur les données d'un enregistrement plutôt que d'attribuer séparément des autorisations à l'enregistrement. Cela peut être basé sur des métadonnées, des colonnes individuelles (clones Bigtable) ou des éléments (bases de données agrégées NoSQL).
Un bon exemple est un nom de client mentionné dans un document. Vous voudrez peut-être restreindre l'accès à tous les documents mentionnant que -customer uniquement aux personnes ayant accès aux informations de ce client. Vous pouvez restreindre l'accès à ces documents en traitant les données dans le document et en appliquant les autorisations de sécurité appropriées en fonction de la valeur de ces données.
Aucune base de données NoSQL n'offre cette fonctionnalité dès sa sortie de l'emballage. En effet, les autorisations doivent être attribuées à l'enregistrement après que les données ont été enregistrées par l'application, mais avant qu'elles ne puissent être récupérées par d'autres applications ou utilisateurs. Ainsi, cette attribution d'autorisation doit se produire dans les limites de la transaction.
De plus, très peu de bases de données NoSQL supportent les transactions ACID (MarkLogic, FoundationDB et Neo4j, par exemple). Si une base de données ne prend pas en charge l'affectation prête à l'emploi des autorisations en fonction des données d'un document, mais qu'elle prend en charge les transactions ACID et les déclencheurs de pré-validation, 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 en fonction de sa valeur. Tant qu'une base de données le fait pendant le processus de validation, et non après la validation, alors vous savez que vos données sont sécurisées en utilisant un simple déclencheur de pré-validation.
À titre d'exemple, MarkLogic Server prend en charge les transactions ACID entièrement sérialisables et les déclencheurs de pré-validation. Voici un document XML simple que je veux prendre en charge pour le contrôle d'accès par attributs:
xquery version "1. 0-ml"; import module namespace trgr = ' // marklogic. com / xdmp / triggers 'at' / MarkLogic / triggers. xqy '; déclare la variable $ trgr: uri as xs: string external; declare variable $ trgr: trigger en tant que node () external; if ("ACME" = fn: doc ($ trgr: uri) / MeetingReport / Client) puis xdmp: document-set-permissions ($ trgr-uri, (xdmp: permission ("seniorsales", "mise à jour"), xdmp: permission ("sales", "read"))) else ()Une fois le trigger installé dans le fichier setperms.xqy dans une base de données MarkLogic Server Modules, exécutez le code suivant dans l'application de codage Web pour MarkLogic - Query Console pour activer le déclencheur. Sur une installation par défaut de MarkLogic Server, vous pouvez trouver la console de requêtes à l'adresse URL: // localhost: 8000 / qconsole.
Voici un code montrant comment installer le déclencheur à l'aide de Query Console:
xquery version "1. 0-ml"; import module espace de noms trgr = " // marklogic.comp / xdmp / triggers" à '/ MarkLogic / triggers. xqy '; trgr: create-trigger ("setperms", "Définir les permissions des documents de vente", trgr: trigger-data-event (trgr: collection-scope ("rapports de réunion"), trgr: document-content ("modifier"), trgr: pré -commit ()), trgr: module-déclencheur (xdmp: base de données ("Modules"), "/ triggers /", "setperms.xqy"), fn: vrai (), xdmp: default-permissions (), fn: false ())