Criar e gerenciar políticas de controle de acesso baseado em atributos (ABAC)
Beta
Esse recurso está na versão beta.
Esta página descreve como configurar políticas de filtro de linha e máscara de coluna no Unity Catalog. Para obter mais informações sobre o controle de acesso baseado em atributos (ABAC) e políticas, consulte Unity Catalog attribute-based access control (ABAC). Para aplicar tags a objetos, consulte Governed tags e Apply tags to Unity Catalog securable objects.
Ativar ABAC
O ABAC beta é ativado no nível workspace. Databricks não pode aplicar o ABAC em operações de leitura em catálogos compartilhados, a menos que o ABAC também esteja ativado em cada workspace que acesse esses catálogos.
Para ativar o ABAC beta, faça o seguinte:
- Como administrador do site workspace, clique em seu nome de usuário na barra superior do site Databricks workspace.
- No menu, selecione Previews .
- Defina a opção Controle de acesso baseado em atributos como Ativado.
requisitos de computação
Para usar políticas ABAC, você deve usar uma das seguintes configurações compute :
- computação sem servidor
- computepadrão no Databricks Runtime 16.4 ou acima
- computededicada no Databricks Runtime 16.4 ou superior com filtragem de controle de acesso de granulação fina habilitada
compute padrão e dedicada executando tempos de execução mais antigos não pode acessar tabelas protegidas por ABAC. Como solução temporária, você pode configurar o ABAC para aplicar somente a um grupo específico. Adicione os usuários que você deseja restringir a esse grupo. Usuários que não estão no grupo ainda podem acessar as tabelas.
Cotas de políticas
A seguir está listado o número de políticas ABAC que você pode criar em diferentes objetos protegíveis:
- Catálogo : 15 apólices por catálogo
- Esquema : 15 políticas por esquema
- Tabela : 5 políticas por tabela
Criar uma política em um objeto
Para criar uma política de filtro de linha ou máscara de coluna, você deve ter:
- O ABAC beta está habilitado no seu workspace. Veja Habilitar ABAC.
- Uma função definida pelo usuário (UDF) existente que implementa a lógica de filtro de linha ou máscara de coluna que o senhor deseja aplicar.
Para melhores práticas, limitações e exemplos de UDFs, consulte UDFs para melhores práticas de políticas ABAC. MANAGEsobre o objeto ou propriedade do objeto.
requisitos de computação
- Você deve usar compute no Databricks Runtime 16.4 ou acima ou serverless compute.
A computação que executa tempos de execução mais antigos não pode acessar tabelas protegidas pelo ABAC. Como solução temporária, você pode configurar o ABAC para ser aplicado somente a um grupo específico. Adicione os usuários que você deseja restringir a esse grupo. Os usuários que não estão no grupo ainda podem acessar as tabelas.
- Catalog Explorer
- SQL
-
Em seu site Databricks workspace, clique em
Catalog .
-
Selecione o objeto que determina o escopo da política, como um catálogo, esquema ou tabela.
-
Clique na guia Políticas .
-
Clique em Nova política .
-
Em Geral , insira um nome e uma descrição para sua política.
-
Em Princípios :
- Em Aplicado a... , pesquise e selecione os princípios que a política governará.
- Em Exceto por... , pesquise e selecione quaisquer diretores a serem excluídos da política. Por exemplo, você pode excluir um usuário que pertence a um grupo ao qual a política se aplica.

-
No alvo Type & :
- Em Tipo de política , selecione Filtro de linha ou Máscara de coluna .
- Em Alvo da política , selecione o escopo da política. Isso pode ser um escopo amplo, como um catálogo ou esquema inteiro, ou um escopo mais restrito, como tabelas ou colunas específicas dentro dele.
- Em Condição em nível de tabela , especifique a condição correspondente às tabelas às quais essa política se aplica. Por exemplo,
hasTag("tag")ouhasTagValue("tag", "value").
-
Em Função , selecione uma função para essa política usar e insira os parâmetros necessários.

-
Clique em Criar política .
A seguir está a sintaxe geral para criar uma política:
CREATE POLICY <policy_name>
ON <securable_type> <securable_name>
COMMENT '<policy_description>'
-- One of the following:
ROW FILTER <udf_name>
| COLUMN MASK <udf_name> ON COLUMN <target_column>
TO <principal_name>[, <principal_name>, ...]
[EXCEPT <principal_name>[, <principal_name>, ...]]
FOR TABLES
[WHEN hasTag('<key>') OR hasTagValue('<key>', '<value>')]
MATCH COLUMNS hasTag('<key>') OR hasTagValue('<key>', '<value>') AS <alias>
USING COLUMNS <alias>[, <alias>, ...];
Quando você define condições de nível de tabela (MATCH COLUMNS), a política se aplica à tabela somente se pelo menos uma coluna satisfizer todas as condições de correspondência de coluna. Se nenhuma das colunas atender a todas as condições listadas, a política não se aplicará à tabela e o Databricks ignorará qualquer filtragem de linha ou mascaramento de coluna.
Por exemplo, se uma política define MATCH COLUMNS condition1, condition2, condition3, a política entra em vigor somente se pelo menos uma coluna na tabela satisfizer todas as três condições. Uma política pode incluir até três condições de coluna em sua cláusula MATCH COLUMNS .
Quando você define condições em nível de tabela (MATCH COLUMNS), a política se aplica à tabela somente se cada condição corresponder a pelo menos uma coluna. Se uma condição não corresponder a nenhuma coluna na tabela, a política não se aplicará à tabela e o Databricks ignorará qualquer filtragem de linha ou mascaramento de coluna.
Por exemplo, se uma política define MATCH COLUMNS condition1, condition2, condition3, a política entrará em vigor somente se cada uma das três condições corresponder a pelo menos uma coluna na tabela.
Uma política pode incluir até três condições de coluna em sua cláusula MATCH COLUMNS .
Este exemplo define uma política de filtro de linhas que exclui as linhas de clientes europeus das consultas feitas por analistas baseados nos EUA:
CREATE POLICY hide_eu_customers
ON SCHEMA prod.customers
COMMENT 'Hide rows with European customers from sensitive tables'
ROW FILTER non_eu_region
TO us_analysts
FOR TABLES
MATCH COLUMNS
hasTag('geo_region') AS region
USING COLUMNS (region);
Este exemplo define uma política de máscara de coluna que oculta os números de previdência social dos analistas dos EUA, exceto para aqueles do grupo admins:
CREATE POLICY mask_SSN
ON SCHEMA prod.customers
COMMENT 'Mask social security numbers'
COLUMN MASK mask_SSN
TO us_analysts
EXCEPT admins
FOR TABLES
MATCH COLUMNS
hasTagValue('pii', 'ssn') AS ssn
ON COLUMN ssn;
Os dados da tag são armazenados como texto simples e podem ser replicados globalmente. Não use nomes de tags, valores ou descritores que possam comprometer a segurança de seu recurso. Por exemplo, não use nomes de tags, valores ou descritores que contenham informações pessoais ou confidenciais.
Editar uma política
Permissões necessárias: MANAGE no objeto ou no proprietário do objeto.
- Catalog Explorer
- SQL
- Em seu site Databricks workspace, clique em
Catalog .
- Selecione o objeto que determina o escopo da política, como um catálogo, esquema ou tabela.
- Clique na guia Políticas .
- Selecione a política e faça edições.
- Clique em Atualizar política .
CREATE OR REPLACE POLICY <policy_name>
ON <securable_type> <securable_name>
COMMENT '<policy_description>'
-- One of the following:
ROW FILTER <udf_name>
| COLUMN MASK <udf_name> ON COLUMN <target_column>
TO <principal_name>[, <principal_name>, ...]
[EXCEPT <principal_name>[, <principal_name>, ...]]
FOR TABLES
[WHEN hasTag('<key>') OR hasTagValue('<key>', '<value>')]
MATCH COLUMNS hasTag('<key>') OR hasTagValue('<key>', '<value>') AS <alias>
USING COLUMNS <alias>[, <alias>, ...];
Excluir uma política
Permissões necessárias: MANAGE no objeto ou no proprietário do objeto.
- Catalog Explorer
- SQL
- Em seu site Databricks workspace, clique em
Catalog .
- Selecione o objeto que determina o escopo da política, como um catálogo, esquema ou tabela.
- Clique na guia Políticas .
- Selecione a política.
- Clique em Excluir política .
DROP POLICY <policy_name> ON <securable_type> <securable_name>
Solução de problemas de vários filtros ou máscaras
O ABAC impõe um limite de um filtro de linha por tabela e uma máscara de coluna por coluna. Isso evita resultados pouco claros quando vários filtros ou máscaras interagem.
Quando o Databricks detecta vários filtros ou máscaras durante a avaliação da política, ele gera um erro INVALID_PARAMETER_VALUE.UC_ABAC_MULTIPLE_ROW_FILTERS ou COLUMN_MASKS_FEATURE_NOT_SUPPORTED.MULTIPLE_MASKS . Esse comportamento é intencional e bloqueia o acesso à tabela até que o conflito seja resolvido.
Compreendendo como ocorrem vários filtros de linha ou máscaras
Vários filtros ou máscaras podem surgir de várias maneiras:
-
Uma única política gera vários filtros ou máscaras.
Isso pode acontecer quando várias colunas correspondem às condições da política. Por exemplo, a política a seguir define um filtro de linha com base em tags de colunas comregion=EMEA:SQLCREATE OR REPLACE POLICY region_filter_policy
ON TABLE my_catalog.my_schema.customer_data
ROW FILTER my_catalog.my_schema.filter_by_region
TO account users
FOR TABLES
MATCH COLUMNS
hasTagValue('region', 'EMEA') AS region_cols
USING COLUMNS (region_cols);Se a tabela
customer_datativer várias tags de coluna comregion=EMEA, esta única política gerará um filtro de linha por coluna correspondente. Quando o Databricks avalia a política, ele detecta vários filtros de linha e gera o erro. -
Várias políticas definem filtros ou máscaras na mesma tabela ou coluna. Se mais de uma política ABAC se aplicar à mesma tabela ou coluna, o Databricks detectará vários filtros ou máscaras eficazes.
-
Uma tabela ou coluna já tem um filtro ou máscara aplicado manualmente. Conflitos também podem ocorrer quando uma tabela ou coluna inclui um filtro de linha ou máscara de coluna aplicado manualmente (não ABAC) e um ou mais filtros ou máscaras definidos pelo ABAC.
Como resolver o erro
Você pode resolver o erro de filtros de várias linhas com qualquer uma das seguintes abordagens:
-
Refine as correspondências de coluna da sua política : atualize a cláusula
MATCH COLUMNSpara ser mais específica, garantindo que ela corresponda a apenas uma coluna. Por exemplo, combine várias condições para restringir a correspondência. -
Ajuste suas tags governadas : revise quais colunas têm as tags governadas que acionam a política. Remova ou modifique essas tags se elas não devem ser incluídas no filtro de linha.
-
Reestruture suas políticas : em vez de depender de condições que podem corresponder a várias colunas, considere criar políticas separadas com segmentação de colunas explícita. Isso lhe dá mais controle sobre quais colunas acionam filtros de linha.