
# 配置Hive对接LakeFormation授权管理
LakeFormation数据湖权限支持配置数据库、数据表、函数等维度的权限。云服务管理员可针对不同的管理对象配置不同IAM用户组的权限，统一对数据湖资源进行管理。
MRS集群对接LakeFormation后，LakeFormation服务中的相关数据湖权限策略及角色信息会自动同步至MRS Ranger，对于MRS集群内的用户， 可通过关联至对应Ranger角色后获取对应资源的访问权限。
本示例描述了在LakeFormation数据湖中新创建了数据表后，如何为Hive组件配置资源授权、OBS路径授权的相关访问权限。
![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
- 用户可通过LakeFormation管理控制台对数据湖内的资源进行统一权限管理，对于IAM用户/用户组，也可以通过关联LakeFormation服务的细粒度权限策略进行特定权限场景的授权。当湖内数据资源较多时，建议通过LakeFormation管理控制台对数据湖内的资源进行统一权限管理。
- 关于LakeFormation服务详细的权限配置说明及授权的权限类型，可参考[配置LakeFormation元数据权限](https://support.huaweicloud.com/usermanual-lakeformation/lakeformation_03_00014.html)章节。
- 对接LakeFormation后，对OBS路径的授权仅支持在LakeFormation上进行操作。
 
#### 前提条件
- LakeFormation实例运行正常，数据库、数据表、数据权限等页面加载正常。
- 集群已启用Kerberos认证（安全模式），且运行正常，包含Guardian、Ranger、Hive等服务。
- MRS已与LakeFormation实例对接成功，并重新下载安装了集群客户端，例如安装目录为"/opt/client"。
- 已登录MRS集群的FusionInsight Manager界面添加人机用户"testuser"，加入hadoop、hive用户组，用户创建成功后初始化密码。
 
#### 鉴权插件说明
Hive组件对接LakeFormation场景提供了两种鉴权方式：Ranger鉴权和LakeFormation鉴权，LakeFormation鉴权方式仅适用于MRS 3.6.0及之后版本。
Hive组件默认采用Ranger鉴权进行权限管理，如果您希望切换到LakeFormation鉴权，需要登录Manager页面，选择"集群 \> 服务 \> Hive \> 更多 \> 停用Ranger鉴权"，保存后重启Hive服务。
- Ranger鉴权：Hive基于Ranger策略鉴权，Ranger PolicySync实例周期同步LakeFormation角色与授权策略到Ranger，LakeFormation角色映射为Ranger同名角色，用户绑定Ranger角色后权限生效。
- LakeFormation鉴权：Hive直接访问LakeFormation进行鉴权，不依赖Ranger服务，LakeFormation角色映射为Manager同名用户组，用户绑定用户组后权限生效。
 
#### Hive对接LakeFormation后授权操作样例
1. 登录[LakeFormation管理控制台](https://console.huaweicloud.com/lake-formation/)。
2. 选择MRS集群对接的LakeFormation实例，在左侧导航栏选择"数据目录"，在Catalog列表中单击hive，在"数据库"页签中单击default，在"数据表"页签单击"创建"，编辑相关内容后单击"提交"。 
   - "表名称"填写"lf_orctb1"。
   
   - "表格格式"选择"HIVE"。
   
   - "数据源格式"选择"Orc"。
   
   - 单击"Schema"区域的"添加"： "名称"填"c1"，"类型"选择"int"；
     再次单击"添加"，新增一行，"名称"填"c2"，"类型"选择"int"；
     再次单击"添加"，新增一行，"名称"填"p1"，"分区键"选择"是"，"类型"选择"int"。
     
   
   
   其他参数根据实际需要配置或保持默认。
   
   
3. 登录MRS集群客户端所在节点，然后登录Hive Beeline命令行。 
   **cd /opt/client**
   **source bigdata_env**
   **kinit** *testuser* （集群已启用Kerberos认证（安全模式）时执行该命令，未开启时请跳过）
   **beeline**
   
   
4. 执行如下SQL，读写LakeFormation上已存在的数据表。 
   **select \* from default.lf_orctb1;**
   **insert into lf_orctb1 values (1,1,1);**
   SQL执行失败，有Error提示用户缺少权限。
   
   
5. 在LakeFormation管理控制台，选择"数据权限 \> 角色"页面，单击"创建角色"，"角色名称"填写"testrole"，单击"确定"。
6. 对角色进行授权/取消授权，支持在LakeFormation页面授权与执行Hive GRANT/REVOKE SQL两种方式。 
   **方式一** **：**
   进入"数据授权"页面，单击"授权"，编辑如下，将访问表所需的权限赋予"testrole"，单击"确定"。
   - 主体类型：选择"角色"。
   
   - 选择角色：下拉框选择刚创建的角色"testrole"。
   
   - 授权类型：选择"资源"。
   
   - Catalog：选择"hive"。
   
   - 数据库：下拉框选择"default"，选中后再选择表。
   
   - 表：下拉框选择"lf_orctb1"。
   
   - 权限：勾选"SELECT"、"UPDATE"。
   
   
   **方式二** **：**（该方式仅MRS 3.5.0及之后版本支持）
   执行Hive grant/revoke SQL，进行权限操作。
   例如：对"testrole"角色授权"lf_orctb1"表的"SELECT"、"UPDATE"权限；
   **GRANT SELECT, UPDATE ON TABLE lf_orctb1 TO ROLE testrole;**
   取消"testrole"角色的"lf_orctb1"表"SELECT"、"UPDATE"权限；
   **REVOKE** **SELECT, UPDATE** **ON TABLE lf_orctb1** **FROM ROLE** **testrole;**
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
   1. MRS对接LakeFormation仅支持role授权，对user/group授权将默认转为对同名role的权限操作，role需要提前在LakeFormation页面创建；
   
   2. 对接LakeFormation场景SQL语句授权时，数据库/表大小写不敏感，统一转为小写处理，user/group/role严格区分大小写；
    
   
   
7. 如果创建的表为外表，类型为"EXTERNAL_TABLE"，需要执行该操作。否则请跳过该步骤。 
   进入"数据授权"页面，单击"授权"，编辑如下，将外表的OBS路径的读写权限赋予"testrole"，单击"确定"。
   - 主体类型：选择"角色"。
   
   - 选择角色：下拉框选择刚创建的角色"testrole"。
   
   - 授权类型：选择"路径"。
   
   - 路径：选择为外表的存储路径。
   
   - 权限：勾选"READ"、"WRITE"。
   
   
   
   
8. 为待鉴权用户添加角色或用户组。 
   - **Ranger鉴权：**
     检查MRS RangerAdmin上已同步角色和策略，并在对应Ranger角色上添加用户。
     1. 使用**admin** 用户登录MRS集群的Manager页面，选择"集群 \> 服务 \> Ranger"。
        登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
        
     
     2. 在Ranger服务概览，单击"RangerAdmin"进入Ranger Web UI界面。
     
     3. 进入Ranger Web UI后单击右上角用户名后继续单击"Log Out"，然后再通过**rangeradmin** 用户重新登录Ranger Web UI。如果为初次登录，需修改初始密码。
        初始密码可参考[MRS集群用户账号一览表](https://support.huaweicloud.com/usermanual-mrs/admin_guide_000239.html)或联系集群管理员获取。
        
     
     4. 单击"Hive"进入Hive权限插件，查看添加的策略是否已同步至Ranger。
     
     5. 进入"Settings"页面，单击"Roles"，查看添加的角色是否已同步。
     
     6. 为用户绑定角色，支持Ranger页面绑定与Hive GRANT/REVOKE SQL两种方式。 **方式一：**Ranger页面绑定。
        单击"testrole"，在"Users"下"Select User"输入框中填入"testuser"，单击"Add Users"，然后单击"Save"保存退出。
        **方式二：** 使用**rangeradmin**用户认证，执行Hive GRANT/REVOKE SQL进行操作。（该方式仅MRS 3.5.0及之后版本支持）
        对"testuser"用户绑定"testrole"角色；
        **GRANT testrole TO USER testuser;**
        解绑"testuser"用户的"testrole"角色；
        **REVOKE** **testrole** **FROM USER** **testuser;**
        
       
   
   - **LakeFormation鉴权**
     登录Manager页面，选择"系统 \> 权限 \> 用户组"，单击"添加用户组"，组名"testrole"，用户添加"testuser"。
     
   
   
   
   
9. 回到Hive客户端上，再次执行读写数据表的SQL，成功读取表内容并插入数据。 
   **beeline**
   **select \* from default.lf_orctb1;**
   **insert into lf_orctb1 values (1,1,1);**
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
   如果MRS RangerAdmin存在已添加的Role，LakeFormation支持添加同名角色并将权限策略同步至RangerAdmin上并绑定该Role。
   
   
 
#### Hive权限与LakeFormation权限对应关系
该部分内容仅MRS 3.5.0及之后版本集群支持。
对接LakeFormation场景Hive GRANT/REVOKE SQL不支持Catalog、函数、路径授权，不支持describe与list_table/select单独授权，相关场景仍需要在LakeFormation实例的数据权限界面进行授权操作。
- HiveServer开启Ranger鉴权时，Hive权限与LakeFormation权限对应关系请参见下表。
  表1Hive与LakeFormation权限对应关系（开启Ranger鉴权） 
  | Hive权限 | LakeFormation权限                                                                                                                                                                                                                                                                                                                                                         | 权限说明                                                                                                                                                                                                                                                                                                                                                                      |
  |:---|:---|:---|
  | ALL    | ALL                                                                                                                                                                                                                                                                                                                                                                     | - 数据库：所有操作权限  - 表：所有操作权限                        |
  | ALTER  | ALTER                                                                                                                                                                                                                                                                                                                                                                   | - 数据库：修改数据库  - 表：修改表                                  |
  | UPDATE | UPDATE                                                                                                                                                                                                                                                                                                                                                                  | - 数据库：无此权限  - 表：插入/覆盖表数据                              |
  | CREATE | CREATE_TABLE                                                                                                                                                                                                                                                                                                                                                            | - 数据库：在数据库下建表  - 表：无此权限                           |
  | DROP   | DROP                                                                                                                                                                                                                                                                                                                                                                    | - 数据库：删除数据库  - 表：删除表                               |
  | SELECT | - 数据库：DESCRIBE、LIST_TABLE  - 表：DESCRIBE、SELECT   | - 数据库：查看元数据信息、查看数据库下的表  - 表：查看元数据信息、查询表数据   |
  | INSERT | INSERT                                                                                                                                                                                                                                                                                                                                                                  | - 数据库：无此权限  - 表：插入表数据                                  |
     
  
- HiveServer关闭Ranger鉴权时，Hive权限与LakeFormation权限对应关系请参见下表。 该部分内容仅MRS 3.6.0.1及之后版本集群支持。
  表2Hive与LakeFormation权限对应关系（关闭Ranger鉴权） 
  | Hive权限        | LakeFormation权限                                                                                                                                                                                                                                                                                                                                                  | 权限说明                                                                                                                                                                                                                                                                                                                                                                                                         |
  |:---|:---|:---|
  | ALL           | ALL                                                                                                                                                                                                                                                                                                                                                              | - 数据库：拥有库的SELECT，CREATE_TABLE权限  - 表：拥有表的SELECT, INSERT, DELETE权限                           |
  | CREATE        | CREATE_TABLE                                                                                                                                                                                                                                                                                                                                                     | - 数据库：在数据库下建表  - 表：无此权限                                                                        |
  | DELETE        | DELETE                                                                                                                                                                                                                                                                                                                                                           | - 数据库：无此权限  - 表：使用alter命令删除分区                                                                       |
  | SELECT        | - 数据库：DESCRIBE、LIST_TABLE  - 表：DESCRIBE、SELECT   | - 数据库：查看元数据信息、查看数据库下的表  - 表：查看元数据信息、查询表数据                                                |
  | INSERT        | INSERT                                                                                                                                                                                                                                                                                                                                                           | - 数据库：无此权限  - 表：插入表数据、使用alter命令增加分区                                                             |
  | ADMIN         | 无                                                                                                                                                                                                                                                                                                                                                                | - 数据库：所有操作权限  - 表：所有操作权限   对接LakeFormation且关闭Ranger鉴权，将用户加到MRS默认的lake_formation_admin用户组后拥有ADMIN权限 |
  | OWNER(库表的创建者) | OWNER(库表的创建者)                                                                                                                                                                                                                                                                                                                                                    | - 数据库：所有操作权限  - 表：所有操作权限                                                               |
     
  
 
#### 相关文档
对接LakeFormation后，支持通过调整Hive的配置参数，在Hive客户端查看数据库、数据表列表或者通过JDBC的getMetaData接口获取元数据信息时，仅显示当前用户有权限访问的数据库和表，其他未被授权的库表将不再展示，具体操作请参考[配置Hive对接LakeFormation支持show databases/tables鉴权](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_300800.html)。
