Controles de acesso baseados em atributos (ABAC) entre diferentes mecanismos

Importante

O ABAC entre mecanismos está em versão Beta.

Os motores externos podem ler tabelas do Unity Catalog com políticas de ABAC (controle de acesso baseado em atributos) aplicadas. Isso permite que você aplique filtros de linha ABAC e máscaras de coluna que são aplicados dinamicamente, mesmo ao fazer consultas de fora do Azure Databricks.

Quando um mecanismo externo consulta uma tabela com políticas ABAC anexadas, Azure Databricks usa uma camada de computação especializada sem servidor para filtrar e retornar dados higienizados para o mecanismo externo.

Requirements

Para aplicar controles de acesso granulares em tabelas consultadas por mecanismos externos, você deve concluir as etapas a seguir:

Criar uma tabela Delta gerenciada com confirmações de catálogo

Para criar uma nova tabela Delta gerenciada com confirmações 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 o Databricks Runtime 18.0 e superior):

ALTER TABLE <catalog>.<schema>.<table>
SET TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

Depois de criar a tabela, você pode aplicar políticas ABAC, filtros de linha ou máscaras de coluna.

Consulte Criar uma política ou aplicar manualmente filtros de linha e máscaras de coluna.

Ler tabelas com Apache Spark (Delta)

Configure o Apache Spark com Delta-Spark 4.1 ou posterior e o conector do Spark para Unity Catalog 0.4 ou posterior.

"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.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-azure:3.4.2"

Note

Defina ServerSidePlanning.enabled como true para habilitar a aplicação de controle de acesso granular por mecanismos externos.

Substitua as seguintes variáveis:

Ler tabelas com Apache Spark (Iceberg)

Configure o Apache Spark com Iceberg-Spark 1.11 ou superior e Apache Spark 4.0 ou superior.

"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:

Consultar dados

Você pode consultar a tabela usando AS APIs do Apache Spark SQL ou DataFrame. Azure Databricks impõe políticas de acesso refinadas nos bastidores.

SELECT * FROM <uc-catalog-name>.<schema>.<table>;

Warning

Gravações concorrentes durante o planejamento de consultas podem fazer com que a mesma tabela seja lida a partir de snapshots diferentes em consultas com autojunção e com múltiplas varreduras, o que pode resultar em resultados incorretos.

Custos de computação sem servidor

O ABAC entre mecanismos usa recursos de computação sem servidor para aplicar políticas de acesso granulares no servidor. Os clientes são cobrados por esses recursos. Para obter informações sobre preços, consulte o preço do produto Beta.

Os usuários com acesso à tabela do sistema de cobrança podem consultar system.billing.usage para ver quanto foram cobrados. Por exemplo, a consulta a seguir divide os custos da computação 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 de motores externos são suportadas quando controles de acesso granulares (FGAC) são aplicados. Para escrever, você deve excluir o principal de escrita da política ABAC.
  • Não há suporte para exibições dinâmicas.
  • Não há suporte para projetar VARIANT colunas.
  • Não há suporte para filtragem em BINARY colunas.
  • Não há suporte para funções de mascaramento de coluna cujo tipo de retorno difere do tipo de coluna original.
  • Grandes agregações podem apresentar degradação de desempenho.