Amazon EMR 配置 Hive 对Hue用户的权限控制

网友投稿 318 2022-11-15

Amazon EMR 配置 Hive 对Hue用户的权限控制

Hue 创建用户后无权限访问Hive

在hue中创建完用户后,还需要在主节点中创建这个user并在hive和hadoop中为这个user赋予权限,经过我这边的测试,步骤如下:

Hue添加用户

添加管理员用户

##进入hue目录 cd /usr/lib/hue/ ##创建超级用户 sudo build/env/bin/hue createsuperuser

添加普通用户(按照以下步骤授予权限)

通过Hue访问hive,首先要在Hue创建登录用户。

Linux添加用户

##在主节点中创建user emrhue sudo useradd emrhue #添加用户 sudo passwd emrhue #设置用户密码 gpasswd -a emrhue emrhue #给用户分组

Hive 配置文件添加权限

SQL Standards Based Authorization in HiveServer2默认提供两种角色:public和admin,所有用户默认属于角色public,而授权则必须是具有角色admin的用户才可以完成(普通用户仅可以将自己获得的权限授权给其它用户),由于EMR中hive是默认没有admin user的,为了在hive中创建role,您需要使用amin权限,因此您需要配置hive配置文件/etc/hive/conf/hive-site.xml并加入下面的配置:

$ vim /etc/hive/conf/hive-site.xml ###... ... ... hive.security.authorization.enabled true hive.security.authorization.createtable.owner.grants ALL hive.security.authorization.task.factory org.apache.hadoop.hive.ql.parse.authorization.HiveAuthorizationTaskFactoryImpl hive.users.in.admin.role root,hive 定义超级管理员 启动的时候会自动创建Comma separated list of users who are in admin role for bootstrapping. More users can be added in ADMIN role later. ###... ... ...

重启hive 服务

systemctl restart hive-server2.service systemctl restart hive-webhcat-server.service systemctl restart hive-hcatalog-server.service

检查hive 启动状态

sudo systemctl status *hive*

授权用户

apache官方的hive权限文档请参考:shell

##使用上面授权的超级管理员用户进入hive shell: [root@ip-172-21-3-198 ~]# su hive -s /bin/bash -c 'hive'

创建hive角色

##显示用户当前角色的列表。 hive> SHOW CURRENT ROLES; SHOW CURRENT ROLES; OK public ##指定 admin 角色将成为当前角色中的唯一角色。 hive> set role admin; set role admin; OK ##创建新角色(将其与系统用户绑定,同名即可)。只有管理员角色具有此权限。 hive> create role emrhue; create role emrhue; OK ##查看已经有的角色 hive> show roles; show roles; OK admin emrhue public

报错信息:FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Current user : root is not allowed to add roles. User has to belong to ADMIN role and have it as current role, for this action.原因分析:创建hive的角色需要用admin权限的账号,前面步骤中设置的hive.users.in.admin.role=hive,所以需要切换linux hive账户来执行命令

对账户授权

创建好emr-hive账户后,对账户进行授权,操作如下

##把default数据库的所有权限赋予emrhue角色(根据实际情况修改数据库名) hive> grant all on database default to role emrhue with grant option; ##将角色emrhue赋予linux用户emrhue hive> grant role emrhue to user emrhue; grant role emrhue to user emrhue; ##赋予emrhue用户default数据的权限后可以建表: hive> grant all on database default to role emrhue with grant option; ##赋予用户emrhue default数据库test表的select权限,就可以正常查询hive中的test表中的数据了 hive> grant select on test to user emrhue; ##赋予角色test表全部的权限后,用户emrhue就可以正常执行insert语句了 hive> grant all on table test to role emrhue with grant option; ##查看角色emrhue的所有权限 hive> show grant role emrhue on all; ##授予用户default数据库 select权限,这样用户下的角色拥有同样权限(根据实际情况修改数据库名) hive> grant all on database default to user emrhue; ##查看用户emrhue的所有权限 hive> show grant user emrhue; OK

其他语句

##列出给定角色/用户已授予的所有角色,其中principal_name 是用户或角色的名称。 hive> SHOW ROLE GRANT ROLE emrhue; hive> SHOW ROLE GRANT USER emrhue; ##查看角色已有权限 hive> show grant role emrhue; ##查看角色在default数据库的已有权限 hive> show grant role emrhue on database default; ##查看指定用户在某个库的权限 hive> show grant user emrhue on database default; ##查看指定角色的所有权限 hive> show grant role hue_admin on all; ##查看指定用户所有权限 hive> show grant user emrhue on all; ##列出属于此角色的所有角色和用户,只有管理员角色具有此权限。 hive> SHOW PRINCIPALS emrhue; ##回收用户role角色 #hive> revoke role emrhue from user emrhue; ##回收用户权限 #hive> revoke all from user emrhue; ##回收角色对库的所有权限 #hive> revoke all on database default from role emrhue; ##删除角色 #hive> drop role emrhue;

HDFS权限控制

切换用户emrhue后,进入hive shell 报错:Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=emrhue, access=WRITE, inode="/user":hdfs:hdfsadmingroup:drwxr-xr-x

设置hive配置文件

# vim /etc/hive/conf/hive-site.xml ## hive.security.metastore.authorization.manager org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider hive.metastore.pre.event.listeners org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener hive.security.metastore.authenticator.manager org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator

HDFS权限设置

EMR的Kerberos安全集群已经设置了Hive的warehouse的HDFS相关权限;对于非Kerberos安全集群,用户需要做如下步骤设置hive基本的HDFS权限:

##查看目录权限 sudo -u hdfs hadoop fs -ls /user/hive/warehouse/ Found 2 items drwxrwx--T - hive hdfsadmingroup 0 2022-07-06 07:16 /user/hive/warehouse/product.db ##权限设置成770,1表示stick bit(不能删除别人创建的文件/文件夹) sudo -u hdfs hadoop fs -chmod -R 1770 /user/hive/warehouse ##将用户hue_product增加到supergroup组中 usermod -a -G hdfsadmingroup hue_product ##改变目录属主 sudo -u hdfs hadoop fs -chown -R hue_product /user/hive/warehouse/product.db ##使用超级管理员账号,同步系统的权限信息到HDFS: sudo -u hdfs hdfs dfsadmin -refreshUserToGroupsMappings ##确认用户是否增加成功 id hue_product

有了上述设置基础权限后,可以通过对warehouse文件夹授权,让相关用户/用户组能够正常创建表/读写表等

##设置hdfs用户权限 sudo -u hdfs hadoop fs -setfacl -m user:emrhue:rwx /user/hive/warehouse ##设置hdfs用户组权限 sudo -u hdfs hadoop fs -setfacl -m group:emrhue:rwx /user/hive/warehouse

重启hive 服务

systemctl restart hive-server2.service systemctl restart hive-webhcat-server.service systemctl restart hive-hcatalog-server.service

附录:常用的授权关键字

权限 解释
ALTER 更改表结构,创建分区
CREATE 创建表
DROP 删除表,或分区
INDEX 创建和删除索引
LOCK 锁定表,保证并发
SELECT 查询表权限
SHOW_DATABASE 查看数据库权限
UPDATE 为表加载本地数据的权限

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java process.waitfor返回1的原因及解决
下一篇:PostgreSQL数据库事务系统Upper Layer——EndTransactionBlock
相关文章

 发表评论

暂时没有评论,来抢沙发吧~