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
###... ... ...
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property><property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>ALL</value>
</property><property>
<name>hive.security.authorization.task.factory</name>
<value>org.apache.hadoop.hive.ql.parse.authorization.HiveAuthorizationTaskFactoryImpl</value>
</property><property>
<name>hive.users.in.admin.role</name>
<value>hive</value>
<description>定义超级管理员 启动的时候会自动创建Comma separated list of users who are in admin role for bootstrapping.
More users can be added in ADMIN role later.</description>
</property>
###... ... ...
重启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权限文档请参考:https://cwiki.apache.org/confluence/display/Hive/SQL+Standard+Based+Hive+Authorization
进入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;##赋予 default数据库test表的select权限给用户emrhue ,emrhue用户就可以正常查询hive中的test表中的数据了
hive> grant select on test to user emrhue;##赋予这个用户test表全部的权限可以用下面的语句,再次测试insert语句就可以正常执行了
hive> grant all on table test to role emrhue with grant option;##授予用户default数据库 select权限,这样用户下的角色拥有同样权限(根据实际情况修改数据库名)
hive> grant select on database default to user emrhue;##把某个库的权限直接给用户!
hive> grant ALL ON DATABASE default TO USER emrhue;
##列出给定角色/用户已授予的所有角色,其中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 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;
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
##
<property><name>hive.security.metastore.authorization.manager</name><value>org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider</value>
</property><property>
<name>hive.metastore.pre.event.listeners</name><value>org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener</value>
</property><property>
<name>hive.security.metastore.authenticator.manager</name><value>org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator</value>
</property>
HDFS权限设置
EMR的Kerberos安全集群已经设置了Hive的warehouse的HDFS相关权限;
对于非Kerberos安全集群,用户需要做如下步骤设置hive基本的HDFS权限:
##切换hadoop用户
##权限设置成777,1表示stick bit(不能删除别人创建的文件/文件夹)
su hadoop -c 'hadoop fs -chmod -R 1777 /user/hive/warehouse'
有了上述设置基础权限后,可以通过对warehouse文件夹授权,让相关用户/用户组能够正常创建表/读写表等
##设置hdfs用户权限
su hadoop -c 'hadoop fs -setfacl -m user:emrhue:rwx /user/hive/warehouse'##设置hdfs用户组权限
su hadoop -c 'hadoop fs -setfacl -m group:emrhue:rwx /user/hive/warehouse'
Hive 语法介绍
角色管理命令
创建/显示角色
##显示用户当前角色的列表。用户的所有操作都是通过查看用户的权限和用户的所有当前角色来授权的。
##默认的当前角色具有除管理员角色之外的所有用户角色(即使用户也属于管理员角色)。任何用户都可以运行此命令。
hive> SHOW CURRENT ROLES;
SHOW CURRENT ROLES;
OK
public##语法:SET ROLE (role_name|ALL|NONE);
##如果指定了role_name,则该角色将成为当前角色中的唯一角色。
##将role_name设置为 ALL 将刷新当前角色列表(如果向用户授予了新角色),并将其设置为默认角色列表。
##将role_name设置为 NONE 将删除当前用户的所有当前角色。(它在HIVE-11780中引入,并将包含在即将推出的1.3.0和1.2.2版本中。
##如果将用户不属于的角色指定为role_name,则会导致错误。
hive> set role admin;
set role admin;
OK##语法:CREATE ROLE role_name;
##创建新角色。只有管理员角色具有此权限。
##角色名称 ALL、DEFAULT 和 NONE 均为保留。
hive> create role role_admin;
create role role_admin;
OK##查看已经有的角色
hive> show roles;
show roles;
OK
admin
public
role_admin##列出属于此角色的所有角色和用户。
##只有管理员角色具有此权限。
hive> SHOW PRINCIPALS emrhue;
SHOW PRINCIPALS role_admin;
OK##删除角色(只有管理员角色对此具有权限。)
DROP ROLE role_admin;
授予角色
##将一个或多个角色授予其他角色或用户。
##如果指定了“WITH ADMIN OPTION”,则用户获得将角色授予其他用户/角色的权限。
##如果授权语句最终创建了角色之间的循环关系,则该命令将失败并出现错误。GRANT role_name [, role_name] ...
TO principal_specification [, principal_specification] ...
[ WITH ADMIN OPTION ];principal_specification: USER user| ROLE role
撤销角色
##从 FROM 子句中的用户/角色撤消角色的成员资格。
##从 Hive 0.14.0 开始,可以使用 REVOKE ADMIN OPTION FOR <role> ( HIVE-6252 ) 仅撤销 ADMIN OPTION。REVOKE [ADMIN OPTION FOR] role_name [, role_name] ...
FROM principal_specification [, principal_specification] ... ;principal_specification: USER user| ROLE role
显示角色授予
SHOW ROLE GRANT (USER|ROLE) principal_name;
- 其中principal_name是用户或角色的名称。
- 列出给定用户或角色已被授予的所有角色。
- 目前任何用户都可以运行此命令。但这可能会在未来发生变化,以允许用户仅看到他们自己的角色授予,并且需要额外的权限才能查看其他用户的角色授予。
##显示角色授予示例
0: jdbc:hive2://localhost:10000> GRANT role1 TO USER user1;
No rows affected (0.058 seconds)0: jdbc:hive2://localhost:10000> SHOW ROLE GRANT USER user1;
+---------+---------------+----------------+----------+
| role | grant_option | grant_time | grantor |
+---------+---------------+----------------+----------+
| public | false | 0 | |
| role1 | false | 1398284083000 | uadmin |
+---------+---------------+----------------+----------+
管理对象权限
● SELECT 权限– 授予对对象的读取权限。
● INSERT 权限– 提供向对象(表)添加数据的能力。
● UPDATE 权限——提供对对象(表)运行更新查询的能力。
● DELETE 权限——提供删除对象(表)中数据的能力。
● ALL PRIVILEGES – 赋予所有权限(转换为上述所有权限)。
授予对象权限语法
GRANTpriv_type [, priv_type ] ...ON table_or_view_nameTO principal_specification [, principal_specification] ...[WITH GRANT OPTION];
撤销对象权限语法
REVOKE [GRANT OPTION FOR]priv_type [, priv_type ] ...ON table_or_view_nameFROM principal_specification [, principal_specification] ... ;principal_specification: USER user| ROLE rolepriv_type: INSERT | SELECT | UPDATE | DELETE | ALL
- 如果用户被授予对表或视图的“使用 GRANT 选项”的权限,则该用户还可以授予/撤消其他用户和角色对这些对象的权限。从 Hive 0.14.0 开始,可以使用 REVOKE GRANT 选项 (HIVE-7404) 删除权限的授予选项,同时仍保留权限<privilege>。
- 请注意,对于 REVOKE 语句,当前不支持 CASCADE 的 DROP-BEHAVIOR 选项(在 SQL 标准中)。因此,revoke 语句不会删除任何从属特权。有关 CASCADE 行为的详细信息,您可以查看 Postgres 吊销文档。
库级的权限
##授予所有权限给某个用户
grant all on msta to user {userName};##授权admin privilege权限
grant ADMIN PRIVILEGE on database {dbName} to user {userName};##授予某个库的权限给某个用户
grant select on database {dbName} to user {userName};
grant insert on database {dbName} to user {userName};
grant update on database {dbName} to user {userName};
grant delete on database {dbName} to user {userName};##回收某个库的权限给某个用户
revoke select on database {dbName} from user {userName};
revoke insert on database {dbName} from user {userName};
revoke update on database {dbName} from user {userName};
revoke delete on database {dbName} from user {userName};##查看指定用户在所有库下面的权限
show grant user {userName};##查看指定用户在某个库的权限
show grant user {userName} on database {dbName};
表级的权限
##授予表的权限给某个用户
grant create on database {dbName} to user {userName};
grant select on table {dbName}.tableName to user {userName};
grant insert on table {dbName}.tableName to user {userName};
grant update on table {dbName}.tableName to user {userName};
grant delete on table {dbName}.tableName to user {userName};##回收某个用户的表的权限
revoke create on table {dbName}.tableName from user {userName};
revoke select on table {dbName}.tableName from user {userName};
revoke insert on table {dbName}.tableName from user {userName};
revoke update on table {dbName}.tableName from user {userName};
revoke delete on table {dbName}.tableName from user {userName};##查看指定用户在指定表的权限
show grant user {userName} on table {dbName}.{tableName};
附录:常用的授权关键字
权限 | 解释 |
---|---|
ALTER | 更改表结构,创建分区 |
CREATE | 创建表 |
DROP | 删除表,或分区 |
INDEX | 创建和删除索引 |
LOCK | 锁定表,保证并发 |
SELECT | 查询表权限 |
SHOW_DATABASE | 查看数据库权限 |
UPDATE | 为表加载本地数据的权限 |
Amazon EMR 配置 Hive 对Hue用户的权限控制相关推荐
- Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制
文章目录 SASL_SCRAM+ACL实现动态创建用户及权限控制 使用SASL / SCRAM进行身份验证 1. 创建SCRAM Credentials 创建broker建通信用户(或称超级用户) 创 ...
- SSM项目图书馆管理系统,适合新人练手和毕设参考,功能首页展示 系统注册登录登出 用户管理 权限控制管理 书籍管理 图书借阅管理 个人借阅记录管理 书籍详细信息展示等
图书馆管理系统,系统采用B/S架构 系统采用框架:java+maven+stringboot+mybatis+mysql-plus+boostart(前端界面) 首页展示 内容后台管理 菜单权限管理 ...
- springboot-29-security(二)用户角色权限控制
本博客基于上一个 http://www.cnblogs.com/wenbronk/p/7379865.html 增加了角色的权限表, 可以进行权限校验 一, 数据准备 1, 数据表建立 /* Navi ...
- kafak集群部署配置,开启SASL_PLAINTEXT认证以及acl权限控制
SASL_PLAINTEXT认证 本人认为就是consumer连接broker开启了用户名,密码认证 acl权限控制 就是指针对用户 配置拥有哪些操作权限,如 topic的读,写,group的读,to ...
- 配置samba共享 一个用户有权限 多个用户可以借此用户访问
Samba : - 用途:为客户机提供共享使用的文件夹 - 协议: SMB(TCP 139) , CIFS( TCP 445) 服务端: 防火墙设置为trusted [root@server0 ~]# ...
- SpringMVC拦截器-用户登录权限控制代码实现2
在登陆页面输入用户名密码,点击登陆,通过用户名密码进行查询,如果登陆成功,则将用户信息实体存入session,然后跳转到首页,如果登陆失败则继续回到登陆页面 在UserController中编写登陆逻 ...
- SpringMVC拦截器-用户登录权限控制代码实现1
判断用户是否登录 本质:判断session中有没有user,如果没有登陆则先去登陆,如果已经登陆则直接放行访问目标资源 先编写拦截器如下: public class PrivilegeIntercep ...
- MongoDB3.x中添加用户和权限控制
现在需要创建一个帐号,该账号需要有grant权限,即:账号管理的授权权限.注意一点,帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth) 1.在admin库中,添加用户并授权use ...
- SpringMVC拦截器-用户登录权限控制代码实现3
JdbcTemplate.queryForObject对象如果查询不到数据会抛异常,导致程序无法达到预期效果,如何来解决该问题? 在业务层处理来自dao层的异常,如果出现异常service层返回nul ...
最新文章
- python中for循环缩进_Python减少循环层次和缩进的技巧分析
- Servlet版本和EL表达式
- 实现状态面板的显示与隐藏
- CCNA 配置试验之一 静态路由
- 《转》python学习--基础上
- 深入Java核心 Java内存分配原理精讲
- java 向上抛异常_Java 异常的处理方式throws
- 庆祝我的第一本书出版
- 基于stc15f2k60s2芯片单片机编程(串口超声波时间)
- INTELIED,PCIIEDX, ATAPI,Disk.sys的关系
- 基本磁盘转换动态磁盘,再转换为基本磁盘,分区数据丢失
- 转载GIT 学习--活灵活现用Git(二)
- java卡 apdu_java智能卡APDU学习笔记
- 【虚拟机数据恢复】误删除VMware虚拟机vmdk文件的数据恢复案例
- 计算机导论 ——绪论
- java获取和风天气_和风天气(一)数据分析
- 做个jmeter登陆百度网盘的实例
- 优必选能开放软硬件源代码吗_开放式硬件组遍布全球
- mysql查询成绩并排名_一条SQL语句实现查询出成绩名次排名
- 数字人民币试点目前呈现“全面开花”态势