目前hive支持简单的权限管理,默认情况下是不开启,这样所有的用户都具有相同的权限,同时也是超级管理员, 也就对hive中的所有表都有查看和改动的权限,这样是不符合一般数据仓库的安全原则的。下面一起来看看Hive的权限管理。
一、Hive 三种授权模型
1.1 基于存储的授权
Storage Based Authorization in the Metastore Server基于存储的授权(也就是HDFS的授权模型),可以对Metastore中的元数据进行保护,但是没有提供更加细粒度的访问控制(例如:列级别、行级别)。
1.2 基于SQL标准的Hive授权
SQL Standards Based Authorization in HiveServer2 基于(grant)SQL标准的Hive授权,完全兼容SQL的授权模型,推荐使用该模式。除支持对于用户的授权认证,还支持角色 role 的授权认证
role 可理解为是一组权限的集合,通过 role 为用户授权一个用户可以具有一个或多个角色,默认包含两种角色:public、admin;其中admin 用户可以在配置文件里进行配置,角色的命名是大小写不敏感的,这一点和SQL相同,但是用户名是对大小写敏感的。
通过hiveserver2的方式访问hive数据,默认提供两种角色:public和admin,所有用户默认属于角色public,而授权则必须是具有角色admin的用户才可以完成(普通用户仅可以将自己获得的权限授权给其它用户);因此我们必须添加至少一个用户拥有角色admin,创建/删除角色命令用户和组使用的是Linux机器上的用户和组,而角色必须自己(hive)创建。
public 角色
默认情况下所有用户默认属于角色public,而授权则必须是具有角色admin的用户才可以完成(普通用户仅可以将自己获得的权限授权给其它用户)
public 用户有执行授权操作的权限,但是默认情况下public 用户是没有创建表的权限的。
admin 角色
用户除了admin 角色的其他角色都是默认给用户的,也就是说只要你有这个角色的权限,当你执行 show current roles;
都是可以看到的,但是admin角色不行,即使你属于这个角色的列表,你也需要通过 set role admin;
来获取这个角色的权限;也就是说admin 角色是不在用户的current roles
列表里的,可以通过 set hive.users.in.admin.role;
查看哪些用户拥有admin 权限。
1.3 hive 默认授权
Default Hive Authorization (Legacy Mode) hive默认授权,设计目的仅仅只是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据。
这是因为这种权限管理机制是不完善的,它并没有权限校验的机制,例如你执行grant
操作,它并不去检测你是否有权限,它的检测发生在SQL编译的阶段。
二、基于SQL标准的Hive授权特点
2.1 基于SQL标准授权的优点
- 完全兼容SQL的授权模型;
- 除支持对于用户的授权认证,还支持角色role的授权认证;
- role可理解为是一组权限的集合,通过role为用户授权;
- 一个用户可以具有一个或多个角色。
2.2 基于SQL标准授权的限制
- 启用当前认证方式之后,
dfs, add, delete, compile, and reset
等命令被禁用; - 通过
set
命令设置hive configuration
的方式被限制某些用户使用。也可通过修改配置文件hive-site.xml
中hive.security.authorization.sqlstd.confwhitelist
进行配置,哪些用户可以使用这些命令,其实就是白名单(add
或者drop
函数的命令属于admin 角色所有,所以这个时候如果要添加自定义函数的话可以通过admin 用户添加一个永久函数然后其他用户使用的方式来完成); - 添加、删除函数以及宏(批量规模)的操作,仅为具有 admin 的用户开放;
- 用户自定义函数(开放支持永久的自定义函数),可通过具有admin角色的用户创建,其他用户都可以使用;
- Transform功能被禁用。
三、基于SQL标准的Hive权限配置
前置条件
Hadoop、Hive是可用的前提
3.1 hive 配置
1 | [hadoop@hadoop1 ~]$ vim apache-hive-2.3.9-bin/conf/hive-site.xml |
配置完后启动 hiveserver2
1 | [hadoop@hadoop1 ~]$ nohup hive --service hiveserver2 >> apache-hive-2.3.9-bin/hiveserver2.log 2>&1 & |
3.2 获取admin角色的权限
拥有admin角色的用户需要运行命令 set role admin
去获取admin角色的权限,也会就是说即使你在admin 角色列表里,依然需要去获取一次才能拥有权限.
1 | [hadoop@hadoop2 ~]$ beeline |
3.3 Hive 的权限操作
Hive 权限控制
操作 | 解释 |
---|---|
ALL | 所有权限 |
ALTER | 允许修改元数据(modify metadata data of object)—表信息数据 |
UPDATE | 允许修改物理数据(modify physical data of object)—实际数据 |
CREATE | 允许进行Create操作 |
DROP | 允许进行DROP操作 |
INDEX | 允许建索引(目前还没有实现) |
LOCK | 当出现并发的使用允许用户进行LOCK和UNLOCK操作 |
SELECT | 允许用户进行SELECT操作 |
SHOW_DATABASE | 允许用户查看可用的数据库 |
3.3.1 角色的添加、删除、查看、设置
1 | #查看用户当前的角色 |
3.3.2 角色的授予角色、删除、查看
1 | #将角色授予给某个用户、角色 |
3.3.3 权限的授予、移除、查看
1 | #将权限授予给某个用户、角色 |