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

HetuEngine基于MetaStore权限管控

约束:只适用于Hive类型数据源。

HetuEngine多个集群组网进行协同计算时,元数据由管理集群集中管理,计算在所有集群进行,访问HetuEngine集群用户的权限需要在管理集群进行配置,并在所有计算实例添加拥有Hive用户组权限的同名用户。

启用MetaStore鉴权

  1. 登录FusionInsight Manager。
  2. 选择“集群 > 服务 > HetuEngine > 更多 > 停用Ranger鉴权”。
  3. 选择“集群 > 服务 > HetuEngine > 更多 > 重启服务”。
  4. 在HSConsole页面重启计算实例。

MetaStore权限

类似于Hive,HetuEngine也是建立在Hadoop上的数据仓库框架,提供类似SQL的结构化数据。

集群中的各类权限需要先授予角色,然后将用户或者用户组与角色绑定。用户只有绑定角色或者加入绑定角色的用户组,才能获得权限。

权限管理介绍

HetuEngine的权限管理是指HetuEngine中管理用户操作数据库的权限系统,以保证不同用户之间操作数据库的独立性和安全性。如果一个用户想操作另一个用户的表、数据库等,需要获取相应的权限才能进行操作,否则会被拒绝。

HetuEngine权限管理部分集成了Hive权限管理的功能。使用HetuEngine权限管理功能需要使用Hive的MetaStore服务和页面上的赋权功能。

  • 页面赋权:HetuEngine仅支持页面赋权的方式。在Manager的“系统 > 权限”中,可以进行用户、用户组和角色的添加/删除操作,可以对某个角色进行赋权/撤权。
  • 服务获权并判断:当接收到客户端的DDL、DML的SQL命令时,HetuEngine服务会向MetaStore服务获取客户端用户对数据库信息的已有权限,并检查是否包含了所需的所有权限,如果是则继续执行,否则拒绝该用户的操作。当通过了MetaStore的权限检查后,还需进行HDFS的ACLs权限检查。

HetuEngine权限模型

用户使用HetuEngine服务进行SQL操作,必须对HetuEngine数据库和表(含外表和视图)拥有相应的权限。完整的HetuEngine权限模型由元数据权限与HDFS文件权限组成。使用数据库或表时所需要的各种权限都是HetuEngine权限模型中的一种。

  • 元数据权限

    元数据权限即在元数据层上进行权限控制,与传统关系型数据库类似,HetuEngine数据库包含“建表”和“查询”权限,表和列包含“查询”、“插入”、“UPDATE”和“删除”权限。HetuEngine中还包含拥有者权限“OWNERSHIP”和集群管理员权限“ADMIN”。

  • 数据文件权限,即HDFS文件权限

    HetuEngine的数据库、表对应的文件保存在HDFS中。默认创建的数据库或表保存在HDFS目录“/user/hive/warehouse”。系统自动以数据库名称和数据库中表的名称创建子目录。访问数据库或者表,需要在HDFS中拥有对应文件的权限,包含“读”、“写”和“执行”权限。

用户对HetuEngine数据库或表执行不同操作时,需要关联不同的元数据权限与HDFS文件权限。例如,对HetuEngine数据表执行查询操作,需要关联元数据权限“查询”,以及HDFS文件权限“读”和“执行”。

使用FusionInsight Manager界面图形化的角色管理功能来管理HetuEngine数据库和表的权限,只需要设置元数据权限,系统会自动关联HDFS文件权限,减少界面操作,提高效率。

HetuEngine使用场景及对应权限

用户通过HetuEngine服务创建数据库需要加入Hive组,不需要角色授权。用户在Hive和HDFS中对自己创建的数据库或表拥有完整权限,可直接创建表、查询数据、删除数据、插入数据、更新数据以及授权他人访问表与对应HDFS目录与文件。

如果用户访问别人创建的表或数据库,需要授予权限。所以根据HetuEngine使用场景的不同,用户需要的权限可能也不相同。

表1 HetuEngine使用场景

主要场景

用户需要的权限

使用HetuEngine表、列或数据库

使用其他用户创建的表、列或数据库,不同的场景需要不同的权限,例如:

  • 创建表,需要“建表”权限。
  • 查询数据,需要“查询”权限。
  • 插入数据,需要“插入”权限。

在一些特殊HetuEngine使用场景下,需要单独设置其他权限。

表2 HetuEngine授权注意事项

场景

用户需要的权限

创建HetuEngine数据库、表、外表,或者为已经创建的表或外表添加分区,且Hive用户指定数据文件保存在“/user/hive/warehouse”以外的HDFS目录。

需要此目录已经存在,客户端用户是目录的属主,且用户对目录拥有“读”、“写”和“执行”权限。同时用户对此目录上层的每一级目录都拥有“读”和“执行”权限。

操作Hive中所有的数据库和表。

需加入到supergroup用户组,并且授予“ADMIN”权限。

配置表、列和数据库的权限

启用MetaStore鉴权后,使用HetuEngine操作表或者数据库时,如果用户访问别人创建的表或数据库,需要授予对应的权限。为了实现更严格权限控制,HetuEngine也支持列级别的权限控制。如果要访问别人创建的表上某些列,需要授予列权限。

  • 在权限管理中,为了方便用户使用,授予数据库下表的任意权限将自动关联该数据库目录的HDFS权限。为了避免产生性能问题,取消表的任意权限,系统不会自动取消数据库目录的HDFS权限,但对应的用户只能登录数据库和查看表名。
  • 若为角色添加或删除数据库的查询权限,数据库中的表也将自动添加或删除查询权限。此机制为Hive实现,HetuEngine与Hive保持一致。
  • HetuEngine不支持struct数据类型中列名称含有特殊字符(除字母、数字、下划线外的其他字符)。如果struct类型中列名称含有特殊字符,在FusionInsight Manager的“角色”页面进行授权时,该列将无法正确显示。

操作步骤:

  1. 登录FusionInsight Manager页面。
  2. 选择“系统 > 权限 > 角色”。
  3. 单击“添加角色”,输入“角色名称”和“描述”。
  4. “配置资源权限”列表,选择“待操作的集群名称 > Hive”,设置角色权限,请参见表3

    • “Hive管理员权限”:Hive管理员权限。
    • “Hive读写权限”:Hive数据表管理权限,可设置与管理已创建的表的数据操作权限。
    • Hive角色管理支持授予管理员权限、访问表和视图的权限,不支持数据库的授权。
    • Hive管理员权限不支持管理HDFS的权限。
    • 如果数据库中的表或者表中的文件数量比较多,在授权时可能需要等待一段时间。例如表的文件数量为1万时,可能需要等待2分钟。
    表3 设置角色

    任务场景

    角色授权操作

    设置在默认数据库中,查询其他用户表的权限

    1. 在“视图名称”的表格中单击“Hive读写权限”。
    2. 在数据库列表中单击指定的数据库名称,显示数据库中的表。
    3. 在指定表的“权限”列,勾选“查询”。

    设置在默认数据库中,导入数据到其他用户表的权限

    1. 在“视图名称”的表格中单击“Hive读写权限”。
    2. 在数据库列表中单击指定的数据库名称,显示数据库中的表。
    3. 在指定表的“权限”列,勾选“删除”和“插入”。

  1. 单击“确定”完成,返回“角色”页面。

    角色创建完成后,可参考创建HetuEngine用户创建HetuEngine用户,并为其赋予相关角色权限。

SQL语句在HetuEngine中进行处理对应的权限要求如表4所示。

表4 使用HetuEngine表、列或数据

操作场景

用户需要的权限

DESCRIBE TABLE

查询(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)

CREATE TABLE

建表(Create)

ALTER TABLE ADD PARTITION

插入(Insert)

INSERT

插入(Insert)

INSERT OVERWRITE

插入(Insert)、删除(Delete)

ALTER TABLE DROP PARTITION

需要授予Table级别的修改(Alter)、删除(Delete)和Column级别的查询(Select)权限

ALTER DATABASE

Hive管理员权限(Hive Admin Privilege)