Controles de acesso entre mecanismos baseados em atributos (ABAC)
Beta
O ABAC entre mecanismos está em Beta.
Mecanismos externos podem ler tabelas do Unity Catalog com políticas de controles de acesso baseados em atributos (ABAC) aplicadas. Isto permite aplicar filtros de linha e máscaras de coluna ABAC que são impostos dinamicamente, mesmo ao consultar de fora do Databricks.
Quando um mecanismo externo consulta uma tabela com políticas ABAC anexadas, o Databricks usa uma camada de compute serverless especializada para filtrar e retornar dados higienizados para o mecanismo externo.
Requisitos
Para impor controles de acesso refinados em tabelas consultadas de mecanismos externos, é preciso concluir o seguinte:
- Habilitar acesso a dados externos em seu metastore do Unity Catalog.
- Conceder ao principal que consulta o privilégio
EXTERNAL USE SCHEMA. - Use uma tabela gerenciada com commits de catálogo.
- Autentique-se usando OAuth machine-to-machine (M2M) ou um access token pessoal (PAT).
Criar uma tabela Delta gerenciada com commits de catálogo
Para criar uma nova tabela Delta gerenciada com commits de catálogo (requer Databricks Runtime 16.4 e superior):
CREATE TABLE <catalog>.<schema>.<table> (id INT, name STRING)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported') USING delta;
Para atualizar uma tabela gerenciada existente (requer Databricks Runtime 18.0 ou acima):
ALTER TABLE <catalog>.<schema>.<table>
SET TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');
Depois que a tabela for criada, podem ser aplicadas políticas ABAC, filtros de linha ou máscaras de coluna.
Consulte Criar uma política ou Aplicar filtros de linha e máscaras de coluna manualmente.
Ler tabelas com Apache Spark (Delta)
Configure o Apache Spark com Delta-Spark 4.1 ou acima e conector Unity Catalog Spark 0.4 ou acima.
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>",
"spark.sql.catalog.<uc-catalog-name>.auth.type": "oauth",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientId": "<oauth-client-id>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientSecret": "<oauth-client-secret>",
"spark.sql.catalog.<uc-catalog-name>.ServerSidePlanning.enabled": "true",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
"spark.hadoop.fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
"spark.jars.packages": "io.delta:delta-spark_4.0_2.13:4.1.0,io.delta:delta-iceberg_2.13:4.1.0,io.unitycatalog:unitycatalog-spark_2.13:0.4.0,org.apache.hadoop:hadoop-aws:3.4.1"
Defina ServerSidePlanning.enabled como true para ativar a aplicação de controle de acesso detalhado de mecanismos externos.
Substitua as seguintes variáveis:
<uc-catalog-name>: nome do catálogo no Unity Catalog que contém suas tabelas.<workspace-url>: A URL do workspace do Databricks, incluindo o ID do workspace.<oauth-token-endpoint>: URL do endpoint de token OAuth. Consulte Autorizar acesso de entidade de serviço ao Databricks com OAuth.<oauth-client-id>: ID do cliente OAuth para o principal de autenticação.<oauth-client-secret>: Segredo do cliente OAuth para a entidade de autenticação.
Ler tabelas com Apache Spark (Iceberg)
Configurar Apache Spark com Iceberg-Spark 1.11 ou acima e Apache Spark 4.0 ou acima.
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.<uc-catalog-name>": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.<uc-catalog-name>.type": "rest",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg-rest/",
"spark.sql.catalog.<uc-catalog-name>.credential": "<oauth-client-id>:<oauth-client-secret>",
"spark.sql.catalog.<uc-catalog-name>.oauth2-server-uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.warehouse": "<uc-catalog-name>",
"spark.sql.catalog.<uc-catalog-name>.cache-enabled": "false",
"spark.sql.defaultCatalog": "<uc-catalog-name>"
Substitua as seguintes variáveis:
<uc-catalog-name>: nome do catálogo no Unity Catalog que contém suas tabelas.<workspace-url>: A URL do workspace do Databricks, incluindo o ID do workspace.<oauth-token-endpoint>: URL do endpoint de token OAuth. Consulte Autorizar acesso de entidade de serviço ao Databricks com OAuth.<oauth-client-id>: ID do cliente OAuth para o principal de autenticação.<oauth-client-secret>: Segredo do cliente OAuth para a entidade de autenticação.
Consultar dados
Você pode consultar a tabela usando Apache Spark SQL ou APIs do DataFrame. A Databricks impõe políticas de acesso refinadas nos bastidores.
SELECT * FROM <uc-catalog-name>.<schema>.<table>;
Gravações concorrentes durante o planejamento de consultas podem levar à leitura da mesma tabela a partir de diferentes Snapshots de tabela em consultas de auto-join e multi-scan, o que pode resultar em resultados incorretos.
Custos de compute serverless
O ABAC de vários mecanismos utiliza recursos de compute serverless para impor políticas de acesso detalhadas do lado do servidor. Os clientes são cobrados por esses recursos. Para obter informações sobre preços, consulte Preços do produto Beta.
Os usuários com acesso à tabela do sistema de faturamento podem consultar system.billing.usage para verificar o valor que lhes foi cobrado. Por exemplo, a seguinte consulta detalha os custos de compute por usuário:
SELECT usage_date,
sku_name,
identity_metadata.run_as,
SUM(usage_quantity) AS `DBUs consumed by cross-engine ABAC`
FROM system.billing.usage
WHERE usage_date BETWEEN '2026-06-01' AND '2026-07-01'
AND billing_origin_product = 'EXTERNAL_COMPATIBILITY'
GROUP BY 1, 2, 3 ORDER BY 1;
Limitações
- Somente leituras são suportadas de mecanismos externos quando controles de acesso refinados (FGAC) são aplicados. Para escrever, deve-se isentar o principal de escrita da política ABAC.
- Visualizações dinâmicas não são suportadas.
- A projeção de colunas
VARIANTnão é suportada. - Filtragem em
BINARYcolunas não é suportada. - Funções de mascaramento de coluna cujo tipo de retorno difere do tipo da coluna original não são suportadas.
- Grandes agregações poderão apresentar degradação do desempenho.