Engine-übergreifende attributbasierte Zugriffskontrolle (ABAC)

Important

Cross-Engine ABAC befindet sich in Der Betaversion.

Externe Module können Unity-Katalogtabellen lesen, wobei attributbasierte Zugriffssteuerungsrichtlinien (ABAC) erzwungen werden. Auf diese Weise können Sie ABAC-Zeilenfilter und Spaltenmasken anwenden, die dynamisch erzwungen werden, auch wenn Sie von außerhalb Azure Databricks abfragen.

Wenn ein externes Modul eine Tabelle mit angefügten ABAC-Richtlinien abfragt, verwendet Azure Databricks eine spezielle serverlose Computeebene, um sanitisierte Daten an das externe Modul zu filtern und zurückzugeben.

Requirements

Um differenzierte Zugriffssteuerungen für Tabellen zu erzwingen, die von externen Engines abgefragt werden, müssen Sie Folgendes ausführen:

Erstellen einer verwalteten Delta-Tabelle mit Katalog-Commits

So erstellen Sie eine neue verwaltete Delta-Tabelle mit Katalog-Commits (erfordert Databricks Runtime 16.4 oder höher):

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

Zum Aktualisieren einer vorhandenen verwalteten Tabelle (erfordert Databricks Runtime 18.0 und höher):

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

Nachdem Sie die Tabelle erstellt haben, können Sie ABAC-Richtlinien, Zeilenfilter oder Spaltenmasken anwenden.

Siehe Eine Richtlinie erstellen oder Zeilenfilter und Spaltenmasken manuell anwenden.

Lesen von Tabellen mit Apache Spark (Delta)

Konfigurieren Sie Apache Spark mit Delta-Spark 4.1 oder höher und Unity Catalog Spark Connector 0.4 oder höher.

"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

Setzen Sie ServerSidePlanning.enabled auf true, um die Durchsetzung einer granularen Zugriffskontrolle durch externe Engines zu aktivieren.

Ersetzen Sie die folgenden Variablen:

Lesen von Tabellen mit Apache Spark (Iceberg)

Konfigurieren Sie Apache Spark mit Iceberg-Spark 1.11 oder höher und Apache Spark 4.0 oder höher.

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

Ersetzen Sie die folgenden Variablen:

Abfragedaten

Sie können die Tabelle mit Apache Spark SQL- oder DataFrame-APIs abfragen. Azure Databricks erzwingt präzise Zugriffsrichtlinien hinter den Kulissen.

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

Warning

Gleichzeitige Schreibvorgänge während der Abfrageplanung können dazu führen, dass die gleiche Tabelle aus verschiedenen Tabellenmomentaufnahmen in Self-Join- und Multi-Scan-Abfragen gelesen wird, was zu falschen Ergebnissen führen kann.

Serverlose Computekosten

Das modulübergreifende ABAC verwendet serverlose Computeressourcen, um differenzierte Zugriffsrichtlinien serverseitig zu erzwingen. Kunden werden diesen Ressourcen in Rechnung gestellt. Informationen zu den Preisen finden Sie unter Beta-Produktpreise.

Benutzer mit Zugriff auf die Tabelle des Abrechnungssystems können system.billing.usage abfragen, um zu sehen, wie viel ihnen berechnet wurde. Zum Beispiel zeigt die folgende Abfrage die Aufschlüsselung der Compute-Kosten nach Benutzer.

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;

Einschränkungen

  • Von externen Engines werden nur Lesezugriffe unterstützt, wenn feingranulare Zugriffskontrollen (FGAC) durchgesetzt werden. Um schreiben zu können, müssen Sie den Schreib-Principal von der ABAC-Richtlinie ausschließen.
  • Dynamische Ansichten werden nicht unterstützt.
  • Projizieren von VARIANT Spalten wird nicht unterstützt.
  • Das Filtern nach BINARY Spalten wird nicht unterstützt.
  • Spaltenmaskierungsfunktionen, deren Rückgabetyp sich vom ursprünglichen Typ der Spalte unterscheidet, werden nicht unterstützt.
  • Bei großen Aggregationen kann es zu Leistungsbeeinträchtigungen kommen.