
# 配置Hive表级联授权功能
#### 操作场景
传统授权模式下，Hive表的权限与底层存储源（HDFS/OBS）的权限是相互独立的，用户若需访问某张Hive 表，不仅要获取该表的访问权限，还需单独申请表对应的存储源路径权限，二次授权流程繁琐且易遗漏，极大增加了运维成本；同时，当Hive表的存储源路径发生变更时，需手动重新配置存储源权限，否则会导致授权失效，影响业务连续性。
Ranger的级联授权是针对存算分离架构设计的高效授权方案，实现Hive表权限与存储源权限的自动关联、联动生效。
- 管理员只需在Ranger页面针对Hive库/表创建一次授权策略，系统会自动识别表对应的存储源（HDFS/OBS）路径，并生成细粒度的存储源访问权限，用户无需感知底层存储路径，也无需进行二次授权。
- 针对已授权的库/表，当存储源路径发生变动时，系统会通过周期同步机制，自动关联新的存储源并更新对应权限，确保授权持续有效。
 
#### 前提条件
**本章节适用于MRS 3.3.0及之后版本的集群，**且使用此功能前还需满足以下条件：
- MRS集群对接的OBS文件系统需开启AccessLabel功能，若未开启，需手动开启，详细操作请联系OBS服务运维人员。
- 针对OBS存储源，需满足以下条件，否则OBS表将授权失败：
  - MRS集群中必须已安装Guardian服务。
  
  - OBS表的授权只能针对用户组。
  
  - MRS 3.5.0之前版本，仅支持已启用Kerberos认证的集群的OBS级联授权。
   
 
#### 约束与限制
- 不支持对视图表进行级联授权。
- 仅支持对数据库/表进行级联授权操作，不支持对分区做级联权限，如果分区路径不在表路径下，则需要用户手动授权分区路径。
- 不支持对Hive Ranger策略中的"Deny Conditions"进行级联授权，即"Deny Conditions"的权限仅限制表权限，不能生成HDFS/OBS存储源端的权限。
- 不支持在Hive Ranger中创建"database"为"\*"且"table"为"\*"的策略。
- 级联授权生成的HDFS/OBS存储源端的权限弱于HDFS Ranger策略的权限，即如果已经对表的HDFS存储源设置了HDFS Ranger权限，则级联权限将不会生效。
- 不支持对存储源为OBS的表级联授权后直接进行**alter** 操作，需要给对应用户组额外授予OBS表路径的父目录的"Read"和"Write"权限才能使用**alter** 功能，且用户组仅由数字0\~9、字母a\~Z、下划线或#组成，且最大长度为52个字符，否则将导致策略添加失败，可参考[管理MRS集群用户组](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0421.html)修改用户组信息。
- MRS 3.6.0-LTS及之后版本，Hive级联授权只支持对本集群所属的OBS桶或并行文件系统进行授权，不支持对其他集群的OBS桶或并行文件系统进行授权。
- MRS 3.6.0-LTS及之后版本，支持对OBS并行文件系统配置级联授权黑名单，即级联授权将跳过对黑名单包含的OBS路径授权，仅对Hive元数据进行授权。 登录FusionInsight Manager页面，选择"集群 \> 服务 \> Ranger \> 配置"，在搜索框中搜索参数"ranger.ext.authorization.cascade.blacklist"进行配置，参数值为"obs://*OBS桶名或并行文件系统名称*/"，只支持配置OBS路径，不支持通配符，多个OBS路径使用逗号分隔，且最多可配置50个OBS路径。
  例如：
  表**tblA**的Location为"obs://obs-test/tblA"，配置的级联授权黑名单为"obs://obs-test/, obs://obs-test1/"。
  那么对表**tblA**授权时，将不会对"obs:///obs-test/tblA"授权，仅对Hive元数据进行授权。
  图1配置级联授权黑名单   
  ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002506438288.png "点击放大") 
 
#### 开启级联授权功能
1. 登录集群Manager页面，选择"集群 \> 服务 \> Ranger \> 配置"。
2. 在搜索框中搜索参数"ranger.ext.authorization.cascade.enable"，修改该参数值为"true"。
3. 单击"保存"，保存配置。
4. 配置保存成功后，单击"实例"，勾选所有RangerAdmin实例，选择"更多 \> 重启实例"，在弹出对话框输入密码，单击"确定"，重启所有RangerAdmin实例。
5. 等待实例重启成功，实例运行状态为"良好"。
 
#### 对接HDFS存储源
HDFS存储源无需进行配置。
#### 对接OBS存储源
- 建表时指定Location为OBS路径：
  1. 已完成存算分离配置，具体请参考[配置Guardian服务对接OBS](https://support.huaweicloud.com/usermanual-mrs/mrs_01_248987.html)章节。
  
  2. 使用Ranger管理员用户登录Ranger WebUI页面，在首页中单击"EXTERNAL AUTHORIZATION"区域的组件插件名称"OBS"，单击"Add New Policy"，为对应用户的用户组赋予OBS存储路径的"Read"和"Write"的权限，详细操作请参见[添加OBS文件的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_248939.html)。
     例如，为"hgroup1"用户组赋予"obs://obs-test/test/"目录的"Read"和"Write"的权限：
     ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001731106649.png "点击放大")
     
  
  3. 在首页中单击"HADOOP SQL"区域的组件插件名称"Hive"。在"Access"页签单击"Add New Policy"为对应用户的用户组添加赋予OBS存储路径的"Read"和"Write"权限的URL策略，详细操作请参见[添加Hive的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1858.html)。
     例如，为"hgroup1"用户组创建"hive_url_policy"URL策略赋予"obs://obs-test/test/"目录的"Read"和"Write"的权限：
     ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001682947788.png "点击放大")
     
  
  4. 进入**beeline** 客户端，在创建表时指定Location为OBS文件系统路径。
     ```
     cd 客户端安装目录
     ```
     ```
     kinit 组件操作用户
     ```
     ```
     beeline
     ```
     例如，创建一个表"test"，该表的Location为"obs://obs-test/test/数据库名/表名"：
     ```
     create table test(name string) location "obs://obs-test/test/数据库名/表名";
     ```
     
   
- 配置Hive基于MetaStore方式对接OBS：
  1. 已完成存算分离配置，具体请参考[配置Guardian服务对接OBS](https://support.huaweicloud.com/usermanual-mrs/mrs_01_248987.html)章节。
  
  2. 登录集群Manager界面，选择"集群 \> 服务 \> Hive \> 配置"。
  
  3. 在搜索框搜索"hive.metastore.warehouse.dir"，修改参数值为OBS路径，例如：obs://hivetest/user/hive/warehouse/，其中"hivetest"为OBS文件系统名。
     图2hive.metastore.warehouse.dir配置   
     ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001683107556.png "点击放大") 
  
  4. 保存配置，然后单击"集群 \> 服务"，在服务列表中重启Hive服务。
  
  5. 更新客户端配置文件。
     1. 登录Hive客户端所在的节点，执行以下命令修改Hive客户端配置文件目录下的"hivemetastore-site.xml"。
        ```
        vi 客户端安装目录/Hive/config/hivemetastore-site.xml
        ```
        
     
     2. 将"hive.metastore.warehouse.dir"的值修改为对应的OBS路径，例如"obs://hivetest/user/hive/warehouse/"。 ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001731066749.png)
        
     
     3. 修改HCatalog客户端配置文件目录下的"hivemetastore-site.xml"，将"hive.metastore.warehouse.dir"的值修改为对应的OBS路径，例如"obs://hivetest/user/hive/warehouse/"。
        ```
        vi 客户端安装目录/Hive/HCatalog/conf/hivemetastore-site.xml
        ```
        
     
     4. 使用Ranger管理员用户登录Ranger WebUI页面，在首页中单击"EXTERNAL AUTHORIZATION"区域的组件插件名称"OBS"，单击"Add New Policy"，为对应用户的用户组赋予OBS存储路径的"Read"和"Write"的权限。 例如，为"hgroup1"用户组赋予"obs://hivetest/user/hive/warehouse/"目录的"Read"和"Write"的权限：
        ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001731106653.png "点击放大")
        
     
     5. 选择"Settings \> Roles \> Add New Role"，创建"Role Name"为"hive"的角色： ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001682947792.png "点击放大")
        
      
  
  6. 进入Hive Beeline命令行，创建一个表并确认Location为OBS路径。
     ```
     cd 客户端安装目录
     ```
     ```
     kinit 组件操作用户
     ```
     ```
     beeline
     ```
     ```
     create table test(name string);
     ```
     ```
     desc formatted test;
     ```
     如果当前数据库Location已指向HDFS，那么在当前数据库下建表（不指定Location）默认也指向当前HDFS，如需修改默认建表策略可以修改数据库的Location重新指向OBS。
     1. 执行以下命令查看数据库Location。
        ```
        show create database obs_test;
        ```
        ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002506598130.png "点击放大")
        
     
     2. 执行以下命令修改数据库Location。
        ```
        alter database obs_test set location 'obs://test1/';
        ```
        执行命令查看数据库Location已经指向OBS。
        ```
        show create database obs_test;
        ```
        ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002538318009.png)
        
     
     3. 执行以下命令修改表的Location。
        ```
        alter table user_info set location 'obs://test1/';
        ```
        如果表已有业务数据，需要同步迁移原数据文件至修改后的Location地址。
        
      
   
 
#### 相关文档
- 配置Ranger策略时，不同条件的优先级可参考[Ranger权限策略条件判断优先级](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1851.html#mrs_01_1851__section2381255446)。
- 如需查看Ranger中的相关权限设置对象信息，例如用户、用户组、Role，可参考[查看Ranger用户权限同步信息](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1854.html)。
- MRS集群中新用户可在Manager中进行创建，可参考[创建MRS集群用户](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0345.html)。
 
