Hive权限控制和超级管理员的实现
来源:互联网 发布:淘宝三阶魔方 编辑:程序博客网 时间:2024/04/20 09:27
Hive权限机制:
Hive从0.10可以通过元数据控制权限。但是Hive的权限控制并不是完全安全的。基本的授权方案的目的是防止用户不小心做了不合适的事情。
先决条件:
为了使用Hive的授权机制,有两个参数必须在hive-site.xml中设置:
<name>hive.security.authorization.enabled</name>
<value>true</value>
<description>enable or disable the hive client authorization</description>
</property>
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>ALL</value>
<description>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</description>
</property>
含义分别是开启权限验证;表的创建者对表拥有所有权限
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
DROP ROLE ROLE_NAME
grant/revoke:
GRANT ROLE role_name [, role_name] ... TO principal_specification [, principal_specification] ...
REVOKE ROLE role_name [, role_name] ... FROM principal_specification [, principal_specification] ...
principal_specification :
USER user | GROUP group | ROLE role
查看用户\组\角色的角色: SHOW ROLE GRANT principal_specification
示例:
create role testrole;
grant role testrole to user yinxiu;
SHOW ROLE GRANT user yinxiu;
OK
role name:testrole
role name:testrole
Time taken: 0.01 seconds
revoke role testrole from user yinxiu;
权限:
HIVE支持以下权限:
常用的:ALL、CREATE、SELECT(目前qihe2061上只使这三种)
GRANT\REVOKE:
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... [ON object_type] TO principal_specification [, principal_specification] ... [WITH GRANT OPTION]
REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... [ON object_type priv_level] FROM principal_specification [, principal_specification] ...
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
object_type:
TABLE | DATABASE
priv_level:
db_name | tbl_name
示例:
grant select on database default to user xiaohai;
revoke all on database default from user yinxiu;
show grant user xiaohai on database default;
注意:[WITH GRANT OPTION]选项在试验的时候并没有生效
查看权限:
SHOW GRANT principal_specification [ON object_type priv_level [(column_list)]]
HIVE操作和权限之间的关系
As of the release of Hive 0.7, only these operations require permissions, according to org.apache.hadoop.hive.ql.plan.HiveOperation:
HIVE本身有权限管理功能,需要通过配置开启。
<property>
<name>hive.metastore.authorization.storage.checks</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.execute.setugi</name>
<value>false</value>
</property>
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>ALL</value>
</property>
其中hive.security.authorization.createtable.owner.grants设置成ALL表示用户对自己创建的表是有所有权限的(这样是比较合理地)。
开启权限控制有Hive的权限功能还有一个需要完善的地方,那就是“超级管理员”。
Hive中没有超级管理员,任何用户都可以进行Grant/Revoke操作,为了完善“超级管理员”,必须添加hive.semantic.analyzer.hook配置,并实现自己的权限控制类。
1 /* 2 * Copyright (c) 2010-2013 All Rights Reserved. 3 * 4 * Author : 5 * Version :1.0 6 * Create Date:2013-6-13 7 */ 8 package com.xxx.hive; 9 10 import org.apache.hadoop.hive.ql.parse.ASTNode;11 import org.apache.hadoop.hive.ql.parse.AbstractSemanticAnalyzerHook;12 import org.apache.hadoop.hive.ql.parse.HiveParser;13 import org.apache.hadoop.hive.ql.parse.HiveSemanticAnalyzerHookContext;14 import org.apache.hadoop.hive.ql.parse.SemanticException;15 import org.apache.hadoop.hive.ql.session.SessionState;16 17 /**18 * 设置Hive超级管理员19 * 20 * @author 21 * @version $Id: AuthHook.java,v 0.1 2013-6-13 下午3:32:12 yinxiu Exp $22 */23 public class AuthHook extends AbstractSemanticAnalyzerHook {24 private static String admin = "xxxxxx";25 26 @Override27 public ASTNode preAnalyze(HiveSemanticAnalyzerHookContext context,28 ASTNode ast) throws SemanticException {29 switch (ast.getToken().getType()) {30 case HiveParser.TOK_CREATEDATABASE:31 case HiveParser.TOK_DROPDATABASE:32 case HiveParser.TOK_CREATEROLE:33 case HiveParser.TOK_DROPROLE:34 case HiveParser.TOK_GRANT:35 case HiveParser.TOK_REVOKE:36 case HiveParser.TOK_GRANT_ROLE:37 case HiveParser.TOK_REVOKE_ROLE:38 String userName = null;39 if (SessionState.get() != null40 && SessionState.get().getAuthenticator() != null) {41 userName = SessionState.get().getAuthenticator().getUserName();42 }43 if (!admin.equalsIgnoreCase(userName)) {44 throw new SemanticException(userName45 + " can't use ADMIN options, except " + admin + ".");46 }47 break;48 default:49 break;50 }51 return ast;52 }53 }
添加了控制类之后还必须添加下面的配置:
<property>
<name>hive.semantic.analyzer.hook</name>
<value>com.xxx.AuthHook</value>
</property>
(若有使用hiveserver,hiveserver必须重启)
至此,只有xxxxxx用户可以进行Grant/Revoke操作。
权限操作示例:
grant select on database default to user xiaohai;
revoke all on database default from user yinxiu;
show grant user xiaohai on database default;
- Hive权限控制和超级管理员的实现
- Hive权限控制和超级管理员的实现
- Hive权限控制和超级管理员的实现
- Hive权限控制和超级管理员的实现
- Hive权限控制和超级管理员的实现
- 在hive中设置超级管理员以实现hive级的权限管理
- [解决]Hive权限中超级管理员设置的问题
- 获得超级管理员的权限
- 权限控制和session验证的实现
- Hive权限控制
- HIVE权限控制
- hive 权限控制
- hive权限控制
- hive权限控制介绍
- hive权限控制介绍
- hive权限控制
- Hive 权限控制
- hive权限控制介绍
- 阿斯達安順髮科技我惡化副科級安徽省科技的貨款糾紛和外殼
- div+css设置div的背景为半透明
- 汇编版-BinarySearch
- 研磨设计模式之桥接模式-1
- VS2010中的调试技巧总结
- Hive权限控制和超级管理员的实现
- 说说大型高并发高负载网站的系统架构
- 整理HOG(openCV)(涉及HOG函数的简单介绍和使用)
- Matlab调用DLL
- cocos2d-x 游戏引擎的处理流程 MainLoop主循环(下)
- Android Volley - volley StringRequest編碼問題
- 基于JavaEE平台实战WebService框架Xfire+Ajax框架DWR视频教程
- 小步快跑,快速迭代,持续优化
- 免费云空间/VPS AppFog申请及Python Web应用开发与上传实战