行筛选器和列掩码

本页提供有关使用行筛选器和列掩码筛选表中敏感数据的指导。

什么是行筛选器?

使用行筛选器可以控制用户可以基于自定义逻辑在表中访问的行。 在查询时,行筛选器会评估条件,并仅返回满足该条件的行。 这通常用于实现行级别安全性,例如,将用户限制为来自特定区域、部门或帐户的记录。

行筛选器定义为 SQL 用户定义的函数(UDF),也可以在 SQL UDF 中包装时合并 Python 或 Scala 逻辑。 可以按表应用行筛选器,也可以使用受治理的标记通过 ABAC 策略集中应用行筛选器。

什么是列掩码?

列掩码控制用户在特定列中看到的值,具体取决于用户是谁。 在查询时,掩码将每个对列的引用替换为掩码函数的结果。 这样就可以根据用户标识或角色对敏感数据(如 SSN 或电子邮件)进行编辑或转换。

每个列可以有一个掩码。 掩码定义为 SQL UDF,并且可以选择性地包装 Python 或 Scala 逻辑,并且必须返回与要屏蔽的列相同的类型的值。 列掩码还可以采用其他列作为输入,例如,根据多个属性改变行为。

与行筛选器一样,列掩码可以按表应用,也可以通过 ABAC 策略集中管理。 它们在查询时运行,并与标准 SQL、笔记本和仪表板无缝集成。

何时应使用动态视图与筛选器和掩码?

动态视图、行筛选器和列掩码都允许你在查询时应用筛选或转换逻辑,但它们在管理、作用域和向用户公开的方式上有所不同。

功能 / 特点 适用于 使用 管理 命名影响 最适合...
动态视图 Views SQL 逻辑 创建新的对象名称 共享筛选的数据或跨多个表
行筛选器 Tables ABAC 或映射表 表名称未更改 绑定到用户或数据标记的行级访问控制
列掩码 表/列 ABAC 或映射表 表名称未更改 根据标识对敏感列数据进行修订
  • 如果需要跨一个或多个源表的只读层,尤其是对于数据共享或跨多个输入应用逻辑,请使用动态视图
  • 如果要将逻辑直接应用于表,而无需更改表名称或引入新对象,请使用行筛选器和列掩码。 可以使用 ABAC 策略(建议)或手动管理这些策略。

有关完整比较,请参阅 访问控制方法比较

如何应用筛选器和掩码

可以通过两种主要方式实现行筛选器和列掩码:

  • 使用 ABAC 策略 (Beta):使用受治理的标记和可重用策略集中应用筛选器和掩码。 此方法可跨目录和架构进行缩放,并减少逐表配置的需求。 ABAC 策略比手动表级策略更安全,因为它们可由高级管理员定义,不能由表所有者重写,这有助于强制实施集中式访问控制。 在许多情况下,它们的性能也更高,因为 ABAC 策略中的筛选和掩码逻辑比在特定于表的 UDF 中更高效地进行评估。 Databricks 建议对大多数用例使用 ABAC。 若要使用 ABAC 应用筛选器和掩码,请参阅 Unity 目录基于属性的访问控制(ABAC)。

  • 每个表的手动分配:通过将函数直接分配给单个表和列来应用筛选器和掩码。 此方法可以使用映射表或其他自定义逻辑。 它允许精细的表特定的控制,但更难缩放和维护。 有关详细信息,请参阅 手动应用行筛选器和列掩码