在 Unity Catalog 中管理权限

本文介绍如何控制对 Unity Catalog 中的数据和其他对象的访问。 若要了解此模型与 Hive 元存储中的访问控制的区别,请参阅使用 Unity Catalog 和旧式 Hive 元存储

谁可以管理特权?

最初,用户无权访问元存储中的数据。 Azure Databricks 帐户管理员、工作区管理员和元存储管理员拥有的默认权限可以管理 Unity Catalog。 请参阅 Unity Catalog 中的管理员权限

Unity Catalog 中的所有安全对象都具有所有者。 对象所有者拥有该对象的全部特权,包括向其他主体授予特权的能力。 请参阅管理 Unity Catalog 对象所有权

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

工作区目录权限

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

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

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

继承模型

Unity Catalog 中的安全对象是分层的,特权是向下继承的。 继承特权的最高级别对象是目录。 这意味着如果授予了对目录或架构的特权,系统会自动授予对该目录或架构内的所有当前和未来对象的特权。 例如,如果向用户授予对目录的 SELECT 权限,则该用户将能够选择(读取)该目录中的所有表和视图。 在 Unity Catalog 元存储上授予的特权不会被继承。

Unity Catalog 对象层次结构

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

注意

如果在公共预览期间(2022 年 8 月 25 日之前)创建了 Unity Catalog 元存储,则你可能在使用不支持当前继承模型的早期权限模型。 可以升级到权限模型版本 1.0 来获得权限继承。 请参阅升级到特权继承

显示、授予和撤销权限

可以使用 SQL 命令、Databricks CLIDatabricks Terraform 提供程序或目录资源管理器管理对元存储对象的权限。

在下面的 SQL 命令中,替换以下占位符值:

  • <privilege-type> 是一种 Unity Catalog 权限类型。 请参阅权限类型
  • <securable-type>:安全对象的类型,例如 CATALOGTABLE。 请参阅安全对象
  • <securable-name>:安全对象的名称。 如果安全对象类型是 METASTORE,则不要提供安全对象名称。 假定它是附加到工作区的元存储。
  • <principal> 是用户、服务主体(由其 applicationId 值表示)或组。 必须用反引号 (` `) 将包含特殊字符的用户、服务主体和组名括起来。 请参阅主体

显示对 Unity Catalog 元存储中对象的授权

所需的权限:元存储管理员、对象所有者或包含对象的目录或架构的所有者。 还可以查看自己的授权。

目录资源管理器

  1. 在 Azure Databricks 工作区中,单击“目录”图标“目录”。
  2. 选择对象,例如目录、架构、表或视图。
  3. 转到“权限”选项卡。

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

授予对 Unity Catalog 元存储中的对象的权限

所需的权限:元存储管理员、对象所有者或包含对象的目录或架构的所有者。

目录资源管理器

  1. 在 Azure Databricks 工作区中,单击“目录”图标“目录”。
  2. 选择对象,例如目录、架构、表或视图。
  3. 转到“权限”选项卡。
  4. 单击“授予”
  5. 输入用户的电子邮件地址或组的名称。
  6. 选择要授予的权限。
  7. 单击“确定”。

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

撤销对 Unity Catalog 元存储中的对象的权限

所需的权限:元存储管理员、对象所有者或包含对象的目录或架构的所有者。

目录资源管理器

  1. 在 Azure Databricks 工作区中,单击“目录”图标“目录”。
  2. 选择对象,例如目录、架构、表或视图。
  3. 转到“权限”选项卡。
  4. 选择已授予用户、服务主体或组的权限。
  5. 单击“撤销”。
  6. 若要确认,请单击“撤销”。

Sql

在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。

  REVOKE <privilege-type> ON <securable-type> <securable-name> TO <principal>

例如,以下命令会撤销对名为“finance-team”的组的访问权限,以在名为“default”且父目录名为“main”的架构中创建表:

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

显示对元存储的授权

所需的权限:元存储管理员或帐户管理员。还可以查看自己对元存储的授权。

目录资源管理器

  1. 在 Azure Databricks 工作区中,单击“目录”图标“目录”。
  2. 在“目录资源管理器”页标签旁边,单击元存储名称旁边的图标。
  3. 转到“权限”选项卡。

Sql

在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。 可以显示对特定主体的授权,也可以显示对元存储的所有授权。

  SHOW GRANTS [principal] ON METASTORE

授予对元存储的权限

所需的权限:元存储管理员或帐户管理员

目录资源管理器

  1. 在 Azure Databricks 工作区中,单击“目录”图标“目录”。
  2. 在“目录资源管理器”页标签旁边,单击元存储名称旁边的图标。
  3. 在“权限”选项卡上,单击“授权”。
  4. 输入用户的电子邮件地址或组的名称。
  5. 选择要授予的权限。
  6. 单击“确定”。

Sql

  1. 在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。

    GRANT <privilege-type> ON METASTORE TO <principal>`;
    

    授予对元存储的权限时,无需包含元存储名称,因为假定是附加到工作区的元存储。

撤销对元存储的权限

所需的权限:元存储管理员或帐户管理员

目录资源管理器

  1. 在 Azure Databricks 工作区中,单击“目录”图标“目录”。
  2. 在“目录资源管理器”页标签旁边,单击元存储名称旁边的图标。
  3. 在“权限”选项卡上,选择用户或组,然后单击“撤销”。
  4. 若要确认,请单击“撤销”。

Sql

  1. 在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。

    REVOKE <privilege-type> ON METASTORE TO <principal>;
    

    撤销对元存储的权限时,无需包含元存储名称,因为假定是附加到工作区的元存储。