Motorövergripande attributbaserad åtkomstkontroll (ABAC)

Viktigt!

AbAC för flera motorer finns i Beta.

Externa motorer kan läsa Unity Catalog-tabeller med principer för attributbaserad åtkomstkontroll (ABAC) som verkställs. På så sätt kan du använda ABAC-radfilter och kolumnmasker som tillämpas dynamiskt, även när du frågar utifrån Azure Databricks.

När en extern motor frågar en tabell med ABAC-principer kopplade använder Azure Databricks ett specialiserat serverlöst beräkningslager för att filtrera och returnera sanerade data till den externa motorn.

Requirements

Om du vill tillämpa detaljerade åtkomstkontroller på tabeller som efterfrågas från externa motorer måste du slutföra följande:

Skapa en hanterad Delta-tabell med katalogincheckningar

För att skapa en ny hanterad Delta-tabell med katalogincheckningar (kräver Databricks Runtime 16.4 och senare):

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

Om du vill uppgradera en befintlig hanterad tabell (kräver Databricks Runtime 18.0 och senare):

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

När du har skapat tabellen kan du använda ABAC-principer, radfilter eller kolumnmasker.

Se Skapa en princip eller Tillämpa radfilter och kolumnmasker manuellt.

Läsa tabeller med Apache Spark (Delta)

Konfigurera Apache Spark med Delta-Spark 4.1 eller senare och Unity Catalog Spark Connector 0.4 eller senare.

"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

Ange ServerSidePlanning.enabled till true för att aktivera detaljerad åtkomstkontroll från externa motorer.

Ersätt följande variabler:

  • <uc-catalog-name>: Namnet på katalogen i Unity Catalog som innehåller dina tabeller.
  • <workspace-url>: URL:en för Azure Databricks arbetsyta, inklusive arbetsyte-ID:t.
  • <oauth-token-endpoint>: URL för OAuth-tokenslutpunkt. Se Auktorisera tjänstens huvudnamnsåtkomst till Azure Databricks med OAuth.
  • <oauth-client-id>: OAuth-klient-ID för autentiseringsobjektet.
  • <oauth-client-secret>: OAuth-klienthemlighet för autentiseringsobjektet.

Läsa tabeller med Apache Spark (Iceberg)

Konfigurera Apache Spark med Iceberg-Spark 1.11 eller senare och Apache Spark 4.0 eller senare.

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

Ersätt följande variabler:

  • <uc-catalog-name>: Namnet på katalogen i Unity Catalog som innehåller dina tabeller.
  • <workspace-url>: URL:en för Azure Databricks arbetsyta, inklusive arbetsyte-ID:t.
  • <oauth-token-endpoint>: URL för OAuth-tokenslutpunkt. Se Auktorisera tjänstens huvudnamnsåtkomst till Azure Databricks med OAuth.
  • <oauth-client-id>: OAuth-klient-ID för autentiseringsobjektet.
  • <oauth-client-secret>: OAuth-klienthemlighet för autentiseringsobjektet.

Fråga efter data

Du kan köra frågor mot tabellen med Apache Spark SQL- eller DataFrame-API:er. Azure Databricks tillämpar detaljerade åtkomstprinciper i bakgrunden.

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

Varning

Samtidiga skrivningar under frågeplaneringen kan göra att samma tabell läses från olika ögonblicksbilder av tabellen i frågor med självjoin och i frågor som läser samma tabell flera gånger, vilket kan ge felaktiga resultat.

Serverlösa beräkningskostnader

ABAC med flera motorer använder serverlösa beräkningsresurser för att framtvinga detaljerade åtkomstprinciper på serversidan. Kunder debiteras för dessa resurser. Prisinformation finns i Priser för betaprodukter.

Användare med åtkomst till tabellen för faktureringssystemet kan köra frågor mot system.billing.usage för att se hur mycket de har debiterats. Följande fråga delar till exempel upp beräkningskostnader per användare:

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;

Limitations

  • Endast läsningar stöds från externa motorer när detaljerade åtkomstkontroller (FGAC) tillämpas. För att kunna skriva måste du undanta den skrivande principalen från ABAC-policyn.
  • Dynamiska vyer stöds inte.
  • Det går inte att projicera VARIANT kolumner.
  • Filtrering på BINARY kolumner stöds inte.
  • Kolumnmaskeringsfunktioner vars returtyp skiljer sig från den ursprungliga kolumntypen stöds inte.
  • Stora aggregeringar kan uppleva prestandaförsämring.