跨引擎屬性式存取控制(ABAC)

Important

跨引擎ABAC目前處於 測試階段

外部引擎可在執行細緻存取控制的情況下讀取 Unity 目錄資料表。 這包括基於屬性的存取控制(ABAC)政策,以及獨立的列過濾器和欄位遮罩,即使從 Azure Databricks 外部查詢,這些都會動態執行。

當外部引擎查詢帶有 ABAC 政策、列篩選或欄位遮罩的資料表時,Azure Databricks 會使用專門的無伺服器運算層過濾並將經過消毒的資料回傳給外部引擎。

Requirements

若要對外部引擎查詢的資料表強制執行細緻存取控制,您必須完成以下步驟:

建立使用 catalog commits 的受控 Delta 資料表

要建立一個新的受管理 Delta 表格並包含目錄提交(需 Databricks Runtime 16.4 及以上版本):

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

要升級現有的受管理資料表(需 Databricks Runtime 18.0 及以上版本):

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

建立表格後,你可以套用 ABAC 政策、列篩選器或欄位遮罩。

請參見 「建立政策 」或 「手動套用列篩選與欄位遮罩」。

用 Apache Spark(Delta)讀取表格

請設定 Apache Spark Delta-Spark 4.1 或以上 版本,以及 Unity Catalog Spark 連接器 0.4 或以上

"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

ServerSidePlanning.enabled 設為 true,以啟用由外部引擎進行的細粒度存取控制強制執行。

替代下列變數:

  • <uc-catalog-name>:Unity Catalog 中包含您資料表的目錄名稱。
  • <workspace-url>:Azure Databricks workspace 網址,包含工作區 ID。
  • <oauth-token-endpoint>: OAuth 令牌端點網址。 請參見 使用 OAuth 授權服務主體存取至 Azure Databricks
  • <oauth-client-id>:驗證主體的 OAuth 用戶端識別碼。
  • <oauth-client-secret>:驗證主體的 OAuth 客戶端密碼。

用 Apache Spark(Iceberg)讀取表格

請設定 Apache Spark Iceberg-Spark 1.11 以上 版本,以及 Apache Spark 4.0 或以上版本。

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

替代下列變數:

  • <uc-catalog-name>:Unity Catalog 中包含您資料表的目錄名稱。
  • <workspace-url>:Azure Databricks workspace 網址,包含工作區 ID。
  • <oauth-token-endpoint>: OAuth 令牌端點網址。 請參見 使用 OAuth 授權服務主體存取至 Azure Databricks
  • <oauth-client-id>:驗證主體的 OAuth 用戶端識別碼。
  • <oauth-client-secret>:驗證主體的 OAuth 客戶端密碼。

查詢數據

你可以使用 Apache Spark SQL 或 DataFrame API 查詢資料表。 Azure Databricks 在幕後執行細緻的存取政策。

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

Warning

查詢規劃期間的並行寫入,可能導致在自我聯結和多重掃描查詢中,同一個資料表會從不同的資料表快照讀取,進而可能產生錯誤的結果。

無伺服器計算成本

跨引擎 ABAC 使用無伺服器運算資源,在伺服器端強制執行細緻的存取政策。 客戶需為這些資源付費。 欲了解價格資訊,請參閱 Beta 產品定價

有帳單系統資料表存取權的用戶可以查詢 system.billing.usage 自己被收費了多少。 例如,下列查詢會依使用者細分計算成本:

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

  • 只有在執行細粒度存取控制(FGAC)時,才支援外部引擎的讀取。 要寫書,你必須讓寫作委託人免於ABAC政策的限制。
  • 不支援動態視圖。
  • 不支援投影 VARIANT 資料行。
  • 不支援篩選 BINARY 欄。
  • 不支援回傳類型與原始資料行類型不同的資料行遮罩函式。
  • 大型聚合可能會出現效能下降。