Hive权限控制

Hive权限机制:

Hive从0.10可以通过元数据控制权限。但是Hive的权限控制并不是完全安全的。基本的授权方案的目的是防止用户不小心做了不合适的事情。

先决条件:

为了使用Hive的授权机制,有两个参数必须在hive-site.xml中设置:

<property> 
<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 所有权限
ALTER 允许修改元数据(modify metadata data of object)---表信息数据
UPDATE 允许修改物理数据(modify physical data of object)---实际数据
CREATE 允许进行Create操作
DROP 允许进行DROP操作
INDEX 允许建索引(目前还没有实现)
LOCK 当出现并发的使用允许用户进行LOCK和UNLOCK操作
SELECT 允许用户进行SELECT操作
SHOW_DATABASE 允许用户查看可用的数据库

常用的: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:

Operation ALTER UPDATE CREATE DROP INDEX LOCK SELECT SHOW_DATABASE
LOAD              
EXPORT              
IMPORT            
CREATE TABLE              
CREATE TABLE AS SELECT            
DROP TABLE              
SELECT              
ALTER TABLE ADD COLUMN              
ALTER TABLE REPLACE COLUMN              
ALTER TABLE RENAME              
ALTER TABLE ADD PARTITION              
ALTER TABLE DROP PARTITION              
ALTER TABLE ARCHIVE              
ALTER TABLE UNARCHIVE              
ALTER TABLE SET PROPERTIES              
ALTER TABLE SET SERDE              
ALTER TABLE SET SERDEPROPERTIES              
ALTER TABLE CLUSTER BY              
ALTER TABLE PROTECT MODE              
ALTER PARTITION PROTECT MODE              
ALTER TABLE SET FILEFORMAT              
ALTER TABLE SET LOCATION              
ALTER PARTITION SET LOCATION              
ALTER TABLE CONCATENATE              
ALTER PARTITION CONCATENATE              
SHOW DATABASE              
LOCK TABLE              
UNLOCK TABLE              
 
 
 
实现HIVE中的超级管理员

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配置,并实现自己的权限控制类。

 /*
* Copyright (c) 2010-2013 All Rights Reserved.
*
* Author :
* Version :1.0
* Create Date:2013-6-13
*/
package com.xxx.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; /**
* 设置Hive超级管理员
*
* @author
* @version $Id: AuthHook.java,v 0.1 2013-6-13 下午3:32:12 yinxiu Exp $
*/
public class AuthHook extends AbstractSemanticAnalyzerHook {
private static String admin = "xxxxxx"; @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;
}
}

添加了控制类之后还必须添加下面的配置:

<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权限控制和超级管理员的实现的更多相关文章

  1. Windows 8提升普通管理员权限为超级管理员权限以及激活超级管理员Administrator

    在Windows 8下运行某些操作时(比如删除一些文件或者更改某些系统设置时)系统会提示我们权限不够.须要Administrator账户的权限. 相信很多其它的使用者都会觉得自己当前使用的账户已经是系 ...

  2. Hive记录-hive权限控制

    在使用Hive的元数据配置权限之前必须现在hive-site.xml中配置两个参数,配置参数如下: <property> <name>hive.security.authori ...

  3. 开放计算平台——数据仓库(Hive)权限控制

    平台数据仓库使用Hive进行构建,通过调研决定使用“SQL Standards Based Authorization in HiveServer2”对用户提交的SQL进行权限控制,也可根据实际情况选 ...

  4. hive权限管理之实践

    一.实践心得 主要参考这个连接,里面说得也挺详细的.http://www.aboutyun.com/thread-12549-1-1.html 总结如下: 1.若赋予用户某个表的权限,查用户在该表所属 ...

  5. Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理

    首先,白话一下RBAC模型.RBAC是基于角色的访问控制(Role-Based Access Control)的简称.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,wh ...

  6. 别再让你的微服务裸奔了,基于 Spring Session & Spring Security 微服务权限控制

    微服务架构 网关:路由用户请求到指定服务,转发前端 Cookie 中包含的 Session 信息: 用户服务:用户登录认证(Authentication),用户授权(Authority),用户管理(R ...

  7. Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)

    本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...

  8. Hive 基本语法操练(六):Hive 的权限控制

    Hive 的权限控制 Hive从0.10可以通过元数据控制权限.但是Hive的权限控制并不是完全安全的.基本的授权方案的目的是防止用户不小心做了不合适的事情. 为了使用Hive的授权机制,有两个参数必 ...

  9. <实训|第八天>超级管理员管理linux用户行为权限附监控主机状态

    作为运维工程师,系统管理员,你最大的权力就是给别人分配权力,而且你还能时时控制着他们,今天就给大家介绍一下关于管理用户这一方面的前前后后.  开班第八天: 主要课程大纲:(下面我将把自己的身份定位成一 ...

随机推荐

  1. 获取 Windows Phone 手机系统信息

    wpf: <phone:PhoneApplicationPage x:Class="ABSystemInfo.MainPage" xmlns="http://sch ...

  2. 自己通过Cygwin编译的windows下的redis3.2.6

    采用方法:https://my.oschina.net/maxid/blog/186506 方法中在3.2.6未找到src/redis.h文件 未修改 方法中 /deps/hiredis/net.c ...

  3. vs 2012 设置选中的引用高亮 颜色

    一个简单的小技巧,不用插件也可以做到,vs 2012 设置选中的引用高亮 颜色 .vs 默认的单击引用的变量时,显示的颜色是灰色,基本看不出来,所有特意抽空捣鼓了下 还真让我给找出来 工具==> ...

  4. jquery自定义插件——window的实现

    本例子实现弹窗的效果: 1.jquery.show.js /* * 开发者:lzugis * 开发时间:2014年6月10日 * 实现功能:点击在鼠标位置显示div * 版本序号:1.0 */ (fu ...

  5. CentOS 编译安装 MySQL5.7

    下载 所有版本下载地址: http://dev.mysql.com/downloads/mysql/ 此处用 5.7.10 wget http://dev.mysql.com/get/Download ...

  6. Oracle 查询并删除重复记录的SQL语句

    查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select  ...

  7. jsoup html采集器

    package com.forex.collect; import java.io.IOException;import java.util.HashMap;import java.util.Iter ...

  8. ServiceStack.Text反序列化lowercase_underscore_names格式的JSON

    代码: [Test] public void Test() { JsConfig.PropertyConvention = JsonPropertyConvention.Lenient; var js ...

  9. Android 手机卫士15--程序锁

    1.基本思路 ①.创建已加锁应用的数据库(字段:_id,packagename),如果应用已加锁,将加锁应用的包名维护到数据库中 ②.已加锁+未加锁 == 手机中所有应用(AppInfoProvide ...

  10. Hadoop的Map侧join

    写了关于Hadoop下载地址的Map侧join 和Reduce的join,今天我们就来在看另外一种比较中立的Join. SemiJoin,一般称为半链接,其原理是在Map侧过滤掉了一些不需要join的 ...