hive数据权限管理
1.权限说明
Hive基于元数据库来管理多用户并控制权限。数据分为元数据和数据文件两部分,元数据存储在mysql,而数据文件则是HDFS,控制元数据即控制可访问的数据文件。从mysql存储的Hive元数据表数据字典(metastore数据库)看,Hive是基于元数据mysql管理多用户权限,用户权限信息都存储在元数据表中。要重点理解是,mysql只是保存Hive的元数据,mysql本身的用户和Hive没有关系,Hive只是把自己的用户信息保存在mysql元数据表中。hive能对数据文件的权限控制,未能控制元数据权限,考虑引入Apache Sentry组件。
眼下hive支持简单的权限管理,默认情况下是不开启。这样全部的用户都具有同样的权限,同一时候也是超级管理员,对hive中的全部表都有查看和修改的权利,这样是不符合一般数据仓库的安全原则的。但是Hive的权限控制并不是完全安全的。基本的授权方案的目的是防止用户不小心做了不合适的事情。
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机器上的用户和组,而角色必须自己创建。
2.开启权限管理
1.在hive-site.xml文件中配置参数开启权限认证,开启启身份认证后,任何用户必须被grant privilege才能对实体进行操作:
hive.security.authorization.enabled = true
2.表示创建表时自动赋予一些用户或角色相应的权限:
hive.security.authorization.createtable.owner.grants = ALL
hive.security.authorization.createtable.role.grants = admin_role:ALL
hive.security.authorization