栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

【Hadoop】hdfs使用setfacl 对hive的库赋权不生效问题

【Hadoop】hdfs使用setfacl 对hive的库赋权不生效问题

文章目录
    • 一、前言
    • 二、问题复现
      • 1、测试hive的权限
      • 2、测试HDFS权限
      • 3、查看HDFS文件的ACL
      • 4、 手动添加ACL
    • 解决方案
    • 总结

一、前言

使用sentry赋予普通用户的权限是能正常工作,但是HDFS文件的ACL权限未同步导致不能对相应表的数据目录进行操作。并且使用HDFS 的setfacl 命令也无法生效。

意味着使用beeline 连接hive 可以正常使用,但是直接使用HDFS的命令确会报权限不足的错误。

二、问题复现 1、测试hive的权限

beeline 连接 hiveserver2后,查看risk_admin_role 角色权限

show grant role risk_admin_role;

可以看到有全部数据库的权限

+-----------+--------+------------+---------+------------------+-----------------+------------+---------------+-------------------+----------+--+
| database  | table  | partition  | column  |  principal_name  | principal_type  | privilege  | grant_option  |    grant_time     | grantor  |
+-----------+--------+------------+---------+------------------+-----------------+------------+---------------+-------------------+----------+--+
| *         |        |            |         | risk_admin_role  | ROLE            | *          | false         | 1638965696096000  | --       |
+-----------+--------+------------+---------+------------------+-----------------+------------+---------------+-------------------+----------+--+

并且create,inesrt,drop 等操作执行下来都没有问题。

2、测试HDFS权限

测试命令

hdfs dfs -ls /user/hive/warehouse/test.db

报错信息

ls: Permission denied: user=risk_other, access=READ_EXECUTE, inode="/user/hive/warehouse/test.db":hive:hive:drwxrwx--x
3、查看HDFS文件的ACL

查看权限

hdfs dfs -getfacl /user/hive/warehouse/test.db

可以看到我们risk_other 这个角色是并没有这个文件的访问权限的,但是我们可以通过hive来操作这个库。

4、 手动添加ACL

因为我要从HDFS的文件中直接下载数据,所以当时想通过setfacl命令来快速给用户赋予读写可执行的权限。

hdfs dfs -setfacl -m user:risk_other:rwx /user/hive/warehouse/test.db

本来想着这个命令就已经可以解决问题了,但是测试命令

hdfs dfs -ls /user/hive/warehouse/test.db

依旧报错:

ls: Permission denied: user=risk_other, access=READ_EXECUTE, inode="/user/hive/warehouse/test.db":hive:hive:drwxrwx--x

再次查看acl

 hdfs dfs -getfacl /user/hive/warehouse/test.db
# file: /user/hive/warehouse/test.db
# owner: hive
# group: hive
user::rwx
group::---
user:hive:rwx
group:hive:rwx
group:op_test:rwx
mask::rwx
other::--x

依旧没有,也就是setfacl并没有生效。

解决方案

如果需要对非hive用户赋予server1的权限,则需要将server1下所有库的权限一一赋给需要赋予的用户组,这样才能确保HDFS文件的ACL权限也是同步的。如果是最大权限的用户则可以为该用户添加hive组。

对需要操作的库添加权限!

GRANT ALL ON database india_vision TO ROLE risk_other_role;

查看权限

show grant role risk_other_role;
+---------------+--------+------------+---------+------------------+-----------------+------------+---------------+-------------------+----------+--+
|   database    | table  | partition  | column  |  principal_name  | principal_type  | privilege  | grant_option  |    grant_time     | grantor  |
+---------------+--------+------------+---------+------------------+-----------------+------------+---------------+-------------------+----------+--+
| *             |        |            |         | risk_other_role  | ROLE            | *          | false         | 1638965696096000  | --       |
| india_vision  |        |            |         | risk_other_role  | ROLE            | *          | false         | 1639479619687000  | --       |
+---------------+--------+------------+---------+------------------+-----------------+------------+---------------+-------------------+----------+--+
总结

在使用Sentry赋予server1的权限给非hive用户时是不能达到所有HDFS文件的ACL同步,如果是非最大权限的用户则需要加上数据库授权,如果是最大权限的用户可以使用hive/impala或着为用户添加hive组。

server1的权限一般是hive中管理员权限,如hive或者impala用户,就像这个文件/user/hive/warehouse的owner是hive一样。如果将此权限赋给其他用户时则需要加上数据库的权限,以保障数据的安全。

参考文章:

  • https://cloud.tencent.com/developer/article/1078182
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/672052.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号