Hive权限管理:
三种授权模型
- 基于存储的授权-可以对Metastore中的元数据进行保护,但是没有提供更加细粒度的访问控制(列级别,行级别)
- 基于SQL标准的Hive授权-完全兼容SQL的授权模型,推荐使用该模式
- Hive默认授权-设计目的仅仅是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据
- 完全兼容SQL的授权模型
- 除了支持对于用户的授权认证。还支持角色role的授权认证
- role可以理解为一组权限的集合,通过role为用户授权
- 一个用户可以具有一个或多个角色
- 默认包含两种角色:public,admin
- 限制:
1.启用当前认证方式之后,dfs,add,delete,compile,and reset等命令被禁用
2.通过set命令设置hive.configuration的方式被限制某些用户使用
3.添加,删除函数以及宏的操作,仅为具有admin的用户开房
4.使用自定义函数,可以通过具有admin角色的用户创建,其他用户都可以使用
5.transform功能被禁用
普通用户不能登录的问题演示:
- 先将启动的所有 hive 服务器以及客户端都关闭。
- 启动:
Node3:hive --service metastore
Node4:hiveserver2
- Node2:beeline 连接:
[root@node2 ~]# beeline -u jdbc:hive2://node4:10000/default -n gtjin -p 123
Connecting to jdbc:hive2://node4:10000/default
Error: Failed to open new session: java.lang.RuntimeException:
java.lang.RuntimeException:
org.apache.hadoop.security.AccessControlException: Permission denied: user=gtjin, access=EXECUTE,
inode="/tmp":root:supergroup:drwx------
beeline -u jdbc:hive2://node4:10000/default -n root -p 123 root 可以正常访问。 原因:这是由于 hadoop 的安全验证导致的。
解决不同用户不能登录的问题:
- 修改四台虚拟机上 hdfs-site.xml,添加如下配置:
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
- 修改 node3 上的 hive-site.xml
在 hive 服务端(node3)修改配置文件 hive-site.xml 添加以下配置内容(建议 hwi 的相关配置删除):
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
<property>
<name>hive.users.in.admin.role</name>
<value>root</value>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory</value>
</property>
<property>
<name>hive.security.authenticator.manager</name>
<value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>
关闭 hive 服务器和客户端,重启 hadoop 集群。
[root@node2 ~]# beeline -u jdbc:hive2://node4:10000/default -n gtjin -p 123 便可以正常访问了。
但是该方式普通用户登录之后,也可以创建角色。
CREATE ROLE role_name; – 创建角色
DROP ROLE role_name; – 删除角色
SET ROLE (role_name|ALL|NONE); – 设置角色
SHOW CURRENT ROLES; – 查看当前具有的角色
SHOW ROLES; – 查看所有存在的角色
root 用户登录后,创建角色失败,需要通过命令:set role admin,切换角色。
create role sxt;
对比 MYSQL 授权:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
授角色:grant admin to role sxt with admin option;
查看:show role grant role sxt;
查看 admin 角色被授予的列表:show principals admin;
撤销角色:
revoke admin from role sxt;#从角色 sxt 撤销 admin 角色
revoke admin from user gtjin;#从用户 gtjin 撤销 admin 角色
删除角色:drop role test;
权限列表:
授予权限:
grant select on person to user gtjin with grant option;
切换 gtjin 登录,查询 person 表可以,别的表无权限。
grant select on person to role sxt with grant option;
查看权限:
show grant user gtjin on all;
show grant user gtjin on table person;
撤销权限:
revoke select on person from user gtjin;
root 登录,且切换 admin 角色后才能删除