Unity Catalog 特权和安全对象

本文介绍 Unity Catalog 特权模型。 若要了解此模型与 Hive 元存储的区别,请参阅使用 Unity Catalog 和旧式 Hive 元存储

注意

本文参考特权模型 1.0 版中的 Unity Catalog 特权和继承模型。 如果在公共预览期间(2022 年 8 月 25 日之前)创建了 Unity Catalog 元存储,可以在升级到特权继承之后升级到特权模型 1.0 版

谁可以管理特权?

特权可由元存储管理员、对象所有者或包含该对象的目录或架构的所有者授予。

如果自动为 Unity Catalog 启用了工作区,则该工作区会默认附加到元存储,并会在元存储中为工作区创建工作区目录。 工作区管理员是工作区目录的默认所有者。 作为所有者,他们可以管理对工作区目录和所有子对象的特权。

所有工作区用户会收到对工作区目录的 USE CATALOG 特权。 工作区用户还会收到对目录中的 default 架构的 USE SCHEMACREATE TABLECREATE VOLUMECREATE MODELCREATE FUNCTIONCREATE MATERIALIZED VIEW 特权。

有关详细信息,请参阅 Unity Catalog 的自动启用

如何管理特权

可以使用 SQL 命令、Databricks CLI 或在目录资源管理器中管理元存储对象的特权。 若要了解如何使用目录资源管理器来管理特权,请参阅在目录资源管理器中管理 Unity Catalog 权限

若要管理 SQL 中的特权,可以在笔记本或 Databricks SQL 查询编辑器中使用 GRANTREVOKE 语句,语法如下:

GRANT privilege_type ON securable_object TO principal

其中:

例如,以下命令向名为“finance-team”的组授予访问权限,以在其本身名为“default”且父目录名为“main”的架构中创建表:

GRANT CREATE TABLE ON SCHEMA main.default TO `finance-team`;

授予或撤消特权的大多数语句都遵循上一示例中所示的语法,声明安全对象类型 (SCHEMA) 后接安全对象的名称 (main.default)。 但是,在授予对元存储的特权时不会包括元存储名称,因为假定将使用附加到工作区的元存储:

GRANT CREATE CATALOG ON METASTORE TO `account users`;

有关使用 SQL 命令授予特权的详细信息,请参阅 Unity Catalog 中的特权和安全对象

还可通过使用 Databricks Terraform 提供程序和 databricks_grants 来管理特权。

继承模型

Unity Catalog 中的安全对象是分层的,特权是向下继承的。 继承特权的最高级别对象是目录。 这意味着如果授予了对目录或架构的特权,系统会自动授予对该目录或架构内的所有当前和未来对象的特权。 在 Unity Catalog 元存储上授予的特权不会被继承。

例如,以下命令将对 main 目录的任何架构中的所有表和视图的 SELECT 权限授予 finance 组:

GRANT SELECT ON CATALOG main TO finance;

同样,可以在架构上执行授权,以便获取更小的访问范围:

GRANT SELECT ON SCHEMA main.default TO finance;

继承模型提供了一种为数据设置默认访问规则的简便方法。 例如,以下命令可支持机器学习团队在架构中创建表并读取彼此的表:

CREATE CATALOG ml;
CREATE SCHEMA ml.team_sandbox;
GRANT USE_CATALOG ON CATALOG ml TO ml_team;
GRANT USE_SCHEMA ON SCHEMA ml.team_sandbox TO ml_team;
GRANT CREATE TABLE ON SCHEMA ml.team_sandbox TO ml_team;
GRANT SELECT ON SCHEMA ml.team_sandbox TO ml_team;

对象的所有者将自动被授予对该对象的所有权限。 此外,对象所有者可以授予对对象本身及其所有子对象的权限。 这意味着架构的所有者不会自动拥有架构中表的所有权限,但可以向自己授予对架构中表的权限。

Unity Catalog 中的安全对象

安全对象是在 Unity Catalog 元存储中定义的对象,可以在其上向主体授予特权。 Unity Catalog 中的安全对象是分层的。

Unity Catalog 对象层次结构

安全对象包括:

  • 元存储:元数据的顶级容器。 每个 Unity Catalog 元存储都公开了一个用于组织数据的三级命名空间 (catalog.schema.table)。

  • 目录:用于组织数据资产的对象层次结构的第一层。 外部目录是一种特殊的目录类型,用于在 Lakehouse Federation 方案中镜像外部数据系统中的数据库。

  • 架构:也称为数据库,是对象层次结构的第二层,包含表和视图。

  • :对象层次结构的最底层,可以是外部表(存储在所选云存储中的外部位置),也可以是托管表(存储在你为 Azure Databricks 显式创建的云存储中的存储容器中)。

  • 视图:从一个或多个表中的查询创建的只读对象,包含在架构中。

  • 具体化视图:从一个或多个表中的查询创建的只读对象,包含在架构中。 其结果反映上次刷新时的数据状态。

  • VOLUME:对象层次结构的最底层,可以是外部卷(存储在所选云存储中的外部位置),也可以是托管卷(存储在你为 Azure Databricks 显式创建的云存储的存储容器中)。

  • 已注册的模型:包含在架构中的 MLflow 注册模型

  • 函数:包含在架构中的用户定义的函数。 请参阅 Unity Catalog 中的用户定义函数 (UDF)

  • 外部位置:包含对存储凭据和云存储路径的引用的对象,包含在 Unity Catalog 元存储中。

  • 存储凭据:封装长期云凭据的对象,该凭据可用于访问 Unity Catalog 元存储中包含的 Cloud Storage。

  • CONNECTION:指定用于在 Lakehouse Federation 方案中访问外部数据库系统的路径和凭据。

  • 共享:为要使用 Delta Sharing 进行共享的表提供逻辑分组。 共享包含在 Unity Catalog 元存储中。

  • 收件人:确定可以使用 Delta Sharing 与其共享数据的组织或用户组的对象。 这些对象包含在 Unity Catalog 元存储中。

  • 提供商:表示组织的对象,该组织已使用 Delta Sharing 提供数据进行共享。 这些对象包含在 Unity Catalog 元存储中。

Unity Catalog 中安全对象的特权类型

下表列出了适用于 Unity Catalog 中每个安全对象的特权类型:

安全对象 权限
元存储 CREATE CATALOGCREATE CONNECTIONCREATE EXTERNAL LOCATIONCREATE PROVIDERCREATE RECIPIENTCREATE SHARECREATE STORAGE CREDENTIALSET SHARE PERMISSIONUSE MARKETPLACE ASSETSUSE PROVIDERUSE RECIPIENTUSE SHARE
目录 ALL PRIVILEGESAPPLY TAGBROWSECREATE SCHEMAUSE CATALOG

默认情况下,所有用户在 main 目录中都有 USE CATALOG 权限。

以下特权类型适用于目录中的安全对象。 可以在目录级别授予这些特权,以将其应用于目录中相关的当前对象和未来对象。

CREATE FUNCTIONCREATE TABLECREATE MODELCREATE VOLUMECREATE FOREIGN CATALOGREAD VOLUMEREFRESHWRITE VOLUMEEXECUTEMODIFYSELECTUSE SCHEMA
架构 ALL PRIVILEGESAPPLY TAGCREATE FUNCTIONCREATE TABLECREATE MODELCREATE VOLUMECREATE MATERIALIZED VIEWUSE SCHEMA

以下特权类型适用于架构中的安全对象。 可以在架构级别授予这些特权,以将其应用于架构中相关的当前对象和未来对象。

EXECUTEMODIFYSELECTREAD VOLUMEREFRESHWRITE VOLUME
ALL PRIVILEGESAPPLY TAGMODIFYSELECT
具体化视图 ALL PRIVILEGESAPPLY TAGREFRESHSELECT
查看 ALL PRIVILEGESAPPLY TAGSELECT
音量 ALL PRIVILEGESREAD VOLUMEWRITE VOLUME
外部位置 ALL PRIVILEGESBROWSECREATE EXTERNAL TABLECREATE EXTERNAL VOLUMEREAD FILESWRITE FILESCREATE MANAGED STORAGE
存储凭据 ALL PRIVILEGESCREATE EXTERNAL LOCATIONCREATE EXTERNAL TABLEREAD FILESWRITE FILES
连接 ALL PRIVILEGESCREATE FOREIGN CATALOGUSE CONNECTION
函数 ALL PRIVILEGESEXECUTE
已注册的模型 ALL PRIVILEGESAPPLY TAGEXECUTE
共享 SELECT(可授予给 RECIPIENT
Recipient
提供程序

管理元对存储的特权时,SQL 命令中请勿包含元存储名。 Unity Catalog 授予或撤销对附加到工作区的元存储的特权。 例如,以下命令向名为 engineering 的组授予权限,允许其在附加到工作区的元存储中创建目录:

GRANT CREATE CATALOG ON METASTORE TO engineering

常规 Unity Catalog 特权类型

本部分提供通常适用于 Unity Catalog 的特权类型的详细信息。

所有特权

适用对象类型:CATALOGEXTERNAL LOCATIONSTORAGE CREDENTIALSCHEMAFUNCTIONREGISTERED MODELTABLEMATERIALIZED VIEWVIEW,VOLUME

用于授予或撤销适用于安全对象及其子对象的所有特权,无需显式指定这些特权。

在授予有关对象的 ALL PRIVILEGES 时,它不会在授权时向用户单独授予每个适用的特权。 相反,它在进行权限检查时扩展到所有可用特权。

在撤销 ALL PRIVILEGES 时,将会撤销 ALL PRIVILEGES 特权,并且也会撤销授予用户对于对象的任何显式特权。

注意

在层次结构中的更高级别应用时,此特权功能强大。 例如,GRANT ALL PRIVILEGES ON CATALOG main TO analysts 将授予分析师团队对目录中每个对象(架构、表、视图、函数)的所有权限。

应用标记

适用对象类型:CATALOGSCHEMAREGISTERED MODELTABLEMATERIALIZED VIEWVIEW

允许用户在对象上添加和编辑标记。 向表或视图授予 APPLY TAG 还会启用列标记。

用户还必须对其父目录具有 USE CATALOG 特权,对其父架构具有 USE SCHEMA 特权。

BROWSE

适用的对象类型:CATALOGEXTERNAL LOCATION

重要

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

允许用户使用 Catalog Explorer、架构浏览器、搜索结果、世系图、information_schema、REST API 查看对象的元数据。

用户不需要对父目录的 USE CATALOG 特权或对父架构的 USE SCHEMA 特权。

CREATE CATALOG

适用的对象类型:Unity Catalog 元存储

允许用户在 Unity Catalog 元存储中创建目录。 若要创建外部目录,还必须对包含外部目录的连接或元存储具有 CREATE FOREIGN CATALOG 特权。

CREATE CONNECTION

适用的对象类型:Unity Catalog 元存储

允许用户在 Lakehouse Federation 方案中创建与外部数据库的连接。

CREATE EXTERNAL LOCATION

适用的对象类型:Unity Catalog 元存储、STORAGE CREDENTIAL

若要创建外部位置,用户必须对要在外部位置引用的元存储和存储凭据具有此权限。

CREATE EXTERNAL TABLE

适用的对象类型:EXTERNAL LOCATIONSTORAGE CREDENTIAL

使用户可使用外部位置或存储凭据直接在云租户中创建外部表。 Databricks 建议在外部位置而不是存储凭据上授予此特权(由于其范围为路径,因此可以更好地控制用户可在云租户中创建外部表的位置)。

创建外部卷

适用的对象类型:EXTERNAL LOCATION

允许用户使用外部位置创建外部卷。

创建外部目录

适用的对象类型:CONNECTION

允许用户在 Lakehouse Federation 方案中使用与外部数据库的连接来创建外部目录。

CREATE FUNCTION

适用的对象类型:SCHEMA

允许用户在架构中创建函数。 由于继承了特权,因此还可以授予对目录的 CREATE FUNCTION 权限,这使用户可以在目录中的任何现有架构或未来的架构中创建函数。

用户还必须对其父目录具有 USE CATALOG 特权,对其父架构具有 USE SCHEMA 特权。

CREATE MODEL

适用的对象类型:SCHEMA

允许用户在架构中创建 MLflow 注册模型。 由于继承了特权,因此还可以授予对目录的 CREATE MODEL 权限,这使用户可以在目录中的任何现有架构或未来的架构中创建注册模型。

用户还必须对其父目录具有 USE CATALOG 特权,对其父架构具有 USE SCHEMA 特权。

CREATE MANAGED STORAGE

适用的对象类型:EXTERNAL LOCATION

允许用户在目录级或架构级指定用于存储托管表的位置,覆盖元存储的默认根存储。

CREATE SCHEMA

适用的对象类型:CATALOG

使用户可以创建架构。 用户还必须对目录具有 USE CATALOG 特权。

创建存储凭据

适用的对象类型:Unity Catalog 元存储

允许用户在 Unity Catalog 元存储中创建存储凭据。

不能授予服务主体,无论是 Microsoft Entra ID(旧称 Azure Active Directory)还是本机 Azure Databricks 服务主体。

CREATE TABLE

适用的对象类型:SCHEMA

使用户可以在架构中创建表或视图。 由于继承了特权,因此还可以授予对目录的 CREATE TABLE 权限,这使用户可以在目录中的任何现有架构或未来的架构中创建表或视图。

用户还必须对其父目录具有 USE CATALOG 特权,对其父架构具有 USE SCHEMA 特权。

CREATE MATERIALIZED VIEW

重要

此功能目前以公共预览版提供。 要注册以进行访问,请填写此表格

适用的对象类型:SCHEMA

允许用户在架构中创建具体化视图。 由于继承了特权,因此还可以授予对目录的 CREATE MATERIALIZED VIEW 权限,这使用户可以在目录中的任何现有架构或未来的架构中创建表或视图。

用户还必须对其父目录具有 USE CATALOG 特权,对其父架构具有 USE SCHEMA 特权。

CREATE VOLUME

适用的对象类型:SCHEMA

允许用户在架构中创建卷。 由于继承了特权,因此还可以授予对目录的 CREATE VOLUME 特权,这使用户可以在目录中的任何现有架构或未来架构中创建卷。

用户还必须对卷的父目录具有 USE CATALOG 特权,对其父架构具有 USE SCHEMA 特权。

EXECUTE

适用的对象类型:FUNCTIONREGISTERED MODEL

允许用户调用用户定义的函数或加载模型进行推理,前提是用户对其父目录具有 USE CATALOG 权限,且对其父架构具有 USE SCHEMA 权限。 对于函数,EXECUTE 会授予查看函数定义和元数据的权限。 对于已注册模型,EXECUTE 会授予查看已注册模型的所有版本的元数据以及下载模型文件的权限。

由于继承了特权,因此可以授予用户对目录或架构的 EXECUTE 特权,这会自动授予用户对目录或架构中所有当前函数和未来函数的 EXECUTE 特权。

管理允许列表

适用的对象类型:Unity Catalog 元存储

允许用户在允许列表中添加或修改 init 脚本、JAR 和 Maven 坐标的路径,该允许列表通过共享访问模式管理启用 Unity Catalog 的群集。 请参阅将共享计算上的库和 init 脚本加入允许列表

MODIFY

适用的对象类型:TABLE

允许用户在表中添加、更新和删除数据,前提是用户拥有对表的 SELECT 权限、对其父目录的 USE CATALOG 权限以及对其父架构的 USE SCHEMA 权限。

由于继承了特权,因此可以授予用户对目录或架构的 MODIFY 特权,这会自动授予用户对目录或架构中所有当前表和未来表的 MODIFY 特权。

READ FILES

适用的对象类型:VOLUMEEXTERNAL LOCATION

使用户可直接从云对象存储读取文件。 Databricks 建议授予对卷的此特权,并针对少数几个用例在外部位置授予此特权。 如需更多指导,请参阅管理外部位置、外部表和外部卷

READ VOLUME

适用的对象类型:VOLUME

允许用户读取存储在卷内的文件和目录(如果该用户还对其父目录具有 USE CATALOG 特权,并对其父架构具有 USE SCHEMA 特权)。

将会继承特权。 如果可以授予用户对目录或架构的 READ VOLUME 特权,则会自动授予用户对目录或架构中所有当前卷和未来卷的 READ VOLUME 特权。

SELECT

适用对象类型:TABLEVIEWMATERIALIZED VIEWSHARE

如果应用于表或视图,用户就可以从表或视图中进行选择,前提是用户对其父目录有 USE CATALOG 权限,对其父架构有 USE SCHEMA 权限。 如果应用于共享,收件人就可以从共享中进行选择。

由于继承了特权,因此可以授予用户对目录或架构的 SELECT 特权,这会自动授予用户对目录或架构中所有当前及未来的表和视图的 SELECT 特权。

USE CATALOG

适用的对象类型:CATALOG

此特权不授予对目录本身的访问权限,但用户需要此特权才能与目录中的任何对象进行交互。 例如,若要从表中选择数据,用户需要具有对该表的 SELECT 特权、对其父目录的 USE CATALOG 特权以及对其父架构的 USE SCHEMA 特权。

如需使目录所有者能够限制各个架构所有者和表所有者可共享其生成数据的程度,这就非常有用。 例如,将 SELECT 授予另一个用户的表所有者不允许该用户对该表进行读取访问,除非还授予他们对其父目录的 USE CATALOG 特权以及对其父架构的 USE SCHEMA 特权。

如果用户具有该目录的 BROWSE 特权,则不需要对父目录具有 USE CATALOG 特权即可读取对象的元数据。

USE CONNECTION

适用的对象类型:CONNECTION

允许用户在 Lakehouse Federation 方案中列出和查看有关外部数据库连接的详细信息。 若要为连接创建外部目录,必须对连接具有 CREATE FOREIGN CATALOG 特权或具有连接所有权。

USE SCHEMA

适用的对象类型:SCHEMA

此特权不授予对架构本身的访问权限,但用户需要此特权才能与架构中的任何对象进行交互。 例如,若要从表中选择数据,用户需要具有对该表的 SELECT 特权、对其父架构的 USE SCHEMA 特权以及对其父目录的 USE CATALOG 特权。

由于继承了特权,因此可以授予用户对目录的 USE SCHEMA 特权,这会自动授予用户对目录中所有当前架构和未来架构的 USE SCHEMA 特权。

如果用户具有该架构或其父目录的 BROWSE 特权,则不需要对父架构具有 USE SCHEMA 特权即可读取对象的元数据。

WRITE FILES

适用对象类型:VOLUMEEXTERNAL LOCATION

使用户可将文件直接写入云对象存储中。 Databricks 建议授予对卷的此特权。 在外部位置谨慎地授予此特权。 如需更多指导,请参阅管理外部位置、外部表和外部卷

WRITE VOLUME

适用的对象类型:VOLUME

允许用户添加、删除或修改存储在卷内的文件和目录(如果该用户还对其父目录具有 USE CATALOG 特权,并对其父架构具有 USE SCHEMA 特权)。

将会继承特权。 如果可以授予用户对目录或架构的 WRITE VOLUME 特权,则会自动授予用户对目录或架构中所有当前卷和未来卷的 WRITE VOLUME 特权。

REFRESH

适用的对象类型:MATERIALIZED VIEW

允许用户刷新具体化视图,前提是用户还对其父目录具有 USE CATALOG 权限,对其父架构具有 USE SCHEMA 权限。

将会继承特权。 向用户授予目录或架构的 REFRESH 权限时,会自动向用户授予对目录或架构中所有当前和将来具体化视图的 REFRESH 权限。

仅适用于 Delta Sharing 或 Databricks Marketplace 的特权类型

本部分提供仅适用于 Delta Sharing 的特权类型的详细信息。

CREATE PROVIDER

适用的对象类型:Unity Catalog 元存储

允许用户在元存储中创建 Delta Sharing 提供程序对象。 提供程序标识使用 Delta Sharing 共享数据的组织或用户组。 接收者的 Databricks 帐户中的用户执行提供程序创建。 请参阅使用 Delta Sharing 安全共享数据和 AI 资产

CREATE RECIPIENT

适用的对象类型:Unity Catalog 元存储

允许用户在元存储中创建 Delta Sharing 接收者对象。 收件人确定可以使用 Delta Sharing 与其共享数据的组织或用户组。 提供程序的 Databricks 帐户中的用户执行收件人创建。 请参阅使用 Delta Sharing 安全共享数据和 AI 资产

CREATE SHARE

适用的对象类型:Unity Catalog 元存储

使用户可在元存储中创建共享。 共享是使用 Delta Sharing 为要共享的表提供逻辑分组

SET SHARE PERMISSION

适用的对象类型:Unity Catalog 元存储

在 Delta Sharing 中,将此特权与 USE SHAREUSE RECIPIENT(或接收方所有权)相结合,可让提供者用户向接收者授予对共享的访问权限。 将此权限与 USE SHARE 相结合,可将共享所有权转移给其他用户、组或服务主体。

使用市场资产

适用的对象类型:Unity Catalog 元存储

默认情况下,为所有 Unity Catalog 元存储启用。 在 Databricks Marketplace 中,此特权为用户提供即时访问或请求访问 Marketplace 列表中共享的数据产品的能力。 它还允许用户访问在提供程序共享数据产品时创建的只读目录。 如果没有此特权,用户将需要 CREATE CATALOGUSE PROVIDER 特权或元存储管理员角色。 这使你能够限制具有这些强大权限的用户数量。

USE PROVIDER

适用的对象类型:Unity Catalog 元存储

在 Delta Sharing 中,为接收者用户授予对接收者元存储及其共享中所有提供者的只读访问权限。 将此特权与 CREATE CATALOG 特权相结合,可让非元存储管理员的接收者用户将共享装载为目录。 这样,你便可以限制具有超级元存储管理员角色的用户数量。

USE RECIPIENT

适用的对象类型:Unity Catalog 元存储

在 Delta Sharing 中,为提供者用户授予对提供者元存储及其共享中所有接收者的只读访问权限。 这样,非元存储管理员的提供者用户就可以查看接收者详细信息、接收者身份验证状态,以及提供者与接收者共享的共享列表。

Databricks 市场中,此操作使提供者用户能够在提供者控制台中查看列表和消费者请求。

USE SHARE

适用的对象类型:Unity Catalog 元存储

在 Delta Sharing 中,为提供者用户授予对提供者元存储中定义的所有共享的只读访问权限。 这样,非元存储管理员的提供者用户就可以列出共享,并将共享中的资产(表和笔记本)与共享接收者一起列出。

Databricks 市场中,此操作使提供者用户能够查看有关列表中共享的数据的详细信息。