Międzysilnikowa kontrola dostępu oparta na atrybutach (ABAC)

Zewnętrzne silniki mogą odczytywać tabele Unity Catalog przy wymuszonych szczegółowych mechanizmach kontroli dostępu. Obejmuje to zarówno zasady kontroli dostępu opartej na atrybutach (ABAC) oraz autonomiczne filtry wierszy i maski kolumn, które są wymuszane dynamicznie nawet podczas wykonywania zapytań spoza Azure Databricks.

Gdy aparat zewnętrzny wysyła zapytanie do tabeli z zasadami ABAC, filtrami wierszy lub dołączonymi maskami kolumn, Azure Databricks używa wyspecjalizowanej warstwy obliczeniowej bezserwerowej do filtrowania i zwracania oczyszczonych danych do aparatu zewnętrznego.

Requirements

Aby wymusić szczegółową kontrolę dostępu do tabel odpytywanych przez zewnętrzne silniki, należy wykonać następujące czynności:

Utwórz zarządzaną tabelę Delta z zapisami katalogu

Aby utworzyć nową zarządzaną tabelę delty z zatwierdzeniami wykazu (wymaga środowiska Databricks Runtime 16.4 lub nowszego):

CREATE TABLE <catalog>.<schema>.<table> (id INT, name STRING)
USING delta
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

Aby uaktualnić istniejącą tabelę zarządzaną (wymaga środowiska Databricks Runtime 18.0 lub nowszego):

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

Po utworzeniu tabeli można zastosować zasady ABAC, filtry wierszy lub maski kolumn.

Zobacz Tworzenie zasad lub Ręczne stosowanie filtrów wierszy i masek kolumn.

Odczytywanie tabel za pomocą platformy Apache Spark (delta)

Skonfiguruj Apache Spark za pomocą Delta-Spark 4.1 lub nowszego i konektora Spark dla Unity Catalog 0.4 lub nowszego.

"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog",
"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

Ustaw ServerSidePlanning.enabled na true, aby włączyć szczegółowe wymuszanie kontroli dostępu przez zewnętrzne mechanizmy.

Zastąp następujące zmienne:

Odczytywanie tabel w Apache Spark (Iceberg)

Skonfiguruj platformę Apache Spark przy użyciu platformyIceberg-Spark 1.11 lub nowszej oraz platformy Apache Spark 4.0 lub nowszej.

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

Zastąp następujące zmienne:

Wykonywanie zapytań o dane

Do tabeli można wysyłać zapytania za pomocą interfejsów API Apache Spark SQL lub DataFrame. Azure Databricks niejawnie wymusza precyzyjne polityki dostępu.

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

Ostrzeżenie

Współbieżne zapisy podczas planowania zapytań mogą spowodować, że ta sama tabela będzie odczytywana z różnych migawek tabeli w zapytaniach samosprzężenia i wielu skanów, co może spowodować nieprawidłowe wyniki.

Koszty obliczeń bezserwerowych

ABAC w wielu silnikach wykorzystuje bezserwerowe zasoby obliczeniowe do egzekwowania szczegółowych polityk dostępu po stronie serwera. Klienci są obciążani opłatami za te zasoby. Informacje o cenach można znaleźć w Cross-engine ABAC pricing.

Użytkownicy z dostępem do tabeli systemu rozliczeniowego mogą wykonywać zapytania system.billing.usage , aby zobaczyć, ile zostały naliczone opłaty. Na przykład następujące zapytanie dzieli koszty obliczeń według użytkownika:

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;

Ograniczenia

  • Obsługiwane są tylko operacje odczytu z zewnętrznych silników, gdy egzekwowane są mechanizmy szczegółowej kontroli dostępu (FGAC). Aby móc zapisywać, należy zwolnić podmiot zabezpieczeń wykonujący zapis z polityki ABAC.
  • Widoki dynamiczne nie są obsługiwane.
  • Rzutowanie VARIANT kolumn nie jest obsługiwane.
  • Filtrowanie BINARY kolumn nie jest obsługiwane.
  • Funkcje maskowania kolumn, których typ zwracany różni się od oryginalnego typu kolumny, nie są obsługiwane.
  • Duże agregacje mogą mieć spadek wydajności.