Řízení přístupu na základě atributů napříč enginy (ABAC)

Important

ABAC napříč enginy je ve fázi Beta.

Externí enginy mohou číst tabulky katalogu Unity při vynucování jemně odstupňovaného řízení přístupu. To zahrnuje zásady řízení přístupu na základě atributů (ABAC) i samostatné filtry řádků a masky sloupců, které se dynamicky vynucují i při dotazování z vnějšího Azure Databricks.

Když externí modul dotazuje tabulku se zásadami ABAC, filtry řádků nebo připojenými maskami sloupců, Azure Databricks používá specializovanou bezserverovou výpočetní vrstvu k filtrování a vracení sanitizovaných dat externímu modulu.

Requirements

Pokud chcete vynutit jemně odstupňované řízení přístupu u tabulek dotazovaných z externích modulů, musíte provést následující:

Vytvoření spravované tabulky Delta s potvrzeními katalogu

Vytvoření nové spravované tabulky Delta s potvrzeními katalogu (vyžaduje Databricks Runtime 16.4 a vyšší):

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

Pokud chcete upgradovat existující spravovanou tabulku (vyžaduje Databricks Runtime 18.0 a vyšší):

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

Po vytvoření tabulky můžete použít zásady ABAC, filtry řádků nebo masky sloupců.

Viz Vytvoření zásady nebo Ruční použití filtrů řádků a mask sloupců.

Čtení tabulek pomocí Apache Sparku (Delta)

Nakonfigurujte Apache Spark s Delta-Spark 4.1 nebo novějším a konektorem Unity Catalog Spark 0.4 nebo novějším.

"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

Nastavte ServerSidePlanning.enabled na true, aby se povolilo podrobné vynucování řízení přístupu z externích mechanismů.

Nahraďte následující proměnné:

  • <uc-catalog-name>: Název katalogu Unity, který obsahuje tabulky.
  • <workspace-url>: Adresa URL Azure Databricks workspace, včetně ID pracovního prostoru.
  • <oauth-token-endpoint>: Adresa URL koncového bodu tokenu OAuth. Viz Autorizace přístupu servisního principála k Azure Databricks pomocí OAuth.
  • <oauth-client-id>: ID klienta OAuth pro ověřující subjekt.
  • <oauth-client-secret>: Klientský tajný klíč OAuth pro autentizační subjekt.

Čtení tabulek pomocí Apache Sparku (Iceberg)

Nakonfigurujte Apache Spark s Iceberg-Spark 1.11 nebo novějším a Apache Sparkem 4.0 nebo novějším.

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

Nahraďte následující proměnné:

  • <uc-catalog-name>: Název katalogu Unity, který obsahuje tabulky.
  • <workspace-url>: Adresa URL Azure Databricks workspace, včetně ID pracovního prostoru.
  • <oauth-token-endpoint>: Adresa URL koncového bodu tokenu OAuth. Viz Autorizace přístupu servisního principála k Azure Databricks pomocí OAuth.
  • <oauth-client-id>: ID klienta OAuth pro ověřující subjekt.
  • <oauth-client-secret>: Klientský tajný klíč OAuth pro autentizační subjekt.

Dotaz k datům

K dotazování tabulky můžete použít rozhraní API Apache Spark SQL nebo DataFrame. Azure Databricks na pozadí vynucuje jemně odstupňované zásady přístupu.

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

Výstraha

Souběžné zápisy během plánování dotazů můžou způsobit čtení stejné tabulky z různých snímků tabulek v dotazech s automatickým spojením a vícenásobným prohledáváním, což může vést k nesprávným výsledkům.

Náklady na výpočetní prostředky bez serveru

ABAC napříč enginy používá bezserverové výpočetní prostředky k vynucování jemně odstupňovaných zásad přístupu na straně serveru. Za tyto zdroje jsou zákazníkům účtovány poplatky. Informace o cenách najdete v tématu Ceny produktu Beta.

Uživatelé s přístupem k tabulce fakturačního systému se můžou dotazovat system.billing.usage a zjistit, kolik se jim účtovalo. Například následující dotaz rozdělí náklady na výpočetní prostředky podle uživatele:

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;

Omezení

  • Pokud je vynuceno jemně granulované řízení přístupu (FGAC), jsou z externích enginů podporovány pouze operace čtení. Abyste mohli zapisovat, musíte objekt zabezpečení zápisu vyloučit ze zásad ABAC.
  • Dynamická zobrazení nejsou podporována.
  • Promítání sloupců VARIANT není podporováno.
  • Filtrování sloupců BINARY není podporováno.
  • Funkce maskování sloupců, jejichž návratový typ se liší od původního typu sloupce, nejsou podporovány.
  • Velké agregace můžou zaznamenat snížení výkonu.