
# 配置用户在具有读和执行权限的目录中创建外表
#### 操作场景
创建Hive外部表时，当前用户需为外表Location目录的属主，Hive提供"hive.restrict.create.grant.external.table"参数，用于配置允许有目录读权限和执行权限的用户和用户组创建Hive外部表，而不必检查用户是否为该目录的属主，并且禁止外表的Location目录在当前默认warehouse目录下。同时在外表授权时，禁止更改其Location目录对应的权限。
通过限制外部表的创建和授权权限，可有效防止未授权用户访问敏感数据路径。在生产环境中，特别是多用户共享集群时，建议结合HDFS权限管理以提升数据安全性。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
开启本功能之后，外表功能变化大，请充分考虑实际应用场景，再决定是否做出调整。
#### 约束与限制
该章节操作仅适用于Hive未启用Ranger鉴权的场景。
#### 操作步骤
1. 登录Manager界面，选择"系统 \> 权限 \> 用户"，在用户界面创建两个权限相同的用户，例如"test"和"test1"，都属于"hive"和"hadoop"用户组。
2. 以客户端安装用户，登录安装客户端的节点。 
   下载并安装集群客户端的具体操作，请参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
   
   
3. 执行以下命令切换到客户端安装目录，配置环境变量并认证用户。 
   1. 切换到客户端安装目录：
      ```
      cd /opt/hadoopclient
      ```
      
   
   2. 配置环境变量：
      ```
      source bigdata_env
      ```
      
   
   3. 认证用户，集群未启用Kerberos认证（普通模式）请跳过此步骤：
      ```
      kinit 组件业务用户
      ```
      例如：
      ```
      kinit test
      ```
      
   
   
   
   
4. 执行以下命令创建存放Hive外表的HDFS目录：
   
   ```
   hdfs dfs -mkdir /user/test
   ```
   查看HDFS目录：
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002375143093.png "点击放大")
   
   
5. 执行以下命令使用另一个用户登录Hive客户端，创建Hive外部表并存放在[4]创建的HDFS目录下。
   
   1. 认证用户，集群未启用Kerberos认证（普通模式）请跳过此步骤：
      ```
      kinit 组件业务用户
      ```
      例如：
      ```
      kinit test1
      ```
      
   
   2. 登录Hive客户端：
      ```
      beeline
      ```
      
   
   3. 创建Hive外部表：
      ```
      create external table test(name string) location "hdfs://hacluster/user/test";
      ```
      命令执行后报错用户权限不足：
      图1报错权限不足   
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002341385046.png "点击放大") 
   
   
   
   
6. 登录FusionInsight Manager页面，选择"集群 \> 服务 \> Hive \> 配置 \> 全部配置"。
7. 选择"HiveServer（角色） \> 自定义"，对参数文件"hive-site.xml"添加自定义参数，设置"名称"为"hive.restrict.create.grant.external.table"，"值"为"true"。 
   MRS 3.6.0-LTS及之后版本，单击"保存"保存配置，等待界面提示"操作成功"，单击"完成"，配置已修改。该参数动态生效，不需要重启HiveServer实例。
   
   
8. 选择"MetaStore（角色） \> 自定义"，对参数文件"hivemetastore-site.xml"添加自定义参数，设置"名称"为"hive.restrict.create.grant.external.table"，"值"为"true"。
9. 单击"保存"保存配置。单击"实例"，勾选所有Hive实例（MRS 3.6.0-LTS及之后版本，勾选所有MetaStore实例），选择"更多 \> 重启实例"，输入当前用户密码，单击"确定"重启实例。
10. 是否需要在Spark/Spark2x客户端中启用此功能？ 
    - 是，重新下载并安装Spark/Spark2x客户端。
    
    - 否，操作结束。
    
    
    
    
11. 重新执行[5]创建Hive外表，表创建成功。可执行以下命令查看Hive表详细信息：
    
    ```
    desc formatted test;
    ```
    图2查看Hive表详细信息   
    ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002375213677.png "点击放大")
    执行以下命令在"/user/hive/warehouse"中创建Hive外表，报错禁止外表的Location目录在当前默认warehouse目录下：
    ```
    create external table test1(name string) location "hdfs://hacluster/user/hive/warehouse";
    ```
    图3创建表报错   
    ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002375215257.png "点击放大")
    
    
 
