开启Hive权限认证后,批量授权数据库表查询权限及解决库授权失效
Hive数据库级权限不生效及批量授权解决方案
问题原因
Hive默认权限模型中,数据库级权限仅管控数据库本身的操作(如建表、删库),不会自动向下继承至库内的表/视图。因此即使你已授予用户/角色数据库级的SELECT权限,用户仍缺少对应表的SELECT权限,触发HiveAccessControlException权限拒绝报错。
解决方案
方案1:开启权限继承(长期自动生效)
通过配置Hive参数开启权限级联继承,让数据库级权限自动应用到库内所有现有表及未来新建的表:
- 修改Hive配置文件
hive-site.xml,添加或更新以下配置:<property> <name>hive.security.authorization.cascade.privileges</name> <value>true</value> </property> - 重启Hive metastore及服务进程。
- 重新执行数据库级授权语句:
此时权限会自动继承到该库下所有表,用户可正常查询。GRANT SELECT ON DATABASE database_name TO USER user_name; -- 或给角色授权 GRANT SELECT ON DATABASE database_name TO ROLE role_name;
方案2:批量生成授权语句(临时批量处理现有表)
若无需开启权限继承,可通过查询Hive元数据生成批量授权语句,一次性完成库内所有现有表的授权:
- 执行以下HiveQL生成授权语句(替换
test为目标数据库名,user_name为目标用户/角色):SELECT CONCAT('GRANT SELECT ON TABLE ', table_schema, '.', table_name, ' TO USER user_name;') FROM information_schema.tables WHERE table_schema = 'test'; - 将查询结果中的所有语句复制出来,批量执行即可完成现有表的授权。
- 若授权对象是角色,只需将语句中的
USER user_name替换为ROLE role_name。
- 若授权对象是角色,只需将语句中的
权限验证
授权完成后,可通过以下语句验证权限是否生效:
-- 查看用户在数据库上的权限 SHOW GRANT USER user_name ON DATABASE database_name; -- 查看用户在库内所有表上的权限 SHOW GRANT USER user_name ON TABLE database_name.*;
内容的提问来源于stack exchange,提问作者cocdkl
相关产品推荐
相关产品推荐

