如何在Hive中配置基于Linux/Unix用户组的权限管控规则?
Hive切换为Linux/Unix用户组权限管控操作步骤
前置准备
- 梳理现有权限映射关系:将原有Hive角色、用户的库表权限对应到目标Linux/Unix用户组,避免切换后权限断层
- 全集群同步用户组:确保所有需要授权的Linux/Unix用户组在HDFS节点、Hive服务节点上完成同步,全集群UID、GID保持一致
- 备份原有权限数据:执行命令
hive -e "show roles; show grant all on all; " > hive_origin_perm_backup.sql导出当前权限配置,同时备份Hive元数据库中权限相关的表(ROLES、GLOBAL_PRIVS、DB_PRIVS、TBL_PRIVS等)
调整Hive核心配置
编辑Hive配置文件hive-site.xml,如果是CDH/CDP等商业发行版可直接通过集群管理界面修改参数:
- 启用存储基授权模式,基于HDFS POSIX权限校验:
配置hive.security.metastore.authorization.manager值为org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider - 开启Hive权限和底层存储权限联动校验:
配置hive.metastore.authorization.storage.checks值为true - 配置Linux用户组读取规则,保证Hive可以正确识别系统用户组:
配置hadoop.security.group.mapping值为org.apache.hadoop.security.ShellBasedUnixGroupsMapping - 开启用户身份模拟,确保Hive执行语句时使用提交用户的身份校验权限:
配置hive.server2.enable.doAs值为true,hive.security.authorization.enabled值为true - 修改完成后重启Hive Metastore、HiveServer2服务使配置生效
批量配置库表的用户组权限
存储基授权模式下,Hive库表权限完全对应HDFS路径的POSIX权限,直接调整对应路径的属组和权限即可:
- 数据库级权限配置:修改对应数据库的HDFS路径属组和权限,示例如下:
# 给数据库test_db授权给user_group用户组,组内用户可读写 hdfs dfs -chgrp -R user_group /user/hive/warehouse/test_db.db hdfs dfs -chmod -R 770 /user/hive/warehouse/test_db.db - 表级权限配置:如果需要细化到单表的权限,单独调整表对应的HDFS路径属组即可,示例如下:
# 给表test_db.table1单独授权给table_group用户组 hdfs dfs -chgrp -R table_group /user/hive/warehouse/test_db.db/table1 hdfs dfs -chmod -R 770 /user/hive/warehouse/test_db.db/table1 - 外部表权限配置:同步修改外部表对应的自定义HDFS存储路径的属组和权限,规则和内部表一致
清理旧权限(验证无误后操作)
确认新的用户组权限全部符合预期后,清理原有Hive权限配置:
- 删除不需要的旧自定义Hive角色:执行
DROP ROLE <旧角色名>; - 回收旧的用户/角色权限授权:执行
REVOKE ALL PRIVILEGES ON <库名/表名> FROM <旧用户名/旧角色名>;
权限验证
- 使用属于授权用户组的Linux用户提交Hive查询,确认可以正常读写对应库表
- 使用不属于授权用户组的用户提交查询,确认触发权限不足报错,符合预期
内容的提问来源于stack exchange,提问作者shubhamsinghal
相关产品推荐
相关产品推荐

