`
liyonghui160com
  • 浏览: 761079 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hive权限控制 用户和组

    博客分类:
  • hive
阅读更多

 

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

 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     @Override
27     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() != null
40                     && SessionState.get().getAuthenticator() != null) {
41                 userName = SessionState.get().getAuthenticator().getUserName();
42             }
43             if (!admin.equalsIgnoreCase(userName)) {
44                 throw new SemanticException(userName
45                         + " 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权限设置说明

    CDH平台,通过hue访问hive,控制库级别,表级别,及列级别的访问权限

    利用Hive进行复杂用户行为大数据分析及优化案例

    利用Hive进行复杂用户行为大数据分析及优化案例(全套视频+课件+代码+讲义+工具软件),具体内容包括: 01_自动批量加载数据到hive 02_Hive表批量加载数据的脚本实现(一) 03_Hive表批量加载数据的脚本实现(二) ...

    基于Hive的淘宝用户行为数据分析.docx

    基于Hive的淘宝用户行为数据分析.docx基于Hive的淘宝用户行为数据分析.docx基于Hive的淘宝用户行为数据分析.docx基于Hive的淘宝用户行为数据分析.docx基于Hive的淘宝用户行为数据分析.docx基于Hive的淘宝用户行为...

    hive开启权限后不能创建数据库问题

    背景:由于Hive需要开启权限管理,安装网上教程,开启权限配置,重启集群后。 使用root用户登录,进入Hive命令行界面。 执行 create database test; 发现报错: Authorization failed:No privilege 'Create' found ...

    Hive用户指南

    Hive用户指南 目录 1. HIVE结构 6 1.1 HIVE架构 6 1.2 Hive 和 Hadoop 关系 7 1.3 Hive 和普通关系数据库的异同 8 1.4 HIVE元数据库 9 1.4.1 DERBY 9 1.4.2 Mysql 10 1.5 HIVE的数据存储 11 1.6 其它HIVE操作 11 2. ...

    Hive新手学习资料之Hive入门与实战.+Hive用户手册+hive函数大全中文版资源合集

    hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询...

    Hive权限设置说明文档.doc

    CDH平台,通过hue访问hive,控制库级别,表级别,及列级别的访问权限

    Hive用户指南.zip

    Hive用户.zip

    hive

    hive hive hive hive hive hive hive hive hive hive hive hive

    Hive用户指南(Hive_user_guide)_中文版pdf

    Hive用户(Hive_user_guide)_中文版pdf

    Hive用户指南 Hive user guide 中文版

    Hive用户指南 Hive user guide 中文版

    Hive用户指南(Hive_user_guide)_中文版

    Hive 用户指南 中文版

    hive介绍和hive环境搭建

    hive介绍和hive环境搭建。。一、 安装mysql 1. 使用root用户: su root 2. 安装 yum install mysql yum install mysql-server yum install mysql-devel(可选) 3. 修改配置信息,添加: vim /etc/my.cnf ...

    Hive权限设置说明文档

    Hive权限设置说明文档

    Hive用户指南(Hive_user_guide)_中文版.pdf

    Hive 中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数 据格式需要指定三个属性:列分隔符(通常为空格、” t ”、” x001″)、行分隔符 (” n”)以及读取文件数据的方法( Hive 中默认有三个...

    hive权限管控jar(hiveAuth.zip)

    给hive添加用户权限jar包

    Hive3.1.2编译源码

    使用hive3.1.2和spark...所以,如果想要使用高版本的hive和hadoop,我们要重新编译hive,兼容spark3.0.0。除了兼容spark3.0.0外,还将hive3.1.2的guava的版本进行了提升,和hadoop3.x保持一致,以便兼容hadoop3.1.3。

    hive2.1.1中orc格式读取报数组越界错误解决方法

    hive2.1.1orc格式读取报数组越界错误,替换jar包。hive-exec-2.1.1-cdh6.3.2.jar、hive-orc-2.1.1-cdh6.3.2.jar。分发各个服务器即可。

    hive编程指南中文

    《Hive编程指南》是一本Apache Hive的编程指南 旨在介绍如何使用Hive的SQL方法 HiveQL来汇总 查询和分析存储在Hadoop分布式文件系统上的大数据集合 全书通过大量的实例 首先介绍如何在用户环境下安装和配置Hive 并对...

    Hive和Hase配置

    配置hive-0.9.0和hbase-0.94.1结合使用,部分内容如下: 1.拷贝hbase-0.94.1.jar和zookeeper-3.4.3.jar到hive/lib下。 注意:如hive/lib下已经存在这两个文件的其他版本,建议删除后使用hbase下的相关版本。 //...

Global site tag (gtag.js) - Google Analytics