Pular para o conteúdo principal

Quando usar ABAC versus filtros de linha e máscaras de coluna em nível de tabela

O Unity Catalog oferece suporte a duas abordagens para segurança em nível de linha e em nível de coluna: políticas ABAC e filtros de linha e máscaras de coluna em nível de tabela. Nenhuma das abordagens concede acesso aos dados por si só — ambas adicionam restrições aos privilégios existentes em nível de objeto. Você deve conceder acesso à tabela base separadamente por meio de permissões de nível de objeto (GRANT).

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

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

Resumo comparativo detalhado

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

Consideração

Políticas ABAC

Filtros de linha e máscaras de coluna em nível de tabela

sintaxe SQL

CREATE POLICY ... ON CATALOG/SCHEMA/TABLE

ALTER TABLE ... SET ROW FILTER / ALTER TABLE ... ALTER COLUMN ... SET MASK

Escopo

Todas as tabelas dentro do escopo da política (catálogo, esquema ou tabela) e seus descendentes. As novas tabelas de tags são preenchidas automaticamente.

Uma única tabela onde o filtro ou a máscara é configurada. Cada tabela deve ser configurada individualmente.

Correspondência dinâmica

As tabelas e colunas são correspondidas dinamicamente com base em tags definidas usando has_tag() e has_tag_value().

Sem correspondência dinâmica. Filtros e máscaras estão vinculados a tabelas e colunas específicas.

Diretores selecionados

TO/EXCEPT cláusulas na definição da política, além de funções de identidade na UDF.

Funções de identidade como current_user() na UDF.

Governança de políticas

As políticas podem ser definidas pelos proprietários do catálogo ou do esquema. Depois de definidas em um nível superior, as tabelas não podem ser substituídas, modificadas ou removidas pelos proprietários.

gerenciado pelos proprietários das mesas, que podem modificar ou remover filtros e máscaras em suas próprias mesas.

Recurso não suportado

operações como viagem do tempo, clonagem e Delta Sharing podem ser executadas pelos mandantes na cláusula EXCEPT . Veja Projeto de falha fechada.

Sem a cláusula EXCEPT , os recursos não suportados permanecem indisponíveis para tabelas protegidas.

Políticas eficazes

SHOW EFFECTIVE POLICIES Para verificar quais políticas se aplicam a uma determinada tabela e usuário.

Visível diretamente na definição da tabela.

Auditabilidade

DESCRIBE POLICY e SHOW POLICIES para inspecionar definições de política.

INFORMATION_SCHEMA.ROW_FILTERS e INFORMATION_SCHEMA.COLUMN_MASKS.

Em geral, utilize políticas ABAC quando:

  • Você precisa de regras de acesso consistentes em várias tabelas, esquemas ou catálogos.
  • Sua organização separa as funções. Por exemplo, os autores de políticas definem regras e a gestão de dados classifica os dados com tags.
  • Seu conjunto de dados está crescendo e você deseja que novas tabelas sejam cobertas automaticamente quando forem marcadas como tags.
  • Você precisa da cláusula EXCEPT para permitir operações como viagem do tempo, Delta Sharing ou otimização completa de consultas para entidades específicas.

Em geral, utilize filtros de linha e máscaras de coluna em nível de tabela quando:

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

Combinando ABAC com filtros de linha e máscara de coluna em nível de tabela.

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

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

O Databricks avalia conflitos comparando as funções aplicadas, e não os dados de saída. Se uma política ABAC e um filtro ou máscara em nível de tabela aplicarem a mesma função de filtro de linha ou máscara de coluna para o mesmo usuário, o Databricks permitirá a execução. Se forem aplicadas funções diferentes, o Databricks bloqueia o acesso e retorna um erro, mesmo que essas funções produzam resultados de dados idênticos.

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 visualização dinâmica

A visualização dinâmica também pode implementar segurança em nível de linha e em nível de coluna, incorporando funções de identidade como current_user() e is_account_group_member() diretamente na definição view . A visualização dinâmica, os filtros de linha e as máscaras de coluna aplicam lógica de filtragem ou transformação no momento da consulta, mas diferem na forma como são gerenciados, definidos e expostos aos usuários.

Recurso

Aplica-se a

Como é gerenciado

Melhor utilizado para

Visão dinâmica

Exibições

Lógica SQL na definição view

Controle de acesso granular 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 em nível de tabela

Controle de acesso em nível de linha e coluna sem a introdução de novos objetos.

Use a visualização dinâmica quando precisar de um controle de acesso preciso que abranja várias tabelas de origem ou que remodele os dados para compartilhamento. Utilize filtros de linha e máscaras de coluna quando desejar controlar o acesso a tabelas individuais sem introduzir novos objetos.

Por exemplo, uma view dinâmica pode ocultar uma coluna email para usuários que não são auditores:

SQL
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

A visualização dinâmica oferece suporte completo à otimização de consultas e ao pushdown de predicados, proporcionando um desempenho de consulta superior ao dos filtros de linha e máscaras de coluna. Elas também impedem que os usuários modifiquem as tabelas subjacentes.

No entanto, a visão dinâmica tem duas desvantagens para a governança de dados:

  • Auditoria limitada : As visualizações dinâmicas carecem de metadados semânticos, como tags ou definições de políticas nas tabelas do sistema, o que dificulta a auditoria em situações de escalonamento.
  • Vulnerabilidade a sondagem : Como não possuem uma barreira SecureView , não protegem contra ataques de sondagem, nos quais um usuário cria um predicado com efeitos colaterais para inferir informações sobre linhas filtradas. Consulte Compreender o pushdown de predicados em tabelas protegidas.