Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Unity Catalog suporta duas abordagens para segurança ao nível de linha e a nível de coluna: políticas ABAC e filtros de linhas ao nível de tabela e máscaras de coluna. Nenhuma das abordagens concede acesso a dados por si só — ambas acrescentam restrições aos privilégios existentes ao nível do objeto. Deve conceder acesso à tabela base separadamente através de permissões a nível de objeto (GRANT).
A diferença central está onde as restrições são definidas.
Filtros de linha ao nível de tabela e máscaras de coluna aplicam controlos de sensibilidade diretamente em tabelas individuais usando ALTER TABLE. Os proprietários de tabelas gerem a sua própria proteção de dados sem necessidade de um sistema de etiquetas regulado. Isto é simples para um pequeno número de tabelas, mas cada tabela tem de ser configurada individualmente, e os proprietários de tabelas podem modificar ou remover os seus próprios filtros e máscaras.
As políticas ABAC são anexadas ao nível do catálogo, esquema ou tabela e correspondem dinamicamente a tabelas e colunas com base nas etiquetas governadas. Uma política definida ao nível do catálogo aplica-se a todas as tabelas desse catálogo, e os proprietários individuais de tabelas não podem removê-la, modificá-la, nem contorná-la. A política permanece no catálogo e é avaliada pelo Unity Catalog antes de a consulta chegar ao tempo de execução. Isto 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 as consigam contornar.
Resumo detalhado da comparação
Esta tabela resume as diferenças entre as políticas ABAC, os filtros de linhas ao nível da tabela e as máscaras de colunas.
| Consideração | Políticas ABAC | Filtros de linha ao nível da 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 |
| Scope | Todas as tabelas dentro do âmbito da política (catálogo, esquema ou tabela) e respetivos descendentes. Novas tabelas etiquetadas são cobertas automaticamente. | Uma única tabela onde o filtro ou máscara está configurado. Cada mesa deve ser configurada individualmente. |
| Acoplamento dinâmico | Tabelas e colunas são emparelhadas dinamicamente com base em etiquetas governadas usando has_tag() e has_tag_value(). |
Sem emparelhamento dinâmico. Filtros e máscaras estão ligados a tabelas e colunas específicas. |
| Entidades alvo |
TO
/
EXCEPT cláusulas na definição de política, além das funções de identidade na UDF. |
Funções de identidade como current_user() na UDF. |
| Governação política | As políticas podem ser definidas pelos proprietários do catálogo ou do esquema. Depois de configuradas a um nível superior, os proprietários das tabelas não podem substituí-las, modificá-las ou removê-las. | Gerido pelos donos das mesas, que podem modificar ou remover filtros e máscaras nas suas próprias mesas. |
| Funcionalidades não suportadas | Operações como viagem no tempo, clonagem e Delta Sharing podem ser executadas pelos responsáveis na cláusula EXCEPT. Ver design falha-fechado. |
Sem EXCEPT cláusula, pelo que as funcionalidades não suportadas permanecem indisponíveis para tabelas protegidas. |
| Políticas eficazes |
SHOW EFFECTIVE POLICIES para ver que políticas se aplicam a uma dada tabela e utilizador. |
Diretamente visível na definição da tabela. |
| Capacidade de auditoria |
DESCRIBE POLICY e SHOW POLICIES para inspecionar as definições de políticas. |
INFORMATION_SCHEMA.ROW_FILTERS e INFORMATION_SCHEMA.COLUMN_MASKS. |
De um modo geral, utilize as políticas ABAC quando:
- Precisas de regras de acesso consistentes em muitas tabelas, esquemas ou catálogos.
- A sua organização divide as tarefas. Por exemplo, os autores das políticas definem regras, e os gestores de dados classificam os dados com etiquetas.
- O seu património de dados está a crescer e quer que as novas tabelas sejam cobertas automaticamente quando são etiquetadas.
- Precisas da
EXCEPTcláusula para permitir operações como viagens no tempo, Delta Sharing, ou otimização total de consultas para princípios específicos.
Em geral, utilize filtros de linha ao nível de tabela e máscaras de coluna quando:
- Cada tabela tem uma lógica estrita e específica que não se generaliza para outras tabelas.
- Os proprietários de tabelas devem gerir diretamente os seus próprios filtros e máscaras, sem um sistema centralizado de etiquetas.
- Tens um conjunto pequeno e estável de tabelas que mudam raramente.
Combinação de ABAC, filtros de linhas ao nível de tabela e máscaras de coluna
ABAC e filtros de linha e máscaras de coluna ao nível da tabela podem coexistir na mesma tabela. No momento da consulta, as políticas são avaliadas independentemente para o utilizador que faz a consulta com as seguintes regras:
- Apenas um filtro de linha distinto pode aplicar-se.
- Apenas uma máscara de coluna distinta pode ser resolvida por coluna.
O Azure Databricks avalia o conflito comparando as funções aplicadas, não a saída dos dados. Se tanto uma política ABAC como um filtro ou máscara ao nível de tabela aplicarem o mesmo filtro de linha ou função de máscara de coluna para o mesmo utilizador, o Azure Databricks permite a execução. Se aplicarem funções diferentes, o Azure Databricks bloqueia o acesso e devolve um erro, mesmo que essas funções produzam saída de dados idêntica.
Para detalhes sobre resolução de conflitos e resolução de problemas, consulte Regras para múltiplos filtros e máscaras.
Segurança a nível de linha e coluna com visões dinâmicas
As vistas dinâmicas também podem implementar segurança ao nível das linhas e das colunas, incorporando funções de identidade como current_user() e is_account_group_member() diretamente na definição da vista. Vistas dinâmicas, filtros de linhas e máscaras de coluna aplicam lógica de filtragem ou transformação no momento da consulta, mas diferem na forma como são geridas, analisadas e expostas aos utilizadores.
| Aplica-se a | Como é gerido | Melhor utilizado para | |
|---|---|---|---|
| Vistas dinâmicas | Views | Lógica SQL na definição de visão | Controlo de acesso detalhado que abrange múltiplas tabelas de origem ou remodela dados para partilha |
| Filtros de linha e máscaras de coluna | Tabelas e colunas | Políticas ABAC ou atribuição ao nível de tabela | Controlo de acesso ao nível da linha e da coluna sem introduzir novos objetos |
Use vistas dinâmicas quando precisar de controlo de acesso detalhado que abrange várias tabelas de origem ou que reformule dados para partilha. Usa filtros de linha e máscaras de coluna quando quiseres controlar o acesso em tabelas individuais sem introduzir novos objetos.
Por exemplo, uma vista 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
As vistas dinâmicas suportam totalmente a otimização de consultas e a aplicação de predicados, assim podem oferecer melhor desempenho de consulta do que filtros de linha e máscaras de colunas. Também impedem os utilizadores de modificar as tabelas subjacentes.
No entanto, as vistas dinâmicas têm duas desvantagens para a governação de dados:
- Auditoria limitada: As vistas dinâmicas não possuem metadados semânticos como etiquetas ou definições de políticas em tabelas de sistemas, o que as torna mais difíceis de auditar em larga escala.
-
Vulnerabilidade à sondagem: Por não terem uma
SecureViewbarreira, não protegem contra ataques de sondagem, onde o utilizador cria um predicado com efeitos secundários para inferir informação sobre linhas filtradas. Veja Compreensão do pushdown de predicados em tabelas protegidas.