1、Storage Based Authorization in the Metastore Server
基于存储的授权(也就是HDFS的授权模型) - 可以对Metastore中的元数据进行保护,但是没有提供更加细粒度的访问控制(例如:列级别、行级别)。
2、SQL Standards Based Authorization in HiveServer2
(grant)基于SQL标准的Hive授权 - 完全兼容SQL的授权模型,推荐使用该模式。
3、Default Hive Authorization (Legacy Mode)
hive默认授权 - 设计目的仅仅只是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据。
1、启用当前认证方式之后,dfs, add, delete, compile, and reset等命令被禁用。
2、通过set命令设置hive configuration的方式被限制某些用户使用。
(可通过修改配置文件hive-site.xml中hive.security.authorization.sqlstd.confwhitelist进行配置)
3、添加、删除函数以及宏的操作,仅为具有admin的用户开放。
4、用户自定义函数(开放支持永久的自定义函数),可通过具有admin角色的用户创建,其他用户都可以使用。
5、Transform功能被禁用。
在hive服务端修改配置文件hive-site.xml添加以下配置内容:
<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>
启动服务端:
[root@node3 conf]# hiveserver2
客户端通过beeline连接:
[root@node4 ~]# beeline
Beeline version 1.2.1 by Apache Hive
beeline> !connect jdbc:hive2://node3:10000 root 123
DROP ROLE role_name; – 删除角色
SHOW CURRENT ROLES; --查看当前具有的角色:
0: jdbc:hive2://node3:10000> show current roles;
+---------+--+
| role |
+---------+--+
| public |
+---------+--+
1 row selected (2.533 seconds)
SET ROLE (role_name|ALL|NONE); --设置角色:
0: jdbc:hive2://node3:10000> set role admin;
No rows affected (0.057 seconds)
CREATE ROLE role_name; – 创建角色:
0: jdbc:hive2://node3:10000> create role trole;
No rows affected (0.097 seconds)
SHOW ROLES; – 查看所有存在的角色:
0: jdbc:hive2://node3:10000> show roles;
+---------+--+
| role |
+---------+--+
| admin |
| public |
| trole |
+---------+--+
3 rows selected (0.066 seconds)
1.将角色授予给某个用户、角色:
GRANT role_name [, role_name] ...
TO principal_specification [, principal_specification] ...
[ WITH ADMIN OPTION ];
principal_specification
: USER user
| ROLE role
2.移除某个用户、角色的角色
REVOKE [ADMIN OPTION FOR] role_name [, role_name] ...
FROM principal_specification [, principal_specification] ... ;
principal_specification
: USER user
| ROLE role
3.查看授予某个用户、角色的角色列表:
SHOW ROLE GRANT (USER|ROLE) principal_name;
4.查看属于某种角色的用户、角色列表:
SHOW PRINCIPALS role_name;
1.将权限授予给某个用户、角色:
GRANT
priv_type [, priv_type ] ...
ON table_or_view_name
TO principal_specification [, principal_specification] ...
[WITH GRANT OPTION];
2.移除某个用户、角色的权限:
REVOKE [GRANT OPTION FOR]
priv_type [, priv_type ] ...
ON table_or_view_name
FROM principal_specification [, principal_specification] ... ;
3.查看某个用户、角色的权限:
SHOW GRANT [principal_name] ON (ALL| ([TABLE] table_or_view_name)