Quando usar ABAC vs filtros de linha e máscaras de coluna no nível de tabela

O Catálogo do Unity dá suporte a duas abordagens para segurança em nível de linha e de coluna: políticas ABAC e filtros de linha no nível da tabela e máscaras de coluna. Nenhuma das abordagens concede acesso a dados por conta própria– ambas adicionam restrições sobre privilégios de nível de objeto existentes. Você deve conceder acesso à tabela base separadamente por meio de permissões no nível do objeto (GRANT).

A principal diferença é onde as restrições são definidas. Filtros de linha de nível de tabela e máscaras de coluna aplicam controles de sensibilidade diretamente em tabelas individuais usando ALTER TABLE. Os proprietários de tabelas gerenciam sua própria proteção de dados sem precisar de um sistema de etiquetagem governada. Isso é simples para um pequeno número de tabelas, mas cada tabela deve ser configurada individualmente e os proprietários da tabela podem modificar ou remover seus próprios filtros e máscaras.

As políticas ABAC podem ser aplicadas no nível de catálogo, esquema ou tabela e correspondem a tabelas e colunas de forma dinâmica com base em tags governadas. Uma política definida no nível do catálogo se aplica a todas as tabelas desse catálogo e os proprietários de tabelas individuais não podem removê-la, modificá-la ou ignorá-la. A política reside no catálogo e é avaliada pelo Catálogo do Unity antes que a consulta chegue ao runtime. Isso permite que administradores de nível superior imponham regras de toda a organização e garantam que administradores e proprietários de nível inferior não possam contorná-las.

Resumo detalhado da comparação

Esta tabela resume as diferenças entre políticas ABAC, filtros de linha no nível de tabela e máscaras de coluna.

Consideração Políticas de Controle de Acesso Baseado em Atributos (ABAC) Filtros de linha em nível de tabela e máscaras de coluna
Sintaxe SQL CREATE POLICY ... ON CATALOG/SCHEMA/TABLE ALTER TABLE ... SET ROW FILTER / ALTER TABLE ... ALTER COLUMN ... SET MASK
Âmbito Todas as tabelas dentro do escopo da política (catálogo, esquema ou tabela) e todos os seus respectivos descendentes. Novas tabelas marcadas são cobertas automaticamente. Uma única tabela em que o filtro ou a máscara está configurado. Cada tabela deve ser configurada individualmente.
Correspondência dinâmica Tabelas e colunas são correspondidas dinamicamente com base em tags governadas usando has_tag() e has_tag_value(). Nenhuma correspondência dinâmica. Filtros e máscaras são associados a tabelas e colunas específicas.
Principais direcionados TO / EXCEPT cláusulas na definição de política, além de funções de identidade na UDF. Funções de identidade como current_user() na UDF.
Governança de política As políticas podem ser definidas por proprietários de catálogo ou esquema. Depois de serem definidos em um nível mais alto, os proprietários da tabela não poderão substituí-los, modificá-los ou removê-los. Gerenciados por proprietários de tabelas, que podem modificar ou remover filtros e máscaras em suas próprias tabelas.
Recursos sem suporte Operações como viagem no tempo, clonagem e Delta Sharing podem ser executadas por principais na cláusula EXCEPT. Consulte projeto com falha em modo fechado. Nenhuma EXCEPT cláusula, portanto, os recursos sem suporte permanecem indisponíveis para tabelas protegidas.
Políticas efetivas SHOW EFFECTIVE POLICIES para ver quais políticas se aplicam a uma determinada tabela e usuário. Diretamente visível na definição da tabela.
Capacidade de auditoria DESCRIBE POLICY e SHOW POLICIES para inspecionar definições de política. INFORMATION_SCHEMA.ROW_FILTERS e INFORMATION_SCHEMA.COLUMN_MASKS.

Em geral, use políticas ABAC quando:

  • Você precisa de regras de acesso consistentes em várias tabelas, esquemas ou catálogos.
  • Sua organização separa as responsabilidades. Por exemplo, os autores de política definem regras e os administradores de dados classificam os dados com marcas.
  • Sua infraestrutura de dados está crescendo e você deseja que novas tabelas sejam abrangidas automaticamente quando forem marcadas.
  • Você precisa da EXCEPT cláusula para permitir operações como viagem no tempo, Compartilhamento Delta ou otimização completa de consultas para principais específicos.

Em geral, use filtros de linha no nível da tabela e máscaras de coluna quando:

  • Cada tabela tem uma lógica estrita e específica que não generaliza para outras tabelas.
  • Os proprietários de tabela devem gerenciar seus próprios filtros e máscaras diretamente, sem um sistema de tags centralizado.
  • Você tem um conjunto pequeno e estável de tabelas que mudam com pouca frequência.

Combinando ABAC e filtros de linha e máscaras de coluna no nível da tabela

ABAC e filtros de linha e máscaras de coluna no nível da tabela podem coexistir na mesma tabela. No momento da consulta, as políticas são avaliadas independentemente para o usuário que consulta com as seguintes regras:

  • Somente um filtro de linha distinto pode ser aplicado.
  • Somente uma máscara de coluna distinta pode ser resolvida por coluna.

Azure Databricks avalia o conflito comparando as funções aplicadas, não a saída de dados. Se uma política ABAC e um filtro de nível de tabela ou máscara aplicarem a mesma função de filtro de linha ou máscara de coluna para o mesmo usuário, Azure Databricks permitirá a execução. Se aplicarem funções diferentes, Azure Databricks bloqueará o acesso e retornará um erro, mesmo que essas funções produzam saídas de dados idênticas.

Para obter detalhes sobre resolução de conflitos e solução de problemas, consulte Regras para vários filtros e máscaras.

Segurança em nível de linha e coluna com exibições dinâmicas

Exibições dinâmicas também podem implementar a segurança em nível de linha e de coluna inserindo funções de identidade como current_user() e is_account_group_member() diretamente na definição de exibição. Exibições dinâmicas, filtros de linha e máscaras de coluna aplicam lógica de filtragem ou transformação no momento da consulta, mas diferem no escopo em que são gerenciados e expostos aos usuários.

Aplicável a Como ele é gerenciado Melhor utilizado para
Exibições dinâmicas Visualizações Lógica SQL na definição de visualização Controle de acesso refinado que abrange várias tabelas de origem ou remodela dados para compartilhamento
Filtros de linha e máscaras de coluna Tabelas e colunas Políticas ABAC ou atribuição de nível de tabela Controle de acesso em nível de linha e coluna sem introduzir novos objetos

Use exibições dinâmicas quando precisar de um controle de acesso refinado que abrange várias tabelas de origem ou remodele os dados para compartilhamento. Use filtros de linha e máscaras de coluna quando quiser controlar o acesso em tabelas individuais sem introduzir novos objetos.

Por exemplo, uma exibição dinâmica pode mascarar uma coluna de email para não auditores:

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  CASE
    WHEN is_account_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END AS email,
  country,
  product,
  total
FROM sales_raw

Visões dinâmicas dão suporte total à otimização de consulta e ao empurro de predicado, de modo que possam proporcionar um desempenho de consulta superior ao de filtros de linha e máscaras de coluna. Eles também impedem que os usuários modifiquem as tabelas subjacentes.

No entanto, as exibições dinâmicas têm duas desvantagens para a governança de dados:

  • Auditoria limitada: as exibições dinâmicas não têm metadados semânticos, como marcas ou definições de política em tabelas do sistema, o que as torna mais difíceis de auditar em escala.
  • Vulnerabilidade à sondagem: como eles não têm uma SecureView barreira, não fornecem proteção contra ataques de sondagem, em que um usuário cria um predicado com efeitos colaterais para inferir dados sobre linhas filtradas. Veja Entenda a aplicação de predicados em tabelas protegidas.