
# 配置Hive只展示当前用户有权限的库表
#### 操作场景
在Hive客户端查看数据库、查看表或通过JDBC调用getMetaData接口时，默认显示所有的数据库和表，在Hive启用Ranger鉴权的场景中支持通过修改Hive配置，以实现Ranger默认的Hive策略只展示当前用户有权限的库表，其他用户未授权的库表不可见。
#### 约束与限制
- 仅Hive开启Ranger鉴权功能时支持此功能，启用Ranger鉴权具体操作请参见[配置集群组件启用Ranger鉴权](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2393.html)。
- 默认所有Hive客户端用户都可以创建数据库和表，配置此功能后收回默认创建权限，需要通过Ranger授权后才能创建数据库和表。
- Hive对接LakeFormation场景暂不支持此功能。
- 该章节操作仅MRS 3.6.0-LTS及之后版本支持。
 
#### 操作步骤
**配置Hive只展示当前用户有权限的库表。**
1. 使用**admin**用户登录Manager页面，选择"集群 \> 集群属性"，查看并记录集群的"认证模式"。
2. 选择"集群 \> 服务 \> Ranger"，单击"Ranger Web UI"右侧的超链接登录Ranger WebUI页面。
   
   - 如果[1]查看到的认证模式为"安全模式"，**admin** 用户在Ranger中的用户类型为"User"，只能查看Access Manager和Security Zone页面。
     需单击页面右上角的用户名，在下拉列表中单击"Log Out"退出当前用户，使用**rangeradmin** 用户重新登录Ranger WebUI页面，再执行[3]。
     
   
   - 如果[1]查看到的认证模式为"普通模式"，**admin** 用户在Ranger中的用户类型为"Admin"，直接执行[3]。
   
   
   
   
3. 在首页中单击"HADOOP SQL"区域的组件插件名称如"Hive"。
4. 单击"all - database"策略所在行的修改按钮，在"Allow Conditions"区域，删除"Select Group"为"public"且"Permissions"为"create"的权限控制规则，单击"Save"保存策略。 
   图1删除数据库的权限控制规则   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002483921834.png "点击放大")
   
   
5. 单击"default database tables columns"策略所在行的修改按钮，在"Allow Conditions"区域，删除"Select Group"为"public"且"Permissions"为"create"的权限控制规则，单击"Save"保存策略。 
   图2删除Hive默认数据库、表、列的权限控制规则   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002516161807.png "点击放大")
   
   
6. 使用**admin**用户登录Manager页面，选择"集群 \> Hive \> 配置 \> 全部配置"，在搜索框中搜索"hive-ext.skip.ranger.showtables.auth"，修改值为"false"，以实现在Ranger鉴权启用的场景下，跳过show语句鉴权，执行结果仅展示当前用户有权限的库表。
7. 单击"保存"保存配置。单击"实例"，在实例列表中勾选所有HiveServer实例，选择"更多 \> 重启实例"重启HiveServer实例。
**配置Hive只展示当前用户有权限的库表功能验证。**
8. 在Manager首页，选择"系统 \> 权限 \> 用户"，创建两个Hive用户，例如"test"和"test1"，且用户都属于"hive"和"hadoop"用户组。
9. 参考[2]登录Ranger WebUI页面，根据实际需求为创建Hive表的用户添加相关权限控制策略。
   
   例如，分别创建为"test"用户授予"default"、"test_2025"库和"test_tbl_2025"表的"All"权限策略，及为"test1"用户授予"default"库的"select"权限策略。
   1. 在首页中单击"HADOOP SQL"区域的组件插件名称如"Hive"。
   
   2. 单击"Add New Policy"，配置以下参数并单击"Add"为test用户添加权限策略：
      - Policy Name：输入自定义策略名称，例如"test"。
      
      - database：输入"default"和"test_2025"数据库。
      
      - table：输入"test_tbl_2025"表。
      
      - Allow Conditions："Select User"列选择"test"，单击"Permissions"列的"Add Permissions"添加"All"权限。
      
      
      图3为test用户添加Ranger权限策略   
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002483761862.png "点击放大") 
   
   3. 再次单击"Add New Policy"，配置以下参数并单击"Add"为test1用户添加权限策略：
      - Policy Name：输入自定义策略名称，例如"test1"。
      
      - database：输入"default"数据库。
      
      - table：单击"table"，在下拉框中选择"none"。
      
      - Allow Conditions："Select User"列选择"test1"，单击"Permissions"列的"Add Permissions"添加"select"权限。
      
      
      图4为test1用户添加Ranger权限策略   
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002516041805.png "点击放大") 
    
   
   
10. 登录Hive客户端所在节点，执行以下命令登录Hive客户端，以"test"用户为例。
    
    - 集群为安全模式时，执行以下命令进行用户认证并登录Hive客户端； 配置环境变量：
      ```
      source 客户端安装目录/bigdata_env
      ```
      认证用户：
      ```
      kinit test
      ```
      登录Hive客户端：
      ```
      beeline
      ```
      
    
    - 集群为普通模式时，执行以下命令登录Hive客户端： 配置环境变量：
      ```
      source 客户端安装目录/bigdata_env
      ```
      登录Hive客户端：
      ```
      beeline -n test
      ```
      
    
    
    
    
11. 执行以下命令创建Hive数据库和表： 
    创建表"test_tbl_2025"：
    ```
    create table test_tbl_2025(a string);
    ```
    创建数据库"test_2025"：
    ```
    create database test_2025;
    ```
    
    
12. 参考[10]使用"test1"用户登录Hive客户端，执行以下命令查看"test"用户创建的数据库和表：
    
    查看数据库：
    ```
    show databases like 'test_*';
    ```
    查看表：
    ```
    show tables like 'test_tbl*';
    ```
    查询无结果，未授权的数据库和表"test1"用户不可见。
    
    
 
