更新时间:2025-08-01 GMT+08:00
配置用户在具有读和执行权限的目录中创建外表
操作场景
创建Hive外部表时,当前用户需为外表Location目录的属主,Hive提供“hive.restrict.create.grant.external.table”参数,用于配置允许有目录读权限和执行权限的用户和用户组创建Hive外部表,而不必检查用户是否为该目录的属主,并且禁止外表的Location目录在当前默认warehouse目录下。同时在外表授权时,禁止更改其Location目录对应的权限。
通过限制外部表的创建和授权权限,可有效防止未授权用户访问敏感数据路径。在生产环境中,特别是多用户共享集群时,建议结合HDFS权限管理以提升数据安全性。

开启本功能之后,外表功能变化大,请充分考虑实际应用场景,再决定是否做出调整。
约束与限制
- 该章节操作仅适用于开启了Kerberos认证的集群。
- 该章节操作仅适用于Hive未启用Ranger鉴权的场景。
操作步骤
- 登录Manager界面,选择“系统 > 权限 > 用户”,在用户界面创建两个权限相同的用户,例如“test”和“test1”,都属于“hive”和“hadoop”用户组。
- 以客户端安装用户,登录安装客户端的节点。
下载并安装集群客户端的具体操作,请参考安装MRS集群客户端。
- 执行以下命令切换到客户端安装目录,配置环境变量并认证用户。
- 切换到客户端安装目录:
cd /opt/hadoopclient
- 配置环境变量:
source bigdata_env
- 认证用户,集群未启用Kerberos认证(普通模式)请跳过此步骤:
kinit 组件业务用户
例如:
kinit test
- 切换到客户端安装目录:
- 执行以下命令创建存放Hive外表的HDFS目录:
hdfs dfs -mkdir /user/test
查看HDFS目录:
- 执行以下命令使用另一个用户登录Hive客户端,创建Hive外部表并存放在4创建的HDFS目录下。
- 认证用户,集群未启用Kerberos认证(普通模式)请跳过此步骤:
kinit 组件业务用户
例如:
kinit test1
- 登录Hive客户端:
beeline
- 创建Hive外部表:
create external table test(name string) location "hdfs://hacluster/user/test";
命令执行后报错用户权限不足:
图1 报错权限不足
- 认证用户,集群未启用Kerberos认证(普通模式)请跳过此步骤:
- 登录FusionInsight Manager页面,选择“集群 > 服务 > Hive > 配置 > 全部配置”。
- 选择“HiveServer(角色) > 自定义”,对参数文件“hive-site.xml”添加自定义参数,设置“名称”为“hive.restrict.create.grant.external.table”,“值”为“true”。
- 选择“MetaStore(角色) > 自定义”,对参数文件“hivemetastore-site.xml”添加自定义参数,设置“名称”为“hive.restrict.create.grant.external.table”,“值”为“true”。
- 单击“保存”保存配置。单击“实例”,勾选所有Hive实例,选择“更多 > 重启实例”,输入当前用户密码,单击“确定”重启所有Hive实例。
- 是否需要在Spark/Spark2x客户端中启用此功能?
- 是,重新下载并安装Spark/Spark2x客户端。
- 否,操作结束。
- 重新执行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 创建表报错
父主题: Hive企业级能力增强