文档首页/ MapReduce服务 MRS/ 组件操作指南(LTS版)/ 使用Hive/ Hive企业级能力增强/ 配置用户在具有读和执行权限的目录中创建外表
更新时间:2025-08-01 GMT+08:00

配置用户在具有读和执行权限的目录中创建外表

操作场景

创建Hive外部表时,当前用户需为外表Location目录的属主,Hive提供“hive.restrict.create.grant.external.table”参数,用于配置允许有目录读权限和执行权限的用户和用户组创建Hive外部表,而不必检查用户是否为该目录的属主,并且禁止外表的Location目录在当前默认warehouse目录下。同时在外表授权时,禁止更改其Location目录对应的权限。

通过限制外部表的创建和授权权限,可有效防止未授权用户访问敏感数据路径。在生产环境中,特别是多用户共享集群时,建议结合HDFS权限管理以提升数据安全性。

开启本功能之后,外表功能变化大,请充分考虑实际应用场景,再决定是否做出调整。

约束与限制

  • 该章节操作仅适用于开启了Kerberos认证的集群。
  • 该章节操作仅适用于Hive未启用Ranger鉴权的场景。

操作步骤

  1. 登录Manager界面,选择“系统 > 权限 > 用户”,在用户界面创建两个权限相同的用户,例如“test”和“test1”,都属于“hive”和“hadoop”用户组。
  2. 以客户端安装用户,登录安装客户端的节点。

    下载并安装集群客户端的具体操作,请参考安装MRS集群客户端

  3. 执行以下命令切换到客户端安装目录,配置环境变量并认证用户。

    1. 切换到客户端安装目录:
      cd /opt/hadoopclient
    2. 配置环境变量:
      source bigdata_env
    3. 认证用户,集群未启用Kerberos认证(普通模式)请跳过此步骤:
      kinit 组件业务用户

      例如:

      kinit test

  4. 执行以下命令创建存放Hive外表的HDFS目录:

    hdfs dfs -mkdir /user/test

    查看HDFS目录:

  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 报错权限不足

  6. 登录FusionInsight Manager页面,选择“集群 > 服务 > Hive > 配置 > 全部配置”。
  7. 选择“HiveServer(角色) > 自定义”,对参数文件“hive-site.xml”添加自定义参数,设置“名称”为“hive.restrict.create.grant.external.table”,“值”为“true”。
  8. 选择“MetaStore(角色) > 自定义”,对参数文件“hivemetastore-site.xml”添加自定义参数,设置“名称”为“hive.restrict.create.grant.external.table”,“值”为“true”。
  9. 单击“保存”保存配置。单击“实例”,勾选所有Hive实例,选择“更多 > 重启实例”,输入当前用户密码,单击“确定”重启所有Hive实例。
  10. 是否需要在Spark/Spark2x客户端中启用此功能?

    • 是,重新下载并安装Spark/Spark2x客户端。
    • 否,操作结束。

  11. 重新执行5创建Hive外表,表创建成功。可执行以下命令查看Hive表详细信息:

    desc formatted test;
    图2 查看Hive表详细信息

    执行以下命令在“/user/hive/warehouse”中创建Hive外表,报错禁止外表的Location目录在当前默认warehouse目录下:

    create external table test1(name string) location "hdfs://hacluster/user/hive/warehouse";
    图3 创建表报错