如果共享所有者免除提供程序端的策略,则可以通过 OpenSharing 共享受 ABAC 策略保护的表和视图。 本页介绍如何使用行筛选器和列掩码共享表,以及如何在收件人端强制执行策略时处理视图。
先决条件
- Databricks Runtime 16.4 或更高版本,或无服务器计算。
- 帐户管理员或工作区管理员权限(用于创建受管理标记)。
-
MANAGE目标目录或架构的权限。 -
EXECUTE在 UDF 上下功夫。 - 已在提供方和接收方之间配置 OpenSharing。 请参阅 什么是 OpenSharing?。
共享受 ABAC 策略保护的表
如果共享所有者满足这两个条件,则共享所有者可以通过 OpenSharing 共享 ABAC 策略保护的表:
- 他们具有所需的 OpenSharing 权限。
- 它们被豁免于列于
EXCEPT子句中的ABAC策略。
以下示例演示了一个提供程序端策略,其中免除了共享所有者:
-- 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 策略。
共享受 ABAC 策略保护的视图
共享所有者还可以共享引用 ABAC 保护的基表的视图。 与直接共享表格一样,数据的共享所有者必须免除基础表上的 ABAC 策略。
-- 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 已联系你作为潜在受影响的客户,则必须在 2026 年 7 月 22 日之前更新 EXCEPT 子句。
共享表上的收件方本地视图
由于 ABAC 策略只能在表(而不是视图)上设置,因此,如果需要收件人端用户通过视图使用数据,并且必须保护敏感数据,请共享基表并对其设置 ABAC 策略。 收件人通过共享表在本地创建视图,当通过这些视图访问数据时,会遵循基表上的策略。 在这种情况下,无需共享供应商端视图。
此方法的工作原理如下:
- 仅共享基表,而不是视图。 在收件人端,共享表显示在一个只读的增量共享模式中。
- 将 ABAC 策略应用于提供程序端的源表和收件人端的共享表。 提供程序的策略控制提供程序端的访问。 收件人创建一个策略,用于控制收件人端用户的访问权限。
- 在一个单独的架构中,基于共享基表为接收端创建视图。 由于 OpenSharing 架构是只读的,因此必须在不同的架构中创建收件人本地视图。 如果在 OpenSharing 表中设置了 ABAC 策略,则当用户通过收件人本地视图访问数据时,将遵循这些策略。
-- 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;