Important
クロスエンジン ABAC は ベータ版です。
外部エンジンは、きめ細かなアクセス制御が適用された Unity カタログ テーブルを読み取ることができます。 これには、属性ベースのアクセス制御 (ABAC) ポリシーとスタンドアロンの行フィルターと列マスクの両方が含まれ、これらはすべて、Azure Databricks の外部からクエリを実行する場合でも動的に適用されます。
外部エンジンが ABAC ポリシー、行フィルター、または列マスクがアタッチされたテーブルに対してクエリを実行すると、Azure Databricksは特殊なサーバーレス コンピューティング レイヤーを使用して、サニタイズされたデータをフィルター処理して外部エンジンに返します。
Requirements
外部エンジンから照会されたテーブルに対してきめ細かいアクセス制御を適用するには、次の手順を完了する必要があります。
- Unity カタログ メタストアで 外部データ アクセス を有効にします。
- 問い合わせを行うプリンシパルに
EXTERNAL USE SCHEMA特権を付与します。 - カタログ コミットでマネージド テーブルを使用します。
- OAuth マシン間 (M2M) または個人用アクセス トークン (PAT) を使用して認証します。
カタログ コミットを使用してマネージド 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) を使用したテーブルの読み取り
Delta-Spark 4.1 以降と Unity Catalog Spark コネクタ 0.4 以降を使用して Apache Spark を構成します。
"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>: ワークスペース ID を含む Azure Databricks ワークスペース の URL。 -
<oauth-token-endpoint>: OAuth トークン エンドポイントの URL。 Azure Databricks へのサービス プリンシパル アクセスを OAuth で承認する方法については、こちらを参照してください。 -
<oauth-client-id>: 認証プリンシパルの OAuth クライアント ID。 -
<oauth-client-secret>: 認証プリンシパルの OAuth クライアント シークレット。
Apache Spark を使用してテーブルを読み取る (Iceberg)
Iceberg-Spark 1.11 以降と Apache Spark 4.0 以降を使用して Apache Spark を構成します。
"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>: ワークスペース ID を含む Azure Databricks ワークスペース の URL。 -
<oauth-token-endpoint>: OAuth トークン エンドポイントの URL。 Azure Databricks へのサービス プリンシパル アクセスを OAuth で承認する方法については、こちらを参照してください。 -
<oauth-client-id>: 認証プリンシパルの OAuth クライアント ID。 -
<oauth-client-secret>: 認証プリンシパルの OAuth クライアント シークレット。
データのクエリを実行する
Apache Spark SQL または DataFrame API を使用してテーブルのクエリを実行できます。 Azure Databricksは、バックグラウンドできめ細かいアクセス ポリシーを適用します。
SELECT * FROM <uc-catalog-name>.<schema>.<table>;
警告
クエリの計画中に同時に書き込みを行うと、同じテーブルが自己結合クエリとマルチスキャン クエリの異なるテーブル スナップショットから読み取られる可能性があり、結果が正しくない可能性があります。
サーバーレス コンピューティング コスト
クロスエンジン ABAC では、サーバーレス コンピューティング リソースを使用して、きめ細かいアクセス ポリシーをサーバー側に適用します。 顧客はこれらのリソースに対して課金されます。 価格情報については、「 ベータ版製品の価格」を参照してください。
課金システム テーブルにアクセスできるユーザーは、 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;
制限事項
- 詳細なアクセス制御 (FGAC) が適用されている場合、外部エンジンからの読み取りのみがサポートされます。 書き込むには、ABAC ポリシーから書き込みプリンシパルを除外する必要があります。
- 動的ビューはサポートされていません。
-
VARIANT列の投影はサポートされていません。 -
BINARY列でのフィルター処理はサポートされていません。 - 戻り値の型が元の列の型と異なる列マスク関数はサポートされていません。
- 大規模な集計では、パフォーマンスが低下する可能性があります。