ABACの要件、割り当て、および制限
このページでは、Unity Catalogにおける属性ベースアクセス制御(ABAC)の要件、ポリシーの割り当て、および現在の制限事項について説明します。
コンピュート要件
ABAC ポリシーを使用するには、次のコンピュート構成のいずれかを使用する必要があります。
- サーバーレスコンピュート
- Databricks Runtime 16.4 以降の標準コンピューティング
- 専用コンピューティングDatabricks Runtime 16.4 以降(詳細なアクセス制御フィルタリングが有効)
古いランタイムを必要とするワークロードの実行方法については、 「古いランタイムからのアクセス」を参照してください。
管理タグの要件
ABAC ポリシーでは、非管理タグではなく、管理タグを使用します。 管理タグは、誰が作成、割り当て、管理できるかを決定するアクセス制御を備えたアカウント レベルで定義されます。 詳細については、管理タグを参照してください。
タグの割り当てまたは変更後、変更が反映されるまで数分かかる場合があります。
ポリシーの割り当て
リソース | 上限 |
|---|---|
メタストアごとのポリシー | 10,000 |
カタログまたはスキーマごとのポリシー | 100 |
テーブルごとのポリシー | 50 |
ポリシーごとのプリンシパル ( | 20 |
| 3 |
管理タグのクォータなどの詳細については、 「サービスの制限」を参照してください。
ABACの制限
古いランタイムからのアクセス
Databricks Runtimeバージョン 16.4 より前の標準および専用のコンピュートは、ABAC で保護されたテーブルにアクセスできません。 古いランタイムで実行し続けるために特定のワークロードが必要な場合は、ABAC ポリシーを広範囲に適用するのではなく、特定のグループに適用します。 ポリシーを適用するユーザーまたはプリンシパルのみをそのグループに追加し、 EXCEPT句を使用して古いランタイムワークロードを実行するプリンシパルを除外します。グループ外のユーザーは、基となるテーブルへの完全なアクセス権を保持します。これにより、サポートされているランタイムへの移行中も、ワークロードは引き続きテーブルにアクセスできるようになります。
ビューに関するABACポリシー
ABAC ポリシーをビューに直接適用することはできません。 ただし、ユーザーが ABAC でテーブルを参照するビューをクエリする場合、 それらの ビューを介してデータにアクセスする際には、それらの条件が尊重されます。
基となるテーブルに対する ABAC 行フィルタと列マスクは、 セッションユーザーの ID 、つまりクエリを実行している人物を使用して評価されます。ユーザーは、基本テーブル上のABACで定義された、アクセス権限のある行と列の値のみを見ることができます。 基本テーブル上で。 基本テーブルへのアクセスチェックと依存関係へのアクセスチェックは、ビュー所有者のIDを使用するため、ユーザーは基となるテーブルに対する直接的な権限がなくてもビューを照会できます。
ABAC を持つテーブルが関数を介してアクセスされる場合にも、同じセッションユーザー ID モデルが適用されます。
セッションユーザーIDモデルは、ABACの一般提供版リリースと同時に導入されました。従来、ポリシーの評価はビュー所有者または関数定義者のIDを使用して行われていました。詳細については、 2026 年 4 月のリリースノートを参照してください。
ABACのマテリアライズドビューとストリーミングテーブルに関するポリシー
以前は、マテリアライズドビューおよびストリーミング テーブルに関する ABAC ポリシーは、パイプライン所有者または実行者としての ID がポリシーから免除されている場合にのみサポートされていました。 その制限は撤廃されました。
パイプラインがマテリアライズドビューまたはストリーミングテーブルを更新する場合、ポリシーはパイプラインの所有者または実行者のIDを使用して評価されます。そのIDがポリシーの対象となる場合、マテリアライズドビューまたはストリーミングテーブルには、マスクまたはフィルタリングされたデータが永続的に含まれます。Databricks 、 EXCEPT句を使用して更新IDを除外し、 TO句でマスクまたはフィルタリングされたデータを見るべき消費者をターゲットにすることを推奨します。
ABAC ポリシーを使用したDelta Sharingテーブル、またはそれらを参照するビュー
ABAC を含むテーブル または ABAC を含むテーブルを参照するビュー 共有所有者が免除されている場合に限り、 Delta Sharingを通じて共有できます ( EXCEPT条項に記載されています)。 このポリシーは、受信者のアクセス権限を規定するものではありません。受信者は、共有テーブルに独自のABACを適用して、自身側でアクセス制御を強制できます。
- 共有プロバイダーについては、 「ABAC ポリシーによって保護されたテーブルとスキーマを共有に追加する」を参照してください。
- 共有受信者については、 「ABAC で保護されたデータの読み取りと ABAC ポリシーの適用」を参照してください。
Delta SharingをABACと併用する方法の詳細については、 「Delta SharingとABAC」を参照してください。
ABAC ポリシーを使用したテーブルのタイムトラベルとクローン作成
ABAC ポリシーは履歴テーブルのスナップショットに対して評価できないため、アクティブな行フィルターまたは列マスクを持つテーブルではタイムトラベル クエリが失敗します。 深いクローンと浅いクローンも、ABAC ポリシーのあるテーブルではサポートされていません。
これらの操作を有効にするには、サービスプリンシパルまたはグループを作成し、それをポリシーのEXCEPT句に追加します。ポリシーは免除されたプリンシパルに対しては評価されないため、これらの操作は実行できます。
免除された校長は、フィルタリングもマスクもされていないデータを見ることができる。ETLやパイプラインワークロードに使用されるサービスプリンシパルなど、信頼できるIDのみを除外します。
例えば、次のポリシーでは、タイムトラベルクエリやクローン操作を実行できるユーザーetl_service_principalを除くすべてのユーザーのPII列をマスクします。
CREATE POLICY mask_pii
ON CATALOG prod
COLUMN MASK prod.governance.mask_value
TO `account users`
EXCEPT `etl_service_principal`
FOR TABLES
MATCH COLUMNS
has_tag_value('pii', 'ssn') AS ssn
ON COLUMN ssn;
トレンド検索インデックスとABACポリシー
ソース テーブルの ABAC ポリシーは、そのテーブルから作成された地下鉄検索インデックスには適用されません。 インデックスはソーステーブルからすべての行を同期し、クエリを実行する際に行フィルタや列マスクのポリシーを適用しません。
列マスクが設定されているテーブルの場合、同期する列の設定を使用して、マスクされた列をインデックスから除外できます。
同一ユーザーに対して、同じテーブルまたは列に複数のポリシーが存在する
特定のテーブルと特定のユーザーに対しては、解決できる行フィルタは 1 つだけです。また、特定の列と特定のユーザーに対しては、解決できる列マスクは 1 つだけです。 複数のポリシーを定義できますが、ユーザーがテーブルをクエリするときは、1 つのポリシーの条件のみが一致する必要があります。 同じユーザー、テーブル、または列に対して複数の異なる行フィルターまたは列マスクが適用された場合、Databricks はアクセスをブロックし、エラーを返します。同じ引数を持つ同じ行フィルタまたは列マスクUDFに解決される場合、複数のポリシーが許可されます。
詳細については、 「複数のフィルターとマスクに関するルール」を参照してください。
ABACのポリシーと情報スキーマ
ABAC ポリシーの情報スキーマ テーブルはありません。 information_schema.row_filtersとinformation_schema.column_masksテーブルには、テーブルレベルの行フィルターと列マスクのみが表示されます。ABAC ポリシーの定義や、ランタイム時に ABAC ポリシーから派生したフィルターやマスクは表示されません。
ABAC ポリシーを一覧表示するには、 Unity Catalog REST API使用します。 ポリシーの作成、変更、削除イベントは、監査ログシステムテーブルに記録されます。
専用コンピュート上のABAC
専用コンピュートでの ABAC の制限については、 「制限事項」を参照してください。
ABACとテーブルレベルの行フィルターおよび列マスクに共通する制限事項
ABAC とテーブルレベルの行フィルターおよび列マスクの両方に適用される行フィルターおよび列マスクの一般的な制限については、 「制限事項」を参照してください。