Atributo & # 8208-Based Access Control (ABAC) em NoSQL

Um padrão útil para a segurança é para aplicar permissões com base em dados dentro de um registro em vez de atribuir separadamente permissões para o registro. Isto pode ser baseado em ambos os metadados, coluna individual (clones Bigtable), ou elemento (bases de dados agregada NoSQL) valores.

Um bom exemplo é um nome de cliente a ser mencionado em um documento. Você pode querer restringir o acesso a todos os documentos que citam que # 173-cliente para apenas as pessoas com acesso a informações deste cliente. Você pode restringir o acesso a esses documentos por processar os dados dentro do documento e aplicar as permissões de segurança relevantes com base no valor dos dados.

Não há bancos de dados NoSQL fornecer esse recurso para a direita fora da caixa. Isso porque permissões devem ser atribuídas ao registro após os dados são salvos pela aplicação, mas antes que ele esteja disponível para a recuperação por outros aplicativos ou usuários. Então, essa atribuição de permissão deve ocorrer dentro do limite de transação.

Além disso, muito poucos bancos de dados NoSQL apoiar ACID # transações 8208 conformes (MarkLogic, FoundationDB e Neo4j, fazer por exemplo). Se um banco de dados não suporta fora # 8208-de # 8208-the # atribuição 8208-box de permissões com base em dados dentro de um documento, mas suporta transações ACID e pré # 8208-commit gatilhos, em seguida, uma solução fácil é possível.

Em geral, é fácil escrever um gatilho que verifica a presença de um valor dentro de um registro e modificar permissões com base em seu valor. Enquanto um banco de dados suporta fazê-lo durante o processo de confirmação, e não depois de commit, então você sabe que os seus dados são feitas segura, usando um simples pré # 8208-commit gatilho.

Como exemplo, MarkLogic Server suporta transações ACID totalmente serializados e pré # 8208-cometer gatilhos. A seguir é um documento XML simples que eu quero apoiar para controle de acesso de atributo # 8208 com base em:

jbloggsACMELorem Ipsum Dolar sit amet ...

gatilhos de MarkLogic Server usam a linguagem W3C XQuery. O seguinte exemplo de XQuery é um gatilho simples que, quando instalado em MarkLogic, atribui permissões de leitura e de escrita:

versão xquery "1,0 ml" -import módulo namespacetrgr = 'https://marklogic.com/xdmp/triggers'at' /MarkLogic/triggers.xqy'-declare $ trgr variável: uri como xs: string external-declarar $ variable trgr: gatilho, conforme node () external-se (# 147-ACME # 148- = 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 ()

Uma vez que o gatilho está instalado no arquivo setperms.xqy em um banco de dados MarkLogic Servidor Módulos, execute o seguinte código no aplicativo de codificação da web para MarkLogic - Consulta Console para ativar o gatilho. Em uma instalação MarkLogic servidor padrão, você pode encontrar o Console de consulta na URL: http: // localhost: 8000 / qconsole.

Aqui está o código que mostra como instalar o gatilho usando o Query Console:

versão xquery "1,0 ml" -import módulo namespacetrgr = 'http: //marklogic.com/xdmp/triggers'at' /MarkLogic/triggers.xqy'-trgr:create-trigger("setperms","Set Vendas Doc Permissions",trgr:trigger-data-event(trgr:collection-scope("meetingreports"),trgr:document-content("modify"),trgr:pre-commit()), trgr: trigger-module (xdmp: banco de dados ( "Módulos"), "/triggers/","setperms.xqy"), fn: true (), xdmp: default-permissões (), fn: false ()) 

menu