Hive权限管理
最近遇到一个hive权限的问题,先简单记录一下,目前自己的理解不一定对,后续根据自己的理解程度更新
一、hive用户的概念
hive本身没有创建用户的命令,hive的用户就是Linux用户,若当前是用mr用户输入hive,进入hive的shell,则当前hive的用户为mr。
hive本身不提供用户和用户的管理,只做权限控制。
所以在实际的生产中,容易造成创表和使用表的用户不统一的情况,针对该情况可以使用beeline的方式连接hive,简洁的命令如下,具体的使用方式可以百度查找。
1 beeline -u jdbc:hive2//mysql_IP:port -n username
二、hive数据存储方式
这里讨论基于MySQL的remote方式,这种方式可以支持多用户的并发模式。
hiveserver元数据信息是存在MySQL中的,存在MySQL中的元数据信息包括:表的位置、创建时间、数据库相关、表相关关系以及表的一些授权信息等,没有具体的内容;物理表是存在HDFS上的。
因为数据是存在HDFS上的,创表或导入数据时候,当前用户要对存放数据的HDFS目录要有权限。若没有相关权限,会导致很多操作都会报错。
三、hive权限问题
- 在hive-site.xml文件中,开启权限认证,参数如下:
1 hive.security.authorization.enabled //默认为false 2 hive.security.authorization.createtable.owner.grants
2. 在用户没有权限的做某项操作的时候,可以通过以下语句赋给用户ALL的权限或者对应的权限。
1 GRATN ALL TO USER username;
但是这样做,有点力度不够细,比如你想给某个用户赋select、create的权限,别的权限不给,这样上述语句就得执行两遍,当用户多的时候,这种情况尤为繁琐。
在hive中role(角色)这一概念,可以较好的解决上述问题。可以将不同的权限根据需要赋给对应的role,然后将这个role赋给用户,再将相应的权限赋给这个role,这样用户就可以根据role的权限执行相应操作,这样在权限管理上更加灵活了。
3. 实际上,所有的Linux系统用户登录hive后,都可以执行Grant/revoke操作,这样假如一个用户没有某一权限了,很简单只需要执行一次grant就行,可以认为hive用户自己管理自己的权限。
这个可以在hive-site.xml文件中配置hive.semantic.analyzer.hook,然后实现自己的权限控制类,即可。控制类的实现可上网百度。
配置好上面的配置项后,相当于是设置超级管理员权限,具体的权限根据自己的权限控制类。此时若要新增一个超级管理员用户,可以在hive-site.xml文件的hive.users.in.super.administrator中设置。
update:2018-12-25
4. hive用户权限管理的简单流程:
i)创建超级管理员;
ii)新建用户,赋予hive目录的权限;
iii)超级管理员进入hive,给指定用户(组)赋操作权限;
iv)使用新建用户连接hive;
4、hive有两种 授权机制:
总结来说为:1、基于底层HDFS的权限;2、基于标准SQL的grant等命令。具体的在实践中的注意点已在上面提及。
Ref:
https://www.cnblogs.com/yejibigdata/p/6394719.html