Unity Catalog 中的特权和安全对象

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 勾选“是” 仅 Unity Catalog

特权是指授予主体的对元存储中的安全对象进行操作的权利。 特权模型和安全对象因你使用的是 Unity Catalog 元存储还是旧版 Hive 元存储而有所不同。 本文介绍 Unity Catalog 的特权模型。 如果使用 Hive 元存储,请参阅 Hive 元存储中的特权和安全对象

注意

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

安全对象

安全对象是在 Unity Catalog 元存储中定义的对象,可以在其上向主体授予特权。 若要管理对任何对象的特权,你必须是其所有者。

语法

securable_object
  { CATALOG [ catalog_name ] |
    CONNECTION connection_name |
    EXTERNAL LOCATION location_name |
    FUNCTION function_name |
    METASTORE |
    SCHEMA schema_name |
    SHARE share_name |
    STORAGE CREDENTIAL credential_name |
    [ TABLE ] table_name |
    VIEW view_name |
    VOLUME volume_name
  }

还可以指定 SERVER 而不是 CONNECTION,指定 DATABASE 而不是 SCHEMA

parameters

  • CATALOGcatalog_name

    控制对整个数据目录的访问。

  • CONNECTIONconnection_name

    控制对连接的访问。

  • EXTERNAL LOCATIONlocation_name

    控制对外部位置的访问。

  • FUNCTIONfunction_name

    控制对用户定义函数的访问。

  • METASTORE

    控制对附加到工作区的 Unity Catalog 元存储的访问。 管理元对存储的特权时,SQL 命令中请勿包含元存储名。 Unity Catalog 会授予或撤销对附加到工作区的元存储的特权。

继承模型

Unity Catalog 中的安全对象是分层的,特权是向下继承的。 这意味着在授予对目录的某个特权时,会自动授予对目录中的所有当前架构和未来架构的该特权。 同样,授予架构的特权由该架构中所有当前的和将来的表和视图继承。

例如,如果你向用户授予对某个架构的 SELECT 特权,系统会自动向用户授予对该架构中所有当前的和将来的表、视图和具体化视图的 SELECT 特权。

权限类型

下表显示了哪些 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 FUNCTION, CREATE TABLE, CREATE MODEL, CREATE VOLUME, CREATE FOREIGN CATALOG, READ VOLUME, WRITE VOLUME, EXECUTE, MODIFY, SELECT, USE SCHEMA
架构 ALL PRIVILEGESAPPLY TAGCREATE FUNCTIONCREATE TABLECREATE MODELCREATE VOLUMEUSE SCHEMA

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

EXECUTEMODIFYSELECTREAD VOLUMEWRITE VOLUME
ALL PRIVILEGESAPPLY TAGSELECTMODIFY
查看 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
提供程序
  • APPLY TAG

    在对象上应用和编辑标记。

  • ALL PRIVILEGES

    用于授予或撤销适用于安全对象及其子对象的所有特权,无需显式指定这些特权。 这会扩展到进行权限检查时的所有可用特权。 在授予时,它不会向用户单独授予每个适用的特权。

    当撤销 ALL PRIVILEGES 时,仅撤销 ALL PRIVILEGES 特权本身。 用户会保留单独授予他们的任何其他权限。

  • BROWSE

    重要

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

    使用目录资源管理器、架构浏览器、搜索结果、世系图、information_schema 和 REST API 查看对象的元数据。 用户不需要对父目录的 USE CATALOG 特权或对父架构的 USE SCHEMA 特权。

  • CREATE CATALOG

    在 Unity Catalog 元存储中创建目录。

  • CREATE CONNECTION

    在 Unity Catalog 元存储中创建外部连接。

  • CREATE EXTERNAL LOCATION

    使用存储凭据创建外部位置。 应用于存储凭据时,允许用户使用存储凭据创建外部位置。 还需向元存储的用户授予此特权,以允许其在该元存储中创建外部位置。

  • CREATE EXTERNAL TABLE

    使用存储凭据外部位置创建外部表

  • CREATE EXTERNAL VOLUME

    使用外部位置创建外部卷

  • CREATE FOREIGN CATALOG

    在外部连接上创建目录。 然后,每个外部目录都会公开联合目标系统中可用的架构。

  • CREATE FUNCTION

    在架构中创建一个函数。 用户还需对目录具有 USE CATALOG 特权,对架构具有 USE SCHEMA 特权。

  • CREATE MANAGED STORAGE

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

  • CREATE MODEL

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

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

  • CREATE PROVIDER

    (针对 Delta Sharing 数据接收方)在 Unity Catalog 元存储中创建提供方。

  • CREATE RECIPIENT

    (针对 Delta Sharing 数据提供方)在 Unity Catalog 元存储中创建接收方。

  • CREATE SCHEMA

    在目录中创建架构。 用户还需要对目录具有 USE CATALOG 特权。

  • CREATE SHARE

    (针对 Delta Sharing 数据提供方)在 Unity Catalog 元存储中创建共享。

  • CREATE STORAGE CREDENTIAL

    在 Unity Catalog 元存储中创建存储凭据。

  • CREATE TABLE

    在架构中创建表或视图。 用户还需对目录具有 USE CATALOG 特权,对架构具有 USE SCHEMA 特权。 若要创建外部表,用户还需要对外部位置或存储凭据具有 CREATE EXTERNAL TABLE 特权。

  • CREATE VOLUME

    在架构中创建卷。 用户还需对目录具有 USE CATALOG 特权,对架构具有 USE SCHEMA 特权。 若要创建外部卷,用户还需要对外部位置具有 CREATE EXTERNAL VOLUME 特权。

  • EXECUTE

    调用用户定义函数。 用户还需对目录具有 USE CATALOG 特权,对架构具有 USE SCHEMA 特权。

  • MODIFY

    对表执行 COPY INTOUPDATEDELETEINSERTMERGE INTO

  • READ FILES

    直接使用存储凭据外部位置查询文件。

  • READ VOLUME

    查询中的文件。

  • SELECT

    查询表或视图,调用用户定义的函数或匿名函数,或者选择 ANY FILE。 用户需要针对表、视图或函数使用 SELECT,针对对象的目录使用 USE CATALOG,以及针对对象的架构使用 USE SCHEMA

  • SET SHARE PERMISSION

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

  • USE CATALOG

    必需,但不足以引用目录中的任何对象。 主体还需要对各个安全对象具有特权。 用户不需要使用 BROWSE 权限读取对象的元数据。

  • USE CONNECTION

    在元存储上使用时,需要读取某个外部连接或所有外部连接的元数据。

  • USE MARKETPLACE ASSETS

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

  • USE PROVIDER

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

  • USE RECIPIENT

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

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

  • USE SCHEMA

    必需,但不足以引用架构中的任何对象。 主体还需要对各个安全对象具有特权。 用户不需要使用 BROWSE 权限读取对象的元数据。

  • USE SHARE

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

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

  • WRITE FILES

    直接对外部凭据外部位置治理的文件执行 COPY INTO

  • WRITE VOLUME

    直接将 COPY INTO 文件复制到中。

示例

-- Grant a privilege to the user alf@melmak.et
> GRANT SELECT ON TABLE t TO `alf@melmak.et`;

-- Revoke a privilege from the general public group.
> REVOKE USE SCHEMA ON SCHEMA some_schema FROM `alf@melmak.et`;