メインコンテンツまでスキップ

オープン共有と ABAC

プロバイダー側で共有所有者がポリシーの適用を免除されている場合、ABAC ポリシーによって保護されているテーブルとビューを OpenSharing を介して共有できます。このページでは、行フィルターと列マスクを使用してテーブルを共有する方法と、受信者側でポリシーを適用する必要がある場合にビューを処理する方法について説明します。

前提条件

  • Databricks Runtime 16.4 以降、またはサーバレスコンピュート。
  • アカウント管理者またはワークスペース管理者の権限(管理タグを作成するため)。
  • MANAGE ターゲットカタログまたはスキーマに対する権限。
  • EXECUTE UDFについて。
  • OpenSharingはプロバイダーと受信者の間で構成されています。「オープン共有とは何ですか?」をご覧ください。

ABACポリシーによって保護されたテーブルの共有

共有所有者は、以下の両方の条件を満たしている場合、OpenSharing を介して ABAC ポリシーによって保護されたテーブルを共有できます。

  1. 必要なOpenSharing権限が付与されています。
  2. それらはABACポリシー(EXCEPT句に記載)の対象外です。

次の例は、共有所有者が免除されるプロバイダー側のポリシーを示しています。

SQL
-- Provider: row filter policy with the share owner exempted
CREATE POLICY hide_eu_customers
ON CATALOG provider_catalog
ROW FILTER hide_eu
TO `account users`
EXCEPT 'share_owner_group'
FOR TABLES
MATCH COLUMNS has_tag('geo_region') AS region
USING COLUMNS (region);

-- Add the table to the share
CREATE SHARE employees_share;
ALTER SHARE employees_share ADD TABLE provider_catalog.hr.employees;
GRANT SELECT ON SHARE employees_share TO RECIPIENT `recipient_org`;

プロバイダーのABACポリシーは、受信者のアクセスを制御しません。共有所有者がプロバイダー側のポリシーの対象外であるため、受信者はデフォルトでフィルタリングされていない、またはマスクされていないデータが表示されます。受領者は、共有テーブルに独自のABACポリシーを適用することで、自身の側でアクセス制御を実施できます。

ABACポリシーで保護されたビューの共有

共有所有者は、ABACによって保護された基盤テーブルを参照するビューを共有することもできます。テーブルを直接共有する場合と同様に、共有所有者は基盤となるテーブルに対するABACポリシーの適用を受けない必要があります。

SQL
-- Provider: row filter policy with the share owner exempted
CREATE POLICY hide_eu_customers
ON CATALOG provider_catalog
ROW FILTER hide_eu
TO `account users`
EXCEPT 'share_owner_group'
FOR TABLES
MATCH COLUMNS has_tag('geo_region') AS region
USING COLUMNS (region);

-- Add the view to the share
ALTER SHARE employees_share ADD VIEW provider_catalog.hr.employees_view AS hr.employees_view;
GRANT SELECT ON SHARE employees_share TO RECIPIENT `recipient_org`;
注記

2026年4月23日より前にビューを共有していた場合、ABACポリシーを更新する必要がある場合があります。この日付より前は、基礎となるテーブルのポリシーから ビュー所有者 が免除される必要がありました。2026年4月23日以降は、代わりに 共有所有者 が免除される必要があります。Databricksから影響を受ける可能性のある顧客として連絡があった場合、EXCEPT条項を更新する期限は2026年7月22日です。

共有テーブル上の受信者ローカルビュー

ABACポリシーはビューではなくテーブルにのみ設定できるため、受信者側のユーザーがビューを介してデータを消費する必要があり、機密データを保護する必要がある場合は、ベーステーブルを共有し、それらにABACポリシーを設定してください。受信者は共有テーブル上にローカルでビューを作成し、それらのビューを介してデータがアクセスされる際には、ベーステーブルのポリシーが尊重されます。この場合、プロバイダー側のビューを共有する必要はありません。

このアプローチは次のとおりです:

  1. ベーステーブルのみを共有し、ビューは共有しないでください。 受信者側では、共有テーブルは読み取り専用の Delta Sharing スキーマに表示されます。
  2. プロバイダー側のソーステーブルと、受信者側の共有テーブルにABACポリシーを適用します。 プロバイダーのポリシーは、プロバイダー側でアクセスを制御します。受信者は、受信者側のユーザーのアクセスを制御するポリシーを作成します。
  3. 受信側で、個別のスキーマにて共有ベーステーブル上にビューを作成します。 OpenSharingスキーマは読み取り専用であるため、受信者側のビューは別のスキーマに作成する必要があります。OpenSharingテーブルにABACポリシーを設定した場合、ユーザーが受信者側のローカルビューを介してデータにアクセスする際に、これらのポリシーは尊重されます。

OpenSharingの受信者のローカルビュー

SQL
-- Recipient: apply an ABAC policy to the shared table
CREATE POLICY hide_eu_customers
ON CATALOG recipient_catalog
ROW FILTER hide_eu
TO `account users`
EXCEPT 'recipient_admins'
FOR TABLES
MATCH COLUMNS has_tag('geo_region') AS region
USING COLUMNS (region);

-- Create a view in a separate schema (delta share schema is read-only)
CREATE VIEW recipient_catalog.analytics.employees_view AS
SELECT * FROM recipient_catalog.delta_share_schema.employees;