通过


Unity 目录中的访问控制

本页概述了 Unity 目录中的访问控制,包括特权、策略和数据级控件。

访问控制层

Unity 目录中的访问控制基于以下补充模型构建:

  • 工作区级别限制 通过将对象限制为特定工作区来控制用户可以 访问数据的位置
  • 特权和所有权通过在可保护对象上设置权限,来控制可以访问哪些内容。
  • 基于属性的策略 (ABAC)使用受 治理的标记和集中式策略控制哪些数据用户可以访问。
  • 表级筛选和屏蔽 控制用户通过表特定的筛选器和视图在表中能够看到的数据。

这些模型协同工作,在整个数据环境中强制实施安全、精细的访问。

目的 机制
工作区级别限制 限制哪些工作区可以访问特定目录、外部位置和存储凭据 工作区级绑定
特权和所有权 控制对目录、架构、表和其他对象的访问 权限授予用户及群组,对象所有权
基于属性的策略 使用标记和策略动态应用筛选器和掩码 ABAC 策略和管理标记
表级筛选和掩码 控制用户可以在表中查看哪些数据 行筛选器、列掩码、动态视图

工作区级别限制

工作区绑定限制帐户中的工作区可以访问特定目录外部位置和存储凭据。 此访问控制发生在工作区级别,无论用户或组权限如何,都适用。

默认情况下,可从附加到同一元存储的任何工作区访问 Unity Catalog 中的所有目录、外部位置和存储凭据。 使用绑定,可以:

  • 限制对一个或多个指定工作区的访问
  • 使目录在某些工作区中进行只读访问
  • 将环境隔离,例如,将生产数据限制在生产工作区内
  • 将外部位置和存储凭据的使用限制为特定工作区

这些绑定将替代用户级权限。 如果用户对某个对象具有访问权限,但尝试从一个未绑定的工作区访问,则会被拒绝。

有关详细信息,请参阅 限制对特定工作区的目录访问

特权和所有权

Unity 目录中的访问主要受特权和对象所有权控制。 此模型定义谁可以通过分配管理员角色以及跨安全对象授予权限和管理所有权来访问或管理数据和元数据。 本部分介绍如何授予权限、所有权的工作原理以及哪些管理员角色可以跨不同范围管理访问权限。

管理员角色

Unity 目录支持多个管理员角色:

  • 帐户管理员:可以创建元存储、管理身份、分配元存储管理员,以及管理帐户级功能,例如 Delta Sharing 和系统表。
  • 元存储管理员:一个可选但功能强大的角色,可以管理元存储中的所有对象、转移所有权以及分配顶级权限,如CREATE CATALOGCREATE EXTERNAL LOCATION,等等。
  • 工作区管理员:管理标识、工作区级别设置和工作区目录。

有关详细信息,请参阅 Unity 目录中的管理员权限

对象所有权

Unity 目录中的每个安全对象(如目录、架构或表)都有所有者。 所有权授予对该对象的完全控制,包括能够:

  • 读取或修改对象及其元数据
  • 向其他用户授予权限
  • 将所有权转让给另一主体

Unity 目录还支持特权 MANAGE ,允许用户授予访问权限和修改对象,而无需将其设置为所有者。

有关所有权的详细信息,请参阅 “管理 Unity 目录对象所有权”。

对安全对象的权限

在 Unity 目录中,访问控制从特权开始。 你将SELECTMODIFYUSE SCHEMA等权限分配给用户和组,以用于目录、架构、表、视图、卷和函数等安全对象。

权限执行为:

  • 分层:对更高级别的对象(如目录)的权限,可以传递到较低级别的对象(如表)。
  • 委派:每个对象都有一个所有者,他们可以管理该对象并授予对其他人的访问权限。
  • 显式:仅当用户或组被授予相应权限时,才允许访问。 向用户授予他们所在的所有组的权限的合并。

用户可以请求访问他们能够发现的对象,这些对象可以通过 BROWSE 权限或指向对象的直接 URL 来发现,或者当他们在笔记本或 SQL 编辑器中遇到权限被拒绝错误时。 Databricks 建议在目录 BROWSE 上向 All account users 组授予权限,以使对象可被发现并允许用户请求访问权限。 访问请求将发送到配置的目标,例如电子邮件、Slack、Microsoft Teams、Webhook 终结点或重定向 URL。 如果未配置目标,则用户无法请求访问该对象。

有关详细信息,请参阅管理 Unity 目录中的权限Unity 目录权限参考

基于路径的访问的权限缓存

为了提高对云存储进行基于路径的访问的性能,Unity 目录可能会为每个用户和路径缓存最多 60 秒的权限检查结果。 此缓存适用于:

  • 使用 dbutils.fs 命令的文件系统作业
  • 使用 Spark SQL 基于路径的查询

由于此缓存行为,权限授予或撤销可能不会立即反映。 此行为仅影响基于路径的访问。 基于名称的访问(例如, SELECT * FROM catalog.schema.table)不受此缓存的影响。

基于属性的访问控制 (ABAC)

重要

此功能目前以公共预览版提供。

ABAC 是基于标记的集中式策略框架,用于在 Unity 目录中强制实施访问控制。 它使管理员能够定义可缩放的策略,这些策略基于受治理的标记动态应用于目录、架构和表。 策略可以筛选数据或屏蔽敏感值。 Databricks 建议使用 ABAC 进行集中和可缩放的治理,而不是在每个表上单独应用筛选器或掩码。

ABAC 设计为常规用途框架,用于基于元数据属性应用访问控制策略。 它补充了基于特权的控制,支持精细的执行,而无需按对象配置。

主要功能:

  • 标记驱动策略: 使用受治理的标记和用户定义的函数(UDF)定义策略一次,并在多个数据资产中一致地应用策略。
  • 分层强制: 在目录、架构或表级别应用策略,并将自动继承应用到子对象。
  • 集中式、可缩放的治理: 大规模管理访问权限,而无需为每个对象分配单个权限。
  • 动态评估: 基于标记和用户上下文实时评估访问决策。

有关详细信息,请参阅 Unity 目录基于属性的访问控制(ABAC)。

表级筛选和掩码

本部分介绍使用特定于表的逻辑控制用户在查询时可以看到 哪些 数据的机制。 这些包括:

  • 行筛选器和列掩码:将逻辑直接应用于表。
  • 动态视图:通过一个或多个表使用 SQL 定义逻辑。

这些方法可以独立使用,也可以与 ABAC 一起使用,具体取决于治理模型。

行筛选器和列掩码

行筛选器和列掩码使用 UDF 将筛选器或掩码逻辑直接应用于单个表。 如果要在不使用集中式策略管理的情况下强制实施每个表的逻辑,它们非常有用。

有关详细信息,请参阅 行筛选器和列掩码

动态视图

动态视图允许使用 SQL 通过一个或多个表定义逻辑。 它们是只读的,适用于:

  • 应用转换逻辑(例如联接和 CASE 语句)
  • 使用 Delta Sharing 共享筛选后的数据,其中不支持 ABAC。

有关详细信息,请参阅 “创建动态视图”。

何时使用每个访问控制机制

工作区绑定、特权和 ABAC 策略都评估不同级别的访问,它们旨在一起使用。 下表比较了常见访问控制条件:

注释

Databricks 建议使用 ABAC 基于受治理的标记来集中化和扩展访问控制。 仅当需要每表逻辑或尚未采用 ABAC 时,才使用行筛选器和列掩码。

机制 适用于 使用......定义 用例
工作区绑定 目录、外部位置、存储凭据 工作区分配 限制从特定工作区访问对象
特权 目录、架构、表 授予(GRANTREVOKE),所有权 基线访问和委派
ABAC 策略 标记的对象(表、架构) 包含受治理标记和 UDF 的策略 基于标签驱动的集中策略和动态执行
表级行/列筛选器 单个表 表本身上的 UDF 表格特定的过滤或掩盖
动态视图 基于一个或多个表的视图 SQL (包含嵌入的筛选器或掩码) 只读访问、复杂逻辑、Delta Sharing