Hive权限管理:
三种授权模型

  1. 基于存储的授权-可以对Metastore中的元数据进行保护,但是没有提供更加细粒度的访问控制(列级别,行级别)
  2. 基于SQL标准的Hive授权-完全兼容SQL的授权模型,推荐使用该模式
  3. Hive默认授权-设计目的仅仅是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据
  • 完全兼容SQL的授权模型
  • 除了支持对于用户的授权认证。还支持角色role的授权认证
  • role可以理解为一组权限的集合,通过role为用户授权
  • 一个用户可以具有一个或多个角色
  • 默认包含两种角色:public,admin
    Hive 权限_big data
  • 限制:
    1.启用当前认证方式之后,dfs,add,delete,compile,and reset等命令被禁用
    2.通过set命令设置hive.configuration的方式被限制某些用户使用
    3.添加,删除函数以及宏的操作,仅为具有admin的用户开房
    4.使用自定义函数,可以通过具有admin角色的用户创建,其他用户都可以使用
    5.transform功能被禁用

普通用户不能登录的问题演示:

  1. 先将启动的所有 hive 服务器以及客户端都关闭。
  2. 启动:
Node3:hive --service metastore
Node4:hiveserver2
  1. 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 的安全验证导致的。
解决不同用户不能登录的问题:

  1. 修改四台虚拟机上 hdfs-site.xml,添加如下配置:
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
  1. 修改 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 角色后才能删除