Video: Biblical Series I: Introduction to the Idea of God 2025
Un modello utile per la sicurezza consiste nell'applicare le autorizzazioni in base ai dati all'interno di un record anziché assegnare separatamente le autorizzazioni al record. Questo potrebbe essere basato su valori di metadati, colonne individuali (cloni Bigtable) o elementi (database Aggregato NoSQL).
Un buon esempio è il nome di un cliente che viene citato all'interno di un documento. Potresti voler limitare l'accesso a tutti i documenti che menzionano il cliente per le sole persone che hanno accesso alle informazioni di questo cliente. È possibile limitare l'accesso a questi documenti elaborando i dati all'interno del documento e applicando le relative autorizzazioni di sicurezza in base al valore di tali dati.
Nessun database NoSQL fornisce questa funzionalità immediatamente. Questo perché le autorizzazioni devono essere assegnate al record dopo che i dati sono stati salvati dall'applicazione, ma prima che siano disponibili per il recupero da altre applicazioni o utenti. Pertanto, questa autorizzazione deve essere eseguita entro il limite della transazione.
Inoltre, pochissimi database NoSQL supportano transazioni compatibili con ACID (MarkLogic, FoundationDB e Neo4j, ad esempio). Se un database non supporta l'assegnazione immediata delle autorizzazioni in base ai dati contenuti in un documento, ma supporta le transazioni ACID e i trigger pre-commit, è possibile una soluzione semplice.
Generalmente è facile scrivere un trigger che controlli la presenza di un valore all'interno di un record e modificare le autorizzazioni in base al suo valore. Finché un database lo supporta durante il processo di commit e non dopo il commit, allora sai che i tuoi dati sono resi sicuri usando un semplice trigger pre-commit.
Ad esempio, MarkLogic Server supporta transazioni ACID serializzabili e trigger pre-commit. Di seguito è riportato un semplice documento XML che desidero supportare per il controllo degli accessi basato sugli attributi:
jbloggs ACME Lorem Ipsum Dolar Sit Amet …
I trigger di MarkLogic Server utilizzano il linguaggio XQuery W3C. Il seguente esempio XQuery è un semplice trigger che, se installato in MarkLogic, assegna le autorizzazioni di lettura e scrittura:
versione xquery "1. 0-ml"; import module namespace trgr = ' // marklogic. com / xdmp / trigger 'at' / MarkLogic / trigger. xqy '; dichiarare la variabile $ trgr: uri come xs: stringa esterna; dichiarare la variabile $ trgr: trigger as node () external; if ("ACME" = fn: doc ($ trgr: uri) / MeetingReport / Customer) quindi xdmp: document-set-permissions ($ trgr-uri, (xdmp: permission ("seniorsales", "update"), xdmp: permesso ("vendite", "leggi"))) else ()
Una volta che il trigger è installato nel file setperms.xqy in un database di moduli server MarkLogic, eseguire il seguente codice nell'applicazione di codifica Web per MarkLogic - Console di query per abilitare il trigger. Su un'installazione MarkLogic Server predefinita, è possibile trovare la Console di interrogazione all'URL: // localhost: 8000 / qconsole.
Questo è il codice che mostra come installare il trigger utilizzando Query Console:
versione xquery "1. 0-ml"; import module namespace trgr = " // marklogic. com / xdmp / trigger" in "/ MarkLogic / trigger. xqy '; trgr: create-trigger ("setperms", "Imposta permessi dei documenti di vendita", trgr: trigger-data-event (trgr: collection-scope ("meetingreports"), trgr: document-content ("modify"), trgr: pre -commit ()), trgr: trigger-module (xdmp: database ("Modules"), "/ trigger /", "setperms. xqy"), fn: true (), xdmp: default-permissions (), fn: false ())
