Hive 元存储中的特权和安全对象

适用于:check marked yes Databricks SQL check marked yes Databricks Runtime

特权是指授予主体的对元存储中的安全对象进行操作的权利。

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

Hive 元存储中的安全对象

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

要管理任何对象的权限,你必须是其所有者或管理员。

语法

  securable_object
    { ANY FILE |
      CATALOG [ catalog_name ] |
      { SCHEMA | DATABASE } schema_name |
      FUNCTION function_name |
      [ TABLE ] table_name |
      VIEW view_name
      }

parameters

  • ANY FILE

    控制对基础文件系统的访问。

  • CATALOGcatalog_name

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

  • { SCHEMA | DATABASE }schema_name

    控制对架构的访问。

  • FUNCTIONfunction_name

    控制对命名函数的访问。

  • [ TABLE ]table_name

    控制对托管表或外部表的访问。

  • VIEWview_name

    控制对 SQL 视图的访问。

继承模型

Hive 元存储中的安全对象是分层的,特权是向下继承的。 这意味着授予或拒绝对 CATALOG 的某个权限时,会自动授予或拒绝对目录中的所有架构的该权限。 同样,在架构对象上授予的权限会被该架构中的所有对象继承。 此模式适用于所有安全对象。

如果拒绝用户对表的权限,则用户无法通过尝试列出架构中的所有表来查看表。 如果拒绝用户对架构的权限,则用户无法通过尝试列出目录中的所有架构来查看架构是否存在。

权限类型

下表显示了哪些特权与哪些安全对象相关联。

权限类型 ANONYMOUS FUNCTION ANY FILE CATALOG SCHEMA FUNCTION TABLE VIEW
CREATE
MODIFY
READ_METADATA
SELECT
USAGE
  • ALL PRIVILEGES

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

  • CREATE

    在目录或架构中创建对象。

  • MODIFY

    对表执行 COPY INTOUPDATEDELETEINSERTMERGE INTO

    如果 securable_object 是 hive_metastore 或其中的架构,则授予 MODIFY 将对安全对象中所有当前和将来的表和视图授予 MODIFY

  • READ_METADATA

    SHOW 中发现安全对象,并在 DESCRIBE 中询问该对象

    如果安全对象是 hive_metastore 目录或其中的架构,则授予 READ_METADATA 将对安全对象内所有当前和将来的表和视图授予 READ_METADATA

  • READ FILES

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

  • SELECT

    查询表或视图,调用用户定义的函数或匿名函数,或者选择 ANY FILE。 用户针对表、视图或函数需要 SELECT,并且针对对象的架构和目录需要 USAGE

    如果安全对象是 hive_metastore 或其中的架构,则授予 SELECT 将在安全对象内的所有当前和将来的表和视图上授予 SELECT

  • USAGE

    必需,但不足以引用目录或架构中的任何对象。 主体还需要对各个安全对象具有特权。

  • WRITE FILES

    直接对外部凭据外部位置治理的文件执行 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 USAGE ON SCHEMA some_schema FROM `alf@melmak.et`;