`
liyonghui160com
  • 浏览: 775981 次
  • 性别: 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权限设置说明文档.doc

    要访问 Hive,需要通过 Hue 进行身份验证和权限控制。下面是具体的设置步骤: 1. 创建 Hue 用户和组:使用 Hue 管理员账号登录 Hue,创建用户和组,设置用户名、密码和组别。 2. 配置 Hive 权限:在 hive-site.xml ...

    Hive权限设置说明文档

    在大数据处理领域,Hive作为一个...通过理解并熟练运用上述方法,管理员可以有效地管理和控制用户对Hive资源的访问,从而实现数据的安全共享。在进行权限设置时,务必考虑业务需求和安全风险,制定出合理的权限策略。

    07--Hive权限管理1

    它涉及到如何控制用户对数据库、表、列甚至行级别的访问。本篇文章将详细讲解Hive的三种授权模型:基于存储的授权、基于SQL标准的授权以及默认的Hive授权,并探讨它们的特点、限制以及配置方法。 1. 基于存储的授权...

    hive-role.zip

    "hive-role.zip" 文件看起来是与 Hive 的权限管理和配置相关的资源包,可能包含了一些实现 Hive 角色权限控制所需的 jar 包。下面将详细探讨 Hive 的权限设置及其相关知识点。 1. **Hive 的角色权限机制**: Hive ...

    ranger-2.1.0-hive-plugin.tar.gz

    1. **细粒度权限控制**:Ranger Hive 插件允许管理员为用户或组设置对数据库、表、列甚至行级别的访问权限,如读、写、执行等操作。 2. **动态数据屏蔽**:基于预定义的规则,Ranger 可以在查询结果返回之前动态地...

    ranger-2.0.0-hive-plugin.tar.gz

    1. **权限管理**:Ranger 提供了细粒度的权限控制,允许管理员定义用户或组对Hive表、列、行级别的访问权限。这有助于保护敏感数据,确保只有授权用户才能访问特定资源。 2. **审计日志**:Ranger 提供全面的审计...

    hive-jdbc-uber-3.1.2+yanagishima-18.0

    Yanagishima不仅简化了对Hive、Presto和Trino等查询引擎的接口,还提供了权限控制,确保只有授权用户可以执行查询。它的核心功能包括SQL查询的提交、结果的展示以及查询历史的记录,为数据分析团队提供了一个便捷的...

    ranger-3.0.0-SNAPSHOT-hive-plugin.tar.gz

    1. **用户和组**:可以基于用户或用户组设置权限,实现用户级别的隔离。 2. **资源与操作**:指定资源(如数据库、表、分区)和操作(如SELECT、INSERT、ALTER),实现精确的访问控制。 3. **条件策略**:可以通过...

    Hive随笔.docx

    5. TCL(Transaction Control Language):在 Hive 中主要用于脚本编程和任务控制。 【Hive 数据库管理】 Hive 中的数据库实际上是在 HDFS 上的目录,每个数据库对应一个以 .db 结尾的文件。用户可以通过 `SHOW ...

    Hive使用手册1

    1. **Sentry授权模型**:Sentry基于角色的访问控制(RBAC)模型,通过角色来定义权限,然后将角色分配给用户或组。 2. **Sentry授权实例**:例如,可以创建一个角色,允许用户只读取某个表或分区,不允许写入或修改...

    sentry 权限简介

    - **支持的数据对象扩展**:Sentry不仅支持数据库/表/视图级别的权限控制,还扩展到了服务器、URI以及列粒度。这对于处理大量用户和表格的情况非常有用。 #### 四、Sentry的关键组件 Sentry的核心架构由三个主要...

    CDH权限管理文档.docx

    正确地安装和配置Kerberos,结合Cloudera Manager,可以实现对CDH环境中所有服务和用户的细粒度权限控制,从而确保大数据处理环境的安全性和稳定性。同时,理解并熟练掌握Kerberos的配置方法和权限管理策略,对于...

    Ranger和Atlas进行数据治理.docx

    本文档将详细阐述这两者如何协同工作,以实现对Yarn、HDFS、Hbase、Hive、Kafka等组件的权限控制。 Apache Atlas是一个元数据管理系统,它提供了全面的数据治理解决方案。Atlas的核心功能在于元数据管理与数据血缘...

    Apache Hadoop---Sentry.docx

    3. **创建更多应用案例**:由于具备安全的权限控制,Sentry鼓励开发更多基于Hadoop的多用户应用程序。 4. **合规性**:Sentry的设计符合多项法规标准,如SOX、PCI、HIPAA和EAL3,确保了企业与政府用户的数据合规性。...

    ranger-2.0.0-usersync.tar.gz

    在大数据环境中,用户管理和权限控制是至关重要的。Ranger 的用户同步工具允许管理员从一个中央身份提供者(如 LDAP 或 Active Directory)同步用户和组信息到 Ranger 的服务实例,确保权限设置的一致性和安全性。这...

    ranger-2.0.0-hdfs-plugin.tar.gz

    1. **权限管理**:Ranger 提供细粒度的权限控制,允许管理员定义用户或组对资源的读、写、执行等操作权限。 2. **策略管理**:通过Web界面,管理员可以轻松创建、修改和删除权限策略,这些策略可应用于HDFS目录、...

    cdh6.3.2编译的ranger版本

    6. ranger-2.1.0-hive-plugin.tar.gz:Hive插件,允许对Hive查询和表进行精细的权限控制。 7. ranger-2.1.0-usersync.tar.gz:用户同步工具,用于同步企业目录服务(如Active Directory或LDAP)中的用户和组信息到...

    apache-sentry-2.1.0-src.tar.gz

    在Apache Sentry 2.1.0版本中,它提供了精细的权限控制,使得用户可以对Hive、HBase等数据存储系统进行细粒度的权限设定,从而保护数据资产的安全。 源码包"apache-sentry-2.1.0-src.tar.gz"包含了Sentry的所有源...

    Apache Hadoop---Ranger.docx

    3. **Ranger-SDK**:这是一个开发工具包,用于与Ranger的接口进行交互,支持对用户、用户组和策略的管理,使第三方服务能够无缝集成到Ranger的安全管理体系中。 Ranger的权限模型基于“用户-资源-权限”关系,这...

    ranger-2.2.0-usersync.tar.gz

    Apache Ranger 是一个强大的安全框架,用于管理大数据生态系统中的数据访问和权限控制。Ranger 提供了集中式的策略管理、审计和细粒度的访问控制,适用于多种数据存储和处理服务,如 Hadoop、Hive、HBase、Kafka 等...

Global site tag (gtag.js) - Google Analytics