Control Atributo & # 8208 basada en el acceso (ABAC) en nosql
Un modelo útil para la seguridad es aplicar permisos basados en los datos dentro de un registro y no por separado asignar permisos en el registro. Esto podría basarse en cualquiera de los metadatos, columna individual (clones BigTable), o elemento (bases de datos NoSQL Aggregate) valores.
Un buen ejemplo es un nombre de cliente que se menciona en un documento. Es posible que desee restringir el acceso a todos los documentos que citan que # 173-cliente sólo aquellas personas con acceso a la información de este cliente. Puede restringir el acceso a estos documentos mediante el procesamiento de los datos dentro del documento, y la aplicación de los permisos de seguridad pertinentes en base al valor de esos datos.
No hay bases de datos NoSQL proporcionan esta capacidad nada más sacarlo de la caja. Eso es porque los permisos se deben asignar al registro después de los datos se guardan por la aplicación, pero antes de que esté disponible para su recuperación por otras aplicaciones o usuarios. Por lo tanto, esta asignación permiso debe producirse dentro de los límites de transacción.
También, muy pocas bases de datos NoSQL apoyan ACID # 8208 transacciones compatibles (MarkLogic, FoundationDB y Neo4j, lo hacen por ejemplo). Si una base de datos no admite a cabo # 8208 de # 8208-la # 8208-box asignación de permisos sobre la base de datos dentro de un documento, pero no admite transacciones ACID y pre # 8208-commit desencadenantes, a continuación, una solución fácil es posible.
Por lo general es fácil escribir un disparador que comprueba la presencia de un valor dentro de un registro y para modificar los permisos sobre la base de su valor. Mientras una base de datos compatible con hacerlo durante el proceso de confirmación, y no después de la confirmación, entonces usted sabe que sus datos se hace segura mediante el uso de un simple pre # 8208-commit gatillo.
A modo de ejemplo, MarkLogic Server admite transacciones ACID totalmente serializables y pre # 8208-comprometerse desencadenantes. A continuación se presenta un documento XML simple que quiero apoyar para control de acceso atributo # 8208 basado en:
jbloggs ACME Lorem Ipsum Dolar Sit Amet ...
Desencadenantes de MarkLogic Server utilizan el lenguaje de W3C XQuery. El ejemplo siguiente XQuery es un disparador simple que, cuando se instala en MarkLogic, asigna permisos de lectura y escritura:
Versión xquery "1,0 ml" -import módulo namespacetrgr = 'http://marklogic.com/xdmp/triggers'at' /MarkLogic/triggers.xqy'-declare $ trgr variables: uri como xs: string externa declarar variable $ trgr: disparador como nodo () si-externo (" 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 ()
Una vez que el gatillo está instalado en el archivo setperms.xqy en una base de datos Módulos MarkLogic Server, ejecute el siguiente código en la aplicación de codificación web para MarkLogic - Consola de consulta para que el gatillo. En una instalación MarkLogic servidor por defecto, se puede encontrar la consola de consulta en la URL: http: // localhost: 8000 / QCONSOLE.
Aquí está el código que muestra cómo instalar el gatillo usando la consola de consulta:
Versión xquery "1,0 ml" -import módulo namespacetrgr = 'http: //marklogic.com/xdmp/triggers'at' /MarkLogic/triggers.xqy'-trgr:create-trigger("setperms","Set Ventas Doc Permissions",trgr:trigger-data-event(trgr:collection-scope("meetingreports"),trgr:document-content("modify"),trgr:pre-commit()), trgr: disparador de módulo (xdmp: base de datos ("Módulos"), "/triggers/","setperms.xqy"), fn: true (), xdmp: default-permisos (), fn: false ())