
# HetuEngine用户权限说明
#### 操作场景
在集群未启用Kerberos认证（普通模式）时提供了Ranger权限模型，默认未开启Ranger权限模型，MRS 3.2.0-LTS.1（须安装3.2.0.1.10及以上补丁）及之后版本支持开启Ranger鉴权。HetuEngine在集群已启用Kerberos认证（安全模式）时提供了以下两种权限管控方式，默认使用Ranger权限模型。
- Ranger权限管控方式，可参考[HetuEngine基于Ranger权限管控]。
- Metastore权限管控方式，可参考[HetuEngine基于MetaStore权限管控]。
 
Ranger和MetaStore的差异如[表1]所示，两者都支持用户、用户组以及角色的鉴权。
 表1Ranger和MetaStore差异 
| 权限管控方式    | 权限模型 | 支持的数据源                                                                  | 描述                    |
|:---|:---|:---|:---|
| 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数据源列脱敏。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
HetuEngine服务在切换权限控制类型时，需要重启整个HetuEngine服务，包括HSConsole页面上正在运行的HetuEngine计算实例。
 #### HetuEngine基于Ranger权限管控
新安装集群默认采用Ranger进行鉴权，对于历史版本升级集群或者手动停用了Ranger鉴权的集群，可参考如下操作重新启用Ranger鉴权。
启用Ranger鉴权的集群，管理员可通过Ranger为HetuEngine用户配置操作数据源的数据库、表、列的管理权限，详情请参考[添加HetuEngine的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1862.html)。
1. 登录MRS集群Manager。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. MRS 3.3.0-LTS及之后版本，集群未启用Kerberos认证（普通模式）时需添加"ranger.usersync.sync.source"参数，集群已启用Kerberos认证（安全模式）不执行此步骤。 
   1. 选择"集群 \> 服务 \> Ranger \> 配置 \> 全部配置"。
   
   2. 搜索参数"ranger.usersync.config.expandor"，在该参数的值中填入自定义参数，名称为"ranger.usersync.sync.source"，值为"ldap"并保存。
   
   3. 选择"概览 \> 更多 \> 重启服务"，输入密码，根据界面提示重启Ranger。
   
   
   MRS 3.5.0-LTS及之后版本，集群未启用Kerberos认证（普通模式）时添加"ranger.usersync.sync.source"参数的操作步骤如下：
   1. 选择"集群 \> 服务 \> Ranger \> 配置 \> 全部配置"。
   
   2. 搜索参数"ranger.usersync.sync.source"，确保其值为"ldap"并保存。
   
   3. 选择"概览 \> 更多 \> 重启服务"，输入密码，根据界面提示重启Ranger。
    
   
   
3. 选择"集群 \> 服务 \> HetuEngine \> 更多 \> 启用Ranger鉴权"。
4. 选择"集群 \> 服务 \> HetuEngine \> 更多 \> 重启服务"。
5. 在HSConsole页面重启计算实例。
 
 #### HetuEngine基于MetaStore权限管控
- 约束与限制 只适用于Hive类型的数据源。HetuEngine多个集群组网进行协同计算时，元数据由管理集群集中管理，计算在所有集群进行，访问HetuEngine集群用户的权限需要在管理集群进行配置，并在所有计算实例添加拥有Hive用户组权限的同名用户。
  

- 启用MetaStore鉴权
  1. 登录MRS集群Manager。 登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
     
  
  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使用场景的不同，用户需要的权限可能也不相同。
  表2HetuEngine使用场景 
  | **主要场景**             | **用户需要的权限**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
  |:---|:---|
  | 使用HetuEngine表、列或数据库。 | 使用其他用户创建的表、列或数据库，不同的场景需要不同的权限，例如： - 创建表，需要"建表"权限。  - 查询数据，需要"查询"权限。  - 插入数据，需要"插入"权限。   |
     
  在一些特殊HetuEngine使用场景下，需要单独设置其他权限。
  表3HetuEngine授权注意事项 
  | **场景**                                                                                 | **用户需要的权限**                                                                 |
  |:---|:---|
  | 创建HetuEngine数据库、表、外表，或者为已经创建的表或外表添加分区，且Hive用户指定数据文件保存在"/user/hive/warehouse"以外的HDFS目录。 | 需要此目录已经存在，客户端用户是目录的属主，且用户对目录拥有"读"、"写"和"执行"权限。同时用户对此目录上层的每一级目录都拥有"读"和"执行"权限。 |
  | 操作Hive中所有的数据库和表。                                                                       | 需加入到supergroup用户组，并且授予"ADMIN"权限。                                            |
     
  
- 配置表、列和数据库的权限。 启用MetaStore鉴权后，使用HetuEngine操作表或者数据库时，如果用户访问别人创建的表或数据库，需要授予对应的权限。为了实现更严格权限控制，HetuEngine也支持列级别的权限控制。如果要访问别人创建的表上某些列，需要授予列权限。
  ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
  - 在权限管理中，为了方便用户使用，授予数据库下表的任意权限将自动关联该数据库目录的HDFS权限。为了避免产生性能问题，取消表的任意权限，系统不会自动取消数据库目录的HDFS权限，但对应的用户只能登录数据库和查看表名。
  
  - 若为角色添加或删除数据库的查询权限，数据库中的表也将自动添加或删除查询权限。此机制为Hive实现，HetuEngine与Hive保持一致。
  
  - HetuEngine不支持struct数据类型中列名称含有特殊字符（除字母、数字、下划线外的其他字符）。如果struct类型中列名称含有特殊字符，在Manager的"角色"页面进行授权时，该列将无法正确显示。
   
  操作步骤：
  1. 登录MRS集群Manager。
  
  2. 选择"系统 \> 权限 \> 角色"。
  
  3. 单击"添加角色"，输入"角色名称"和"描述"。
  
  4. 在"配置资源权限"列表，选择"集群 \> Hive"，设置角色权限，请参见[表4]。
     - "Hive管理员权限"：Hive管理员权限。
     
     - "Hive读写权限"：Hive数据表管理权限，可设置与管理已创建的表的数据操作权限。
     
     
     ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
     - Hive角色管理支持授予管理员权限、访问表和视图的权限，不支持数据库的授权。
     
     - Hive管理员权限不支持管理HDFS的权限。
     
     - 如果数据库中的表或者表中的文件数量比较多，在授权时可能需要等待一段时间。例如表的文件数量为1万时，可能需要等待2分钟。
      
      表4设置角色 
     | 任务场景                    | 角色授权操作                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
     |:---|:---|
     | 设置在默认数据库中，查询其他用户表的权限    | 1. 在"视图名称"的表格中单击"Hive读写权限"。  2. 在数据库列表中单击指定的数据库名称，显示数据库中的表。  3. 在指定表的"权限"列，勾选"查询"。        |
     | 设置在默认数据库中，导入数据到其他用户表的权限 | 1. 在"视图名称"的表格中单击"Hive读写权限"。  2. 在数据库列表中单击指定的数据库名称，显示数据库中的表。  3. 在指定表的"权限"列，勾选"删除"和"插入"。   |
        
     
  
  
  
  5. 单击"确定"完成，返回"角色"页面。
     ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
     角色创建完成后，可参考[创建HetuEngine权限角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1714.html)创建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）                        |
     
  
 
