配置Hive只展示当前用户有权限的库表
操作场景
在Hive客户端查看数据库、查看表或通过JDBC调用getMetaData接口时,默认显示所有的数据库和表,在Hive启用Ranger鉴权的场景中支持通过修改Hive配置,以实现Ranger默认的Hive策略只展示当前用户有权限的库表,其他用户未授权的库表不可见。
约束与限制
- 仅Hive开启Ranger鉴权功能时支持此功能,启用Ranger鉴权具体操作请参见MRS集群服务启用Ranger鉴权。
- 默认所有Hive客户端用户都可以创建数据库和表,配置此功能后收回默认创建权限,需要通过Ranger授权后才能创建数据库和表。
- Hive对接LakeFormation场景暂不支持此功能。
- 该章节操作仅MRS 3.6.0-LTS及之后版本支持。
操作步骤
配置Hive只展示当前用户有权限的库表。
- 使用admin用户登录Manager页面,选择“集群 > 集群属性”,查看并记录集群的“认证模式”。
- 选择“集群 > 服务 > Ranger”,单击“Ranger Web UI”右侧的超链接登录Ranger WebUI页面。
- 在首页中单击“HADOOP SQL”区域的组件插件名称如“Hive”。
- 单击“all - database”策略所在行的修改按钮,在“Allow Conditions”区域,删除“Select Group”为“public”且“Permissions”为“create”的权限控制规则,单击“Save”保存策略。
图1 删除数据库的权限控制规则
- 单击“default database tables columns”策略所在行的修改按钮,在“Allow Conditions”区域,删除“Select Group”为“public”且“Permissions”为“create”的权限控制规则,单击“Save”保存策略。
图2 删除Hive默认数据库、表、列的权限控制规则
- 使用admin用户登录Manager页面,选择“集群 > Hive > 配置 > 全部配置”,在搜索框中搜索“hive-ext.skip.ranger.showtables.auth”,修改值为“false”,以实现在Ranger鉴权启用的场景下,跳过show语句鉴权,执行结果仅展示当前用户有权限的库表。
- 单击“保存”保存配置。单击“实例”,在实例列表中勾选所有HiveServer实例,选择“更多 > 重启实例”重启HiveServer实例。
配置Hive只展示当前用户有权限的库表功能验证。
- 在Manager首页,选择“系统 > 权限 > 用户”,创建两个Hive用户,例如“test”和“test1”,且用户都属于“hive”和“hadoop”用户组。
- 参考2登录Ranger WebUI页面,根据实际需求为创建Hive表的用户添加相关权限控制策略。
例如,分别创建为“test”用户授予“default”、“test_2025”库和“test_tbl_2025”表的“All”权限策略,及为“test1”用户授予“default”库的“select”权限策略。
- 在首页中单击“HADOOP SQL”区域的组件插件名称如“Hive”。
- 单击“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权限策略
- 再次单击“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权限策略
- 登录Hive客户端所在节点,执行以下命令登录Hive客户端,以“test”用户为例。
- 执行以下命令创建Hive数据库和表:
创建表“test_tbl_2025”:
create table test_tbl_2025(a string);创建数据库“test_2025”:
create database test_2025; - 参考10使用“test1”用户登录Hive客户端,执行以下命令查看“test”用户创建的数据库和表:
查看数据库:
show databases like 'test_*';
查看表:
show tables like 'test_tbl*';
查询无结果,未授权的数据库和表“test1”用户不可见。