`
superlxw1234
  • 浏览: 543467 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:43397
社区版块
存档分类
最新评论

hive权限控制---限定用户的某些操作权限

阅读更多
package com.lxw.hive;



import org.apache.hadoop.hive.ql.parse.ASTNode;
import org.apache.hadoop.hive.ql.parse.AbstractSemanticAnalyzerHook;
import org.apache.hadoop.hive.ql.parse.HiveParser;
import org.apache.hadoop.hive.ql.parse.HiveSemanticAnalyzerHookContext;
import org.apache.hadoop.hive.ql.parse.SemanticException;
import org.apache.hadoop.hive.ql.session.SessionState;

/**
 * 只运行Admin用户(lxw用户)执行创建数据库,赋权等操作。
 */
public class MyAuthHook extends AbstractSemanticAnalyzerHook {
	private static String admin = "lxw";

	@Override
	public ASTNode preAnalyze(HiveSemanticAnalyzerHookContext context,
			ASTNode ast) throws SemanticException {
		switch (ast.getToken().getType()) {
		case HiveParser.TOK_CREATEDATABASE:
		case HiveParser.TOK_DROPDATABASE:
		case HiveParser.TOK_CREATEROLE:
		case HiveParser.TOK_DROPROLE:
		case HiveParser.TOK_GRANT:
		case HiveParser.TOK_REVOKE:
		case HiveParser.TOK_GRANT_ROLE:
		case HiveParser.TOK_REVOKE_ROLE:
			String userName = null;
			if (SessionState.get() != null
					&& SessionState.get().getAuthenticator() != null) {
				userName = SessionState.get().getAuthenticator().getUserName();
			}
			if (!admin.equalsIgnoreCase(userName)) {
				throw new SemanticException(userName
						+ " can't use ADMIN options, except " + admin + ".");
			}
			break;
		default:
			break;
		}

		return ast;
	}
}

 

打包放到$HIVE_HOME/lib目录下;

修改hive-site.xml

 

<property>
  <name>hive.semantic.analyzer.hook</name>
  <value>com.lxw.hive.MyAuthHook</value>
</property>

 

运行结果:

 

hive> drop database lxw2;
FAILED: Error in semantic analysis: lxw2 can't use ADMIN options, except lxw.
hive> create database lxw3;
FAILED: Error in semantic analysis: lxw2 can't use ADMIN options, except lxw.
hive> grant select on database lxw2 to user lxw2;
FAILED: Error in semantic analysis: lxw2 can't use ADMIN options, except lxw.
 
分享到:
评论
3 楼 黎明lm 2012-12-05  
是啊.我今天调试了一下,不过不是很完美,虽然起到了grant的效果.不过遇到两个问题:
1.grant 授权语句 任何用户只要进入 hive cli下都可以执行 grant 语句
2.grant all table tablename to user username  这个username 不能有.号  如 rongneng.wei 这样的中间带 . 的都不行,我们系统基本所有用户都是中间 带. 的 。能留下qq么 我加您
2 楼 superlxw1234 2012-12-05  
黎明lm 写道
hive 怎么针对某一一个表 做权限控制呢?你这个控制的范围太大了 ,这种形式 基本不需要修改 hive源码 的 感觉


和传统数据库一样,hive也可以用grant语句对某个schema或者表赋权限。
1 楼 黎明lm 2012-12-05  
hive 怎么针对某一一个表 做权限控制呢?你这个控制的范围太大了 ,这种形式 基本不需要修改 hive源码 的 感觉

相关推荐

Global site tag (gtag.js) - Google Analytics