Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
- Włącz dostęp do danych zewnętrznych w magazynie metadanych Unity Catalog.
- Udziel podmiotowi wykonującemu zapytanie uprawnienia
EXTERNAL USE SCHEMA. - Użyj tabeli zarządzanej z zatwierdzeniami wykazu.
- Uwierzytelnianie przy użyciu protokołu OAuth machine-to-machine (M2M) lub osobistego tokenu dostępu (PAT).
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:
-
<uc-catalog-name>: nazwa katalogu w Unity Catalog, który zawiera twoje tabele. -
<workspace-url>: adres URL obszaru roboczego usługi Azure Databricks, w tym identyfikator obszaru roboczego. -
<oauth-token-endpoint>: adres URL punktu końcowego tokenu OAuth. Zobacz Autoryzowanie dostępu jednostki usługi do usługi Azure Databricks przy użyciu protokołu OAuth. -
<oauth-client-id>: identyfikator klienta OAuth dla głównego uwierzytelnianego podmiotu. -
<oauth-client-secret>: hasło tajne klienta OAuth dla podmiotu uwierzytelniającego.
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:
-
<uc-catalog-name>: nazwa katalogu w Unity Catalog, który zawiera twoje tabele. -
<workspace-url>: adres URL obszaru roboczego usługi Azure Databricks, w tym identyfikator obszaru roboczego. -
<oauth-token-endpoint>: adres URL punktu końcowego tokenu OAuth. Zobacz Autoryzowanie dostępu jednostki usługi do usługi Azure Databricks przy użyciu protokołu OAuth. -
<oauth-client-id>: identyfikator klienta OAuth dla głównego uwierzytelnianego podmiotu. -
<oauth-client-secret>: hasło tajne klienta OAuth dla podmiotu uwierzytelniającego.
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
VARIANTkolumn nie jest obsługiwane. - Filtrowanie
BINARYkolumn 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.