Hive权限控制
Hive权限机制:
Hive从0.10可以通过元数据控制权限。但是Hive的权限控制并不是完全安全的。基本的授权方案的目的是防止用户不小心做了不合适的事情。
先决条件:
为了使用Hive的授权机制,有两个参数必须在hive-site.xml中设置:
hive.security.authorization.enabled true enable or disable the hive client authorization hive.security.authorization.createtable.owner.grants ALL the privileges automatically granted to the owner whenever a table gets created. An example like "select,drop" will grant select and drop privilege to the owner of the table
含义分别是开启权限验证;表的创建者对表拥有所有权限
hive.security.authorization.createtable.owner.grants默认值为NULL,所以表的创建者无法访问该表,这明显是不合理的。
用户,组,角色:
Hive授权的核心就是用户、组、角色。
Hive中的角色和平常我们认知的角色是有区别的。Hive中的角色可以理解为一部分有一些相同“属性”的用户或组或角色的集合。这里有个递归的概念,就是一个角色可以是一些角色的集合。
用户 组
张三 G_db1
李四 G_db2
王五 G_bothdb
如 上有三个用户分别属于G_db1、G_db2、G_alldb。G_db1、G_db2、G_ bothdb分别表示该组用户可以访问数据库1、数据库2和可以访问1、2两个数据库。现在可以创建role_db1和role_db2,分别并授予访问 数据库1和数据库2的权限。这样只要将role_eb 1赋给G_db1(或者该组的所偶用户),将role_eb2赋给G_db2,就可以是实现指定用户访问指定数据库。最后创建role_bothdb指向 role_db1、role_db2(role_bothdb不需要指定访问那个数据库),然后role_bothdb授予G_bothdb,则 G_bothdb中的用户可以访问两个数据库。
使用和组使用的是Linux机器上的用户和组,而角色必须自己创建。
注意:如果有一个属于组bar的用户foo,他通过cli连接到远程的Server上执行操作,而远程的Server上有一个用户foo属于baz组,则在权限控制中foo是对应的baz组的。
角色的创建、删除、使用:
创建和删除:
CREATE ROLE ROLE_NAME