OpenSharing 和 ABAC

如果共享所有者免除提供程序端的策略,则可以通过 OpenSharing 共享受 ABAC 策略保护的表和视图。 本页介绍如何使用行筛选器和列掩码共享表,以及如何在收件人端强制执行策略时处理视图。

先决条件

  • Databricks Runtime 16.4 或更高版本,或无服务器计算。
  • 帐户管理员或工作区管理员权限(用于创建受管理标记)。
  • MANAGE 目标目录或架构的权限。
  • EXECUTE 在 UDF 上下功夫。
  • 已在提供方和接收方之间配置 OpenSharing。 请参阅 什么是 OpenSharing?

共享受 ABAC 策略保护的表

如果共享所有者满足这两个条件,则共享所有者可以通过 OpenSharing 共享 ABAC 策略保护的表:

  1. 他们具有所需的 OpenSharing 权限。
  2. 它们被豁免于列于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 策略。

-- 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 策略。 收件人通过共享表在本地创建视图,当通过这些视图访问数据时,会遵循基表上的策略。 在这种情况下,无需共享供应商端视图。

此方法的工作原理如下:

  1. 仅共享基表,而不是视图。 在收件人端,共享表显示在一个只读的增量共享模式中。
  2. 将 ABAC 策略应用于提供程序端的源表和收件人端的共享表。 提供程序的策略控制提供程序端的访问。 收件人创建一个策略,用于控制收件人端用户的访问权限。
  3. 在一个单独的架构中,基于共享基表为接收端创建视图。 由于 OpenSharing 架构是只读的,因此必须在不同的架构中创建收件人本地视图。 如果在 OpenSharing 表中设置了 ABAC 策略,则当用户通过收件人本地视图访问数据时,将遵循这些策略。

OpenSharing 收件人本地视图

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