数据分析小伙伴需要通过hue客户端对hive的数据进行查询,主要创建三个用户,Hue账号,linux账号,hive中角色。
通过Hue访问hive,首先要在Hue创建登录用户并授予权限。
useradd allsel #添加用户
passwd allsel #设置用户密码
gpasswd -a allsel allsel #给用户分组
1.设置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
hive
定义超级管理员 启动的时候会自动创建Comma separated list of users who are in admin role for bootstrapping.
More users can be added in ADMIN role later.
2.创建hive角色
登录hive执行一下命令
CREATE ROLE allsel;
可能会有以下报错,报错原因为创建hive的角色需要用admin权限的账号,如步骤1中设置的hive.users.in.admin.role=hive,所以需要切换linux hive账户来执行命令
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.
正确的执行动作
[root@emr-header-1 ~]# su - hive
[hive@emr-header-1 ~]$ hive
Logging initialized using configuration in file:/etc/ecm/hive-conf-2.3.3-1.0.0/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive> show current roles;
OK
public
Time taken: 0.956 seconds, Fetched: 1 row(s)
hive> set role admin;
OK
Time taken: 0.013 seconds
hive> show current roles;
OK
admin
Time taken: 0.007 seconds, Fetched: 1 row(s)
hive> CREATE ROLE allsel;
OK
创建好allsel账户后,对账户进行授权,操作如下
grant role allsel to user allsel; --将数据库hive 角色allsel赋予linux用户allsel
grant select on test to user allsel; --授予用户select权限,这样用户下的角色拥有同样权限
--权限收回
revoke all from user allsel;
--权限查看
show roles; --查看已经有的角色
show grant role allsel; --查看角色已有权限)
show grant role allsel on database test; --查看角色在test数据库的已有权限
设置hdfs权限
# 切换hadoop用户设置
# 设置用户hdfs权限
hadoop fs -setfacl -m user:allsel:rwx /user/hive/warehouse
# 设置用户组hdfs权限
hadoop fs -setfacl -m group:allsel:rwx /user/hive/warehouse
1.设置hive-site.xml配置文件
hive.metastore.pre.event.listeners
org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener
hive.security.metastore.authorization.manager
org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider
hive.security.metastore.authenticator.manager
org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator
EMR的Kerberos安全集群已经设置了Hive的warehouse的HDFS相关权限;
对于非Kerberos安全集群,用户需要做如下步骤设置hive基本的HDFS权限:
hadoop fs -chmod 1771 /user/hive/warehouse
也可以设置成,1表示stick bit(不能删除别人创建的文件/文件夹)
hadoop fs -chmod 1777 /user/hive/warehouse
有了上述设置基础权限后,可以通过对warehouse文件夹授权,让相关用户/用户组能够正常创建表/读写表等
sudo su has
#授予test对warehouse文件夹rwx权限
hadoop fs -setfacl -m user:test:rwx /user/hive/warehouse
#授予hivegrp对warehouse文件夹rwx权限
hadoo fs -setfacl -m group:hivegrp:rwx /user/hive/warehouse
1.使用 SQL Standards Based Authorization的授权方式 无法对角色授予grant create on database 权限,原因目前未知,报错信息如下:
hive> grant create on database ods to role allsel;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unsupported privilege type CREATE
使用该方式只能授权表的权限,无法创建表,只能查询使用。
2.使用HDFS权限控制,可以对默认库default进行create/drop表的操作。