配置Hive表级联授权功能
操作场景
传统授权模式下,Hive表的权限与底层存储源(HDFS/OBS)的权限是相互独立的,用户若需访问某张Hive 表,不仅要获取该表的访问权限,还需单独申请表对应的存储源路径权限,二次授权流程繁琐且易遗漏,极大增加了运维成本;同时,当Hive表的存储源路径发生变更时,需手动重新配置存储源权限,否则会导致授权失效,影响业务连续性。
Ranger的级联授权是针对存算分离架构设计的高效授权方案,实现Hive表权限与存储源权限的自动关联、联动生效。
- 管理员只需在Ranger页面针对Hive库/表创建一次授权策略,系统会自动识别表对应的存储源(HDFS/OBS)路径,并生成细粒度的存储源访问权限,用户无需感知底层存储路径,也无需进行二次授权。
- 针对已授权的库/表,当存储源路径发生变动时,系统会通过周期同步机制,自动关联新的存储源并更新对应权限,确保授权持续有效。
前提条件
本章节适用于MRS 3.3.0及之后版本的集群,且使用此功能前还需满足以下条件:
- MRS集群对接的OBS文件系统需开启AccessLabel功能,若未开启,需手动开启,详细操作请联系OBS服务运维人员。
- 针对OBS存储源,需满足以下条件,否则OBS表将授权失败:
- MRS集群中必须已安装Guardian服务。
- OBS表的授权只能针对用户组。
- MRS 3.5.0之前版本,仅支持已启用Kerberos认证的集群的OBS级联授权。
约束与限制
- 不支持对视图表进行级联授权。
- 仅支持对数据库/表进行级联授权操作,不支持对分区做级联权限,如果分区路径不在表路径下,则需要用户手动授权分区路径。
- 不支持对Hive Ranger策略中的“Deny Conditions”进行级联授权,即“Deny Conditions”的权限仅限制表权限,不能生成HDFS/OBS存储源端的权限。
- 不支持在Hive Ranger中创建“database”为“*”且“table”为“*”的策略。
- 级联授权生成的HDFS/OBS存储源端的权限弱于HDFS Ranger策略的权限,即如果已经对表的HDFS存储源设置了HDFS Ranger权限,则级联权限将不会生效。
- 不支持对存储源为OBS的表级联授权后直接进行alter操作,需要给对应用户组额外授予OBS表路径的父目录的“Read”和“Write”权限才能使用alter功能,且用户组仅由数字0~9、字母a~Z、下划线或#组成,且最大长度为52个字符,否则将导致策略添加失败,可参考管理MRS集群用户组修改用户组信息。
- MRS 3.6.0-LTS及之后版本,Hive级联授权只支持对本集群所属的OBS桶或并行文件系统进行授权,不支持对其他集群的OBS桶或并行文件系统进行授权。
- MRS 3.6.0-LTS及之后版本,支持对OBS并行文件系统配置级联授权黑名单,即级联授权将跳过对黑名单包含的OBS路径授权,仅对Hive元数据进行授权。
登录FusionInsight Manager页面,选择“集群 > 服务 > Ranger > 配置”,在搜索框中搜索参数“ranger.ext.authorization.cascade.blacklist”进行配置,参数值为“obs://OBS桶名或并行文件系统名称/”,只支持配置OBS路径,不支持通配符,多个OBS路径使用逗号分隔,且最多可配置50个OBS路径。
例如:
表tblA的Location为“obs://obs-test/tblA”,配置的级联授权黑名单为“obs://obs-test/, obs://obs-test1/”。
那么对表tblA授权时,将不会对“obs:///obs-test/tblA”授权,仅对Hive元数据进行授权。
图1 配置级联授权黑名单
开启级联授权功能
- 登录集群Manager页面,选择“集群 > 服务 > Ranger > 配置”。
- 在搜索框中搜索参数“ranger.ext.authorization.cascade.enable”,修改该参数值为“true”。
- 单击“保存”,保存配置。
- 配置保存成功后,单击“实例”,勾选所有RangerAdmin实例,选择“更多 > 重启实例”,在弹出对话框输入密码,单击“确定”,重启所有RangerAdmin实例。
- 等待实例重启成功,实例运行状态为“良好”。
对接HDFS存储源
HDFS存储源无需进行配置。
对接OBS存储源
- 建表时指定Location为OBS路径:
- 已完成存算分离配置,具体请参考配置Guardian服务对接OBS章节。
- 使用Ranger管理员用户登录Ranger WebUI页面,在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”,单击“Add New Policy”,为对应用户的用户组赋予OBS存储路径的“Read”和“Write”的权限,详细操作请参见添加OBS文件的Ranger访问权限策略。
例如,为“hgroup1”用户组赋予“obs://obs-test/test/”目录的“Read”和“Write”的权限:

- 在首页中单击“HADOOP SQL”区域的组件插件名称“Hive”。在“Access”页签单击“Add New Policy”为对应用户的用户组添加赋予OBS存储路径的“Read”和“Write”权限的URL策略,详细操作请参见添加Hive的Ranger访问权限策略。
例如,为“hgroup1”用户组创建“hive_url_policy”URL策略赋予“obs://obs-test/test/”目录的“Read”和“Write”的权限:

- 进入beeline客户端,在创建表时指定Location为OBS文件系统路径。
cd 客户端安装目录
kinit 组件操作用户
beeline
例如,创建一个表“test”,该表的Location为“obs://obs-test/test/数据库名/表名”:
create table test(name string) location "obs://obs-test/test/数据库名/表名";
- 配置Hive基于MetaStore方式对接OBS:
- 已完成存算分离配置,具体请参考配置Guardian服务对接OBS章节。
- 登录集群Manager界面,选择“集群 > 服务 > Hive > 配置”。
- 在搜索框搜索“hive.metastore.warehouse.dir”,修改参数值为OBS路径,例如:obs://hivetest/user/hive/warehouse/,其中“hivetest”为OBS文件系统名。
图2 hive.metastore.warehouse.dir配置
- 保存配置,然后单击“集群 > 服务”,在服务列表中重启Hive服务。
- 更新客户端配置文件。
- 登录Hive客户端所在的节点,执行以下命令修改Hive客户端配置文件目录下的“hivemetastore-site.xml”。
vi 客户端安装目录/Hive/config/hivemetastore-site.xml
- 将“hive.metastore.warehouse.dir”的值修改为对应的OBS路径,例如“obs://hivetest/user/hive/warehouse/”。
- 修改HCatalog客户端配置文件目录下的“hivemetastore-site.xml”,将“hive.metastore.warehouse.dir”的值修改为对应的OBS路径,例如“obs://hivetest/user/hive/warehouse/”。
vi 客户端安装目录/Hive/HCatalog/conf/hivemetastore-site.xml
- 使用Ranger管理员用户登录Ranger WebUI页面,在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”,单击“Add New Policy”,为对应用户的用户组赋予OBS存储路径的“Read”和“Write”的权限。
例如,为“hgroup1”用户组赋予“obs://hivetest/user/hive/warehouse/”目录的“Read”和“Write”的权限:

- 选择“Settings > Roles > Add New Role”,创建“Role Name”为“hive”的角色:
- 登录Hive客户端所在的节点,执行以下命令修改Hive客户端配置文件目录下的“hivemetastore-site.xml”。
- 进入Hive Beeline命令行,创建一个表并确认Location为OBS路径。
cd 客户端安装目录
kinit 组件操作用户
beeline
create table test(name string);
desc formatted test;
如果当前数据库Location已指向HDFS,那么在当前数据库下建表(不指定Location)默认也指向当前HDFS,如需修改默认建表策略可以修改数据库的Location重新指向OBS。
- 执行以下命令查看数据库Location。
show create database obs_test;

- 执行以下命令修改数据库Location。
alter database obs_test set location 'obs://test1/';
执行命令查看数据库Location已经指向OBS。
show create database obs_test;

- 执行以下命令修改表的Location。
alter table user_info set location 'obs://test1/';
如果表已有业务数据,需要同步迁移原数据文件至修改后的Location地址。
- 执行以下命令查看数据库Location。
相关文档
- 配置Ranger策略时,不同条件的优先级可参考Ranger权限策略条件判断优先级。
- 如需查看Ranger中的相关权限设置对象信息,例如用户、用户组、Role,可参考查看Ranger用户权限同步信息。
- MRS集群中新用户可在Manager中进行创建,可参考创建MRS集群用户。

