Et nyttig mønster for sikkerhet er å søke tillatelser basert på data i en post i stedet for å tilordne tillatelser til posten separat. Dette kan være basert på enten metadata, individuelle kolonne (Bigtable kloner) eller element (Aggregate NoSQL databaser) verdier.
Et godt eksempel er at et kundenavn blir nevnt i et dokument. Du vil kanskje begrense tilgangen til alle dokumentene som nevner at -kunden til bare de som har tilgang til denne kundens informasjon. Du kan begrense tilgangen til disse dokumentene ved å behandle dataene i dokumentet, og bruke de relevante sikkerhetsrettighetene basert på verdien av dataene.
Ingen NoSQL databaser gir denne muligheten rett ut av boksen. Det er fordi tillatelser må tilordnes posten etter at dataene er lagret av programmet, men før det er tilgjengelig for gjenfinning av andre programmer eller brukere. Så, denne tillatelsesoppgaven må forekomme innenfor transaksjonsgrensen.
Også svært få NoSQL-databaser støtter ACID-kompatible transaksjoner (MarkLogic, FoundationDB og Neo4j, gjør for eksempel). Hvis en database ikke støtter utdeling av tillatelser basert på data i et dokument, men støtter ACID-transaksjoner og pre-commit-utløser, er det mulig å få en enkel løsning.
Det er vanligvis enkelt å skrive en utløser som kontrollerer tilstedeværelsen av en verdi i en plate og for å endre tillatelser basert på verdien. Så lenge en database støtter å gjøre det under forlovelsesprosessen, og ikke etter forpliktelsen, vet du at dataene dine blir gjort sikre ved å bruke en enkel forhåndsinnstilt utløser.
Som et eksempel støtter MarkLogic Server fullt serialiserbare ACID-transaksjoner og pre-commit triggere. Følgende er et enkelt XML-dokument som jeg vil støtte for attributtbasert tilgangskontroll:
jbloggs ACME Lorem Ipsum Dolar Sit Amet …
MarkLogic Server utløsere bruker W3C XQuery språket. Følgende XQuery-eksempel er en enkel utløser som, når den er installert i MarkLogic, tilordner lese- og skrivetillatelser:
xquery-versjonen "1. 0-ml"; importer modulen navnrom trgr = ' // marklogic. com / xdmp / utløser 'at' / MarkLogic / triggers. xqy '; erklære variabel $ trgr: uri som xs: streng ekstern; erklære variabel $ trgr: utløser som node () ekstern; hvis ("ACME" = fn: doc ($ trgr: uri) / MeetingReport / Customer) så xdmp: dokument-set-tillatelser ($ trgr-uri, (xdmp: tillatelse ("seniorsalar", "oppdatering"), xdmp: tillatelse ("salg", "les"))) annet ()
Når utløseren er installert i filsettene.xqy i en MarkLogic Server Modules Database, kjør følgende kode i webkodingsprogrammet for MarkLogic - Query Console for å aktivere utløseren. På en standard MarkLogic Server-installasjon kan du finne spørrekonsollen på nettadressen: // localhost: 8000 / qconsole.
Her er koden som viser hvordan du installerer utløseren ved hjelp av spørrekonsollen:
xquery-versjonen "1. 0-ml"; importere modulen navneområde trgr = " // marklogic.no / xdmp / triggers" at '/ MarkLogic / triggers. xqy '; trgr: create-trigger ("setperms"), trgr: dokument-innhold ("modifiser"), trgr: pre -commit ()), trgr: trigger-modul (xdmp: database ("Moduler"), "/ triggers /", "setperms. xqy"), fn: true (), xdmp: standardtillatelser (), fn: false ())