本页介绍如何授予、撤销和检查 Unity 目录安全对象的权限,以及如何管理对象所有权。 有关权限模型、特权继承和所有权的概念背景,请参阅 Unity 目录权限模型概念。
谁可以管理特权?
最初,用户无权访问元存储中的数据。 Azure Databricks帐户管理员、工作区管理员和元存储管理员具有管理 Unity 目录的默认权限。 请参阅 Unity Catalog 中的管理员权限。
Unity Catalog 中的所有安全对象都具有所有者。 对象所有者拥有该对象的全部特权,包括向其他主体授予特权的能力。 所有者可以授予其他用户对对象的 MANAGE 权限,从而允许用户管理该对象的特权。 请参阅 “管理对象所有权”。
以下任一项都可以授予特权:
- 对象的所有者。
- 包含对象的目录或架构的所有者。
- 对对象具有
MANAGE权限的用户。 - 元存储管理员。
帐户管理员还可以直接授予对元数据存储的权限。
工作区目录权限
如果自动为 Unity Catalog 启用了工作区,则该工作区会默认附加到元存储,并会在元存储中为工作区创建工作区目录。 工作区管理员是工作区目录的默认所有者。 作为所有者,他们可以管理对工作区目录和所有子对象的权限。
所有工作区用户都将获得对工作区目录的 USE CATALOG 权限。 工作区用户还拥有目录中 USE SCHEMA 模式的 CREATE TABLE、CREATE VOLUME、CREATE MODEL、CREATE FUNCTION、CREATE MATERIALIZED VIEW 和 default 权限。
有关详细信息,请参阅 Unity Catalog 的自动启用。
显示、授予和撤销权限
可以使用 SQL 命令、Databricks CLI、Databricks Terraform 提供程序或目录资源管理器管理对元存储对象的权限。
在下面的 SQL 命令中,替换以下占位符值:
-
<privilege-type>是一种 Unity Catalog 权限类型。 请参阅权限类型。 -
<securable-type>:安全对象的类型,例如CATALOG或TABLE。 请参阅安全对象 -
<securable-name>:安全对象的名称。 如果安全对象类型是METASTORE,则不要提供安全对象名称。 假定它是附加到工作区的元存储。 -
<principal>是用户、服务主体(由其 applicationId 值表示)或组。 必须用反引号 () 将包含特殊字符( )的用户、服务主体和组名括起来。 请参阅主体。
显示对象的权限
注意
目前,对对象具有 MANAGE 权限的用户无法查看 INFORMATION_SCHEMA中该对象的所有授权。 相反,INFORMATION_SCHEMA 仅显示对象上其自己的授权。 这种行为将在未来得到更正。
具有 MANAGE 特权的用户可以使用 SQL 命令或目录资源管理器查看对象上的所有授权。 请参阅在 Unity Catalog 中管理权限。
所需的权限:
- 元存储管理员、对对象具有
MANAGE权限的用户、对象的所有者或包含该对象的目录或架构的所有者可以查看对对象的所有授予。 - 如果没有上述权限,则只能查看你自己对对象的授权。
目录浏览器
在Azure Databricks工作区中,单击
Catalog。
选择对象,例如目录、架构、表或视图。
转到“权限”选项卡。
SQL
在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。 可以显示对特定主体的授权,也可以显示对安全对象的所有授权。
SHOW GRANTS [principal] ON <securable-type> <securable-name>
例如,以下命令显示对名为“main”的父目录中名为“default”的架构的所有授权:
SHOW GRANTS ON SCHEMA main.default;
该命令返回:
principal actionType objectType objectKey
------------- ------------- ---------- ------------
finance-team CREATE TABLE SCHEMA main.default
finance-team USE SCHEMA SCHEMA main.default
显示我的对象权限
所需的权限:你始终可以查看自己对对象的授权。
目录浏览器
在Azure Databricks工作区中,单击
Catalog。
选择对象,例如目录、架构、表或视图。
转到“权限”选项卡。
如果你不是对象所有者或元存储管理员,则只能查看对对象本身的授权。
SQL
在笔记本或 SQL 查询编辑器中运行以下 SQL 命令,以显示你对对象的授权。
SHOW GRANTS `<user>@<domain-name>` ON <securable-type> <securable-name>
授予对对象的权限
所需的权限:元存储管理员、对象的 MANAGE 权限、对象所有者或包含对象的目录或架构的所有者。
目录浏览器
在Azure Databricks工作区中,单击
Catalog。
选择对象,例如目录、架构、表或视图。
转到“权限”选项卡。
单击“授予”。
输入用户的电子邮件地址或组的名称。
选择要授予的权限。
单击“确定”。
SQL
在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。
GRANT <privilege-type> ON <securable-type> <securable-name> TO <principal>
例如,以下命令向名为“finance-team”的组授予访问权限,以在其本身名为“default”且父目录名为“main”的架构中创建表:
GRANT CREATE TABLE ON SCHEMA main.default TO `finance-team`;
GRANT USE SCHEMA ON SCHEMA main.default TO `finance-team`;
GRANT USE CATALOG ON CATALOG main TO `finance-team`;
请注意,已注册模型是一种函数类型。 若要为模型授予权限,必须使用 GRANT ON FUNCTION。 例如,若要向组 ml-team-acme 授予对模型 EXECUTE 的 prod.ml_team.iris_model 权限,可以使用:
GRANT EXECUTE ON FUNCTION prod.ml_team.iris_model TO `ml-team-acme`;
撤消对对象的权限
所需的权限:元存储管理员、对象的 MANAGE 权限、对象所有者或包含对象的目录或架构的所有者。
目录浏览器
在Azure Databricks工作区中,单击
Catalog。
选择对象,例如目录、架构、表或视图。
转到“权限”选项卡。
选择已授予用户、服务主体或组的权限。
单击“撤销”。
若要确认,请单击“撤销”。
SQL
在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。
REVOKE <privilege-type> ON <securable-type> <securable-name> FROM <principal>
例如,以下命令会撤销对名为“finance-team”的组的访问权限,以在名为“default”且父目录名为“main”的架构中创建表:
REVOKE CREATE TABLE ON SCHEMA main.default FROM `finance-team`;
即使最初未授予指定的特权,REVOKE 语句也会成功。 它可保证权限不存在,无论其以前的状态如何。
显示对元存储的授权
所需的权限:元存储管理员或帐户管理员。还可以查看自己对元存储的授权。
目录浏览器
在Azure Databricks工作区中,单击
Catalog。
在 “目录 ”窗格顶部,单击
并选择 元存储。
单击“权限”选项卡。
SQL
在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。 可以显示对特定主体的授权,也可以显示对元存储的所有授权。
SHOW GRANTS [principal] ON METASTORE
授予对元数据存储的权限
所需的权限:元存储管理员或帐户管理员。
目录浏览器
在Azure Databricks工作区中,单击
Catalog。
在 “目录 ”窗格顶部,单击
并选择 元存储。
在“权限”选项卡上,单击“授权”。
输入用户的电子邮件地址或组的名称。
选择要授予的权限。
单击“确定”。
SQL
在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。
GRANT <privilege-type> ON METASTORE TO <principal>;授予对元存储的权限时,无需包含元存储名称,因为假定是附加到工作区的元存储。
撤销对元数据存储的权限
所需的权限:元存储管理员或帐户管理员。
目录浏览器
在Azure Databricks工作区中,单击
Catalog。
在 “目录 ”窗格顶部,单击
并选择 元存储。
在“权限”选项卡上,选择用户或组,然后单击“撤销”。
若要确认,请单击“撤销”。
SQL
在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。
REVOKE <privilege-type> ON METASTORE FROM <principal>;撤销元存储的权限时,不需要包括元存储名称,因为系统默认使用附加到您工作区的元存储。
管理对象所有权
查看对象的所有者
可使用目录资源管理器或 SQL 语句查看对象的所有者。
所需权限:对对象具有BROWSE权限的任何用户或对象的父级都可以查看对象所有者。
目录浏览器
在Azure Databricks工作区中,单击
Catalog。
选择对象,例如目录、架构、表、视图、卷、外部位置或存储凭据。
如何导航到对象取决于对象。 目录、架构和架构的内容(例如,表和卷)可以在左侧目录窗格中选择。 可以通过单击目录窗格上方的
,并从菜单中选择对象类别,来查找其他对象,例如外部位置或 Delta Sharing 共享。
对于大多数对象,所有者显示在对象详细信息页的“概述”选项卡上。 对于一些对象(例如,外部位置),它显示在对象详细信息页的顶部。
SQL
在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。 替换占位符的值:
-
<securable-type>:安全对象的类型,例如CATALOG或TABLE。 -
<catalog>:当您查看架构或架构内容时,此为父目录。 -
<schema>:如果要查看架构的内容(例如,表或视图),则为父架构。 -
<securable-name>:安全对象的名称。
DESCRIBE <securable-type> EXTENDED <catalog>.<schema>.<securable-name>;
转让所有权
可以使用 目录资源管理器 或 SQL 语句来传输对象的所有者。
所需权限:如果你是当前所有者、元存储管理员或容器的所有者(架构的目录、表的架构)或对对象具有 MANAGE 特权的用户,则可以转让对象所有权。 Delta Sharing 共享对象是一个例外:只有元商店管理员可以转移共享所有权。
为了防止特权升级,只有元存储管理员可以将视图、函数或模型的所有权转让给帐户中的任何用户、服务主体或组。 当前所有者和具有 MANAGE 特权的用户只能将所有权转移给其用户名或他们所属的组。
小窍门
将视图或指标视图的所有权转让给组可实现协作编辑。 当组拥有视图或指标视图时,所有组成员都可以编辑其定义,而数据访问仍仅限于组有权查看的内容。 有关详细指南,请参阅 “启用协作编辑”。
注意
使用 Databricks SQL 创建的具体化视图和流式处理表可以转移所有权。 有关详细信息,请参阅 更改具体化视图的所有者 和 更改流式处理表的所有者。
使用 Lakeflow Spark 声明性管道创建的具体化视图和流式处理表无法直接转移其所有权。 而是更改拥有数据集的管道的运行方式用户。 下次刷新后,所有者将更新为运行方式用户。 请参阅设置以用户身份运行。
目录浏览器
在Azure Databricks工作区中,单击
Catalog。
选择对象,例如目录、架构、表、视图、外部位置或存储凭据。
如何导航到对象取决于对象。 目录、架构和架构的内容(例如,表和卷)可以在左侧目录窗格中选择。 可以通过单击目录窗格上方的
,并从菜单中选择对象类别,来查找其他对象,例如外部位置或 Delta Sharing 共享。
对于大多数对象,所有者显示在对象详细信息页的“概述”选项卡上。 对于一些对象(例如,外部位置),它显示在对象详细信息页的顶部。
点击
,该图标位于所有者旁边。搜索并选择组、用户或服务主体。
单击“ 保存”。
SQL
在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。 替换占位符的值:
-
<securable-type>:安全对象的类型,例如CATALOG或TABLE。 此命令不支持METASTORE作为安全对象。 -
<securable-name>:安全对象的名称。 如果要修改架构或架构的内容,则必须使用完整的三级命名空间 (catalog.schema.object),除非已指定父目录和/或架构。 -
<principal>是用户、服务主体(由其 applicationId 值表示)或组。 必须用反引号 () 将包含特殊字符( )的用户、服务主体和组名括起来。 请参阅主体。
ALTER <securable-type> <securable-name> OWNER TO <principal>;
例如,要将orders表的所有权转让给accounting组:
ALTER TABLE mycatalog.myschema.orders OWNER TO `accounting`;