更新时间:2024-11-29 GMT+08:00

配置Hive表、列或数据库的权限

操作场景

使用Hive表或者数据库时,如果用户访问别人创建的表或数据库,需要授予对应的权限。为了实现更严格权限控制,Hive也支持列级别的权限控制。如果要访问别人创建的表上某些列,需要授予列权限。以下介绍使用Manager角色管理功能在表授权、列授权和数据库授权三个场景下的操作。

  • 安全模式支持配置Hive表、列或数据库的权限,普通模式不支持配置Hive表、列或数据库的权限。
  • 如果当前组件使用了Ranger进行权限控制,须基于Ranger配置相关策略进行权限管理,具体操作可参考添加Hive的Ranger访问权限策略

前提条件

  • 获取一个拥有管理员权限的用户,例如“admin”。
  • 请参考创建Hive角色,在Manager界面创建一个角色,例如“hrole”,不需要设置Hive权限,设置提交Hql命令到Yarn执行的权限。
  • 在Manager界面创建两个使用Hive的“人机”用户并加入“hive”组,例如“huser1”和“huser2”。“huser2”需绑定“hrole”。使用“huser1”创建一个数据库“hdb”,并在此数据库中创建表“htable”。

操作步骤

  • 表授权

    用户在Hive和HDFS中对自己创建的表拥有完整权限,用户访问别人创建的表,需要授予权限。授予权限时只需要授予Hive元数据权限,HDFS文件权限将自动关联。以授予用户对应角色在表“htable”中查询、插入和删除数据的权限为例,操作步骤如下:

    1. 在FusionInsight Manager界面,选择“系统 > 权限 > 角色”。
    2. 在角色“hrole”所在行,单击“修改”。
    3. 选择“待操作的集群 > Hive > Hive读写权限”。
    4. 在数据库列表中单击指定的数据库名称“hdb”,显示数据库中的表“htable”。
    5. 在表“htable”的“权限”列,勾选“查询”、“插入”和“删除”。
    6. 单击“确定”完成。

在角色管理中,授予角色在Hive外表中查询、插入和删除数据的操作与Hive表相同,授予元数据权限将自动关联HDFS文件权限。

  • 列授权

    用户在Hive和HDFS中对自己创建的表拥有完整权限,用户没有权限访问别人创建的表。如果要访问别人创建的表上某些列,需要授予列权限。授予权限时只需要授予Hive元数据权限,HDFS文件权限将自动关联。以授予用户对应角色在表“htable”的列“hcol”中查询、插入数据的权限为例,操作步骤如下:

    1. 在FusionInsight Manager界面,选择“系统 > 权限 > 角色”。
    2. 在角色“hrole”所在行,单击“修改”。
    3. 选择“待操作的集群 > Hive > Hive读写权限”。
    4. 在数据库列表中单击指定的数据库名称“hdb”,显示数据库中的表“htable”,单击表“htable”,显示表下的列“hcol”。
    5. 在列“hcol”的“权限”列,勾选“查询”和“插入”。
    6. 单击“确定”完成。

在权限管理中,授予元数据权限将自动关联HDFS文件权限,所以列授权后会增加表对应所有文件的HDFS ACL权限。

  • 数据库授权

    用户在Hive和HDFS中对自己创建的数据库拥有完整权限,用户访问别人创建的数据库,需要授予权限。授予权限时只需要授予Hive元数据权限,HDFS文件权限将自动关联。以授予用户对应角色在数据库“hdb”中查询和创建表的权限为例,操作步骤如下,不支持对角色授予数据库其他的操作权限:

    1. 在FusionInsight Manager界面,选择“系统 > 权限 > 角色”。
    2. 在角色“hrole”所在行,单击“修改”。
    3. 选择“待操作的集群 > Hive > Hive读写权限”。
    4. 在数据库“hdb”的“权限”列,勾选“查询”和“建表”。
    5. 单击“确定”完成。
  • 在权限管理中,为了方便用户使用,授予数据库下表的任意权限将自动关联该数据库目录的HDFS权限。为了避免产生性能问题,取消表的任意权限,系统不会自动取消数据库目录的HDFS权限,但对应的用户只能登录数据库和查看表名。
  • 若为角色添加或删除数据库的查询权限,数据库中的表也将自动添加或删除查询权限。
  • 若数据库中分区超过百万级,并且分区都在表目录下。如需加快授权速度,可以在FusionInsight Manager 界面,选择“集群 > 服务 > Hive > 配置 > 全部配置 > MetaStore(角色) > 自定义”,添加“hive-ext.skip.grant.partition”参数,值为“true”。添加该参数后在库授权时会跳过分区扫描。需要重启Metastore实例生效。

相关概念

表1 使用Hive表、列或数据库场景权限一览

操作场景

用户需要的权限

DESCRIBE TABLE

查询(Select)

SHOW PARTITIONS

查询(Select)

ANALYZE TABLE

查询(Select)、插入(Insert)

SHOW COLUMNS

查询(Select)

SHOW TABLE STATUS

查询(Select)

SHOW TABLE PROPERTIES

查询(Select)

SELECT

查询(Select)

EXPLAIN

查询(Select)

CREATE VIEW

查询(Select)、Select授权(Grant Of Select)、建表(Create)

SHOW CREATE TABLE

查询(Select)、Select授权(Grant Of Select)

CREATE TABLE

建表(Create)

ALTER TABLE ADD PARTITION

插入(Insert)

INSERT

插入(Insert)

INSERT OVERWRITE

插入(Insert)、删除(Delete)

LOAD

插入(Insert)、删除(Delete)

ALTER TABLE DROP PARTITION

删除(Delete)

CREATE FUNCTION

Hive管理员权限(Hive Admin Privilege)

DROP FUNCTION

Hive管理员权限(Hive Admin Privilege)

ALTER DATABASE

Hive管理员权限(Hive Admin Privilege)