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

Ważna

ABAC między silnikami jest w fazie beta.

Silniki zewnętrzne mogą odczytywać tabele Unity Catalog z wymuszonymi zasadami kontroli dostępu opartymi na atrybutach (ABAC). Dzięki temu można stosować filtry wierszy ABAC i maski kolumn, które są dynamicznie wymuszane, nawet podczas wykonywania zapytań spoza Azure Databricks.

Gdy aparat zewnętrzny wysyła zapytanie do tabeli z dołączonymi zasadami ABAC, 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)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported') USING delta;

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

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. Aby uzyskać informacje o cenach, zobacz Cennik produktów w wersji beta.

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.