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

HetuEngine用户权限说明

HetuEngine在集群已启用Kerberos认证(安全模式)时提供了如下两种权限管控方式,默认使用Ranger权限模型;在集群未启用Kerberos认证(普通模式)时提供了Ranger权限模型,默认未开启Ranger权限模型:

Ranger和MetaStore的差异见下表,两者都支持用户、用户组以及角色的鉴权。

表1 Ranger和MetaSore差异

权限管控方式

权限模型

支持的数据源

描述

Ranger

PBAC

Hive、HBase、Elasticsearch、GaussDB、HetuEngine、ClickHouse、IoTDB、Hudi、MySQL

支持行过滤、列脱敏以及更细粒度的权限管控

MetaStore

RBAC

Hive

-

权限原则与约束

  • HetuEngine访问同集群数据源。

    HetuEngine启用Ranger鉴权,则统一使用Ranger的PBAC权限策略做鉴权。

    HetuEngine停用Ranger鉴权,则统一使用MetaStore的RBAC权限策略做鉴权。

  • HetuEngine访问跨集群数据源。

    同时受HetuEngine端权限和数据源端权限管控(Hive场景下,依赖于HDFS)。

  • 查询视图时,仅需给目标视图授予select权限即可;使用视图联表查询时,需要同时给两者授予select权限。
  • 不支持GaussDB和HetuEngine数据源列脱敏。

HetuEngine服务在切换权限控制类型时,需要重启整个HetuEngine服务,包括HSConsole页面上正在运行的HetuEngine计算实例。

HetuEngine基于Ranger权限管控

新安装集群默认采用Ranger进行鉴权,对于历史版本升级集群或者手动停用了Ranger鉴权的集群,可参考如下操作重新启用Ranger鉴权。

启用Ranger鉴权的集群,管理员可通过Ranger为HetuEngine用户配置操作数据源的数据库、表、列的管理权限,详情请参考添加HetuEngine的Ranger访问权限策略

  1. 登录FusionInsight Manager。
  2. 集群未启用Kerberos认证(普通模式)时需添加“ranger.usersync.sync.source”参数,集群已启用Kerberos认证(安全模式)不执行此步骤。

    1. 选择“集群 > 服务 > Ranger > 配置 > 全部配置”。
    2. 搜索参数“ranger.usersync.config.expandor”,在该参数的值中填入自定义参数,名称为“ranger.usersync.sync.source”,值为“ldap”并保存。
    3. 选择“概览 > 更多 > 重启服务”,输入密码,根据界面提示重启Ranger。

      MRS 3.5.0及以后版本参考如下执行即可:

      集群未启用Kerberos认证(普通模式)时使用Ranger权限管控,需在“集群 > 服务 > Ranger > 配置 > 全部配置”中搜索参数“ranger.usersync.sync.source”,确保其值为“ldap”,否则修改为“ldap”(修改配置后需保存并重启Ranger)。

  3. 选择“集群 > 服务 > HetuEngine > 更多 > 启用Ranger鉴权”。
  4. 选择“集群 > 服务 > HetuEngine > 更多 > 重启服务”。
  5. 在HSConsole页面重启计算实例。

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使用场景的不同,用户需要的权限可能也不相同。

    表2 HetuEngine使用场景

    主要场景

    用户需要的权限

    使用HetuEngine表、列或数据库

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

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

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

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

      任务场景

      角色授权操作

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

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

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

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

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

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

    表5 使用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)