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本身有权限管理功能,需要通过配置开启。
<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,需要通过 Hue 进行身份验证和权限控制。下面是具体的设置步骤: 1. 创建 Hue 用户和组:使用 Hue 管理员账号登录 Hue,创建用户和组,设置用户名、密码和组别。 2. 配置 Hive 权限:在 hive-site.xml ...
在大数据处理领域,Hive作为一个...通过理解并熟练运用上述方法,管理员可以有效地管理和控制用户对Hive资源的访问,从而实现数据的安全共享。在进行权限设置时,务必考虑业务需求和安全风险,制定出合理的权限策略。
它涉及到如何控制用户对数据库、表、列甚至行级别的访问。本篇文章将详细讲解Hive的三种授权模型:基于存储的授权、基于SQL标准的授权以及默认的Hive授权,并探讨它们的特点、限制以及配置方法。 1. 基于存储的授权...
"hive-role.zip" 文件看起来是与 Hive 的权限管理和配置相关的资源包,可能包含了一些实现 Hive 角色权限控制所需的 jar 包。下面将详细探讨 Hive 的权限设置及其相关知识点。 1. **Hive 的角色权限机制**: Hive ...
1. **细粒度权限控制**:Ranger Hive 插件允许管理员为用户或组设置对数据库、表、列甚至行级别的访问权限,如读、写、执行等操作。 2. **动态数据屏蔽**:基于预定义的规则,Ranger 可以在查询结果返回之前动态地...
1. **权限管理**:Ranger 提供了细粒度的权限控制,允许管理员定义用户或组对Hive表、列、行级别的访问权限。这有助于保护敏感数据,确保只有授权用户才能访问特定资源。 2. **审计日志**:Ranger 提供全面的审计...
Yanagishima不仅简化了对Hive、Presto和Trino等查询引擎的接口,还提供了权限控制,确保只有授权用户可以执行查询。它的核心功能包括SQL查询的提交、结果的展示以及查询历史的记录,为数据分析团队提供了一个便捷的...
1. **用户和组**:可以基于用户或用户组设置权限,实现用户级别的隔离。 2. **资源与操作**:指定资源(如数据库、表、分区)和操作(如SELECT、INSERT、ALTER),实现精确的访问控制。 3. **条件策略**:可以通过...
5. TCL(Transaction Control Language):在 Hive 中主要用于脚本编程和任务控制。 【Hive 数据库管理】 Hive 中的数据库实际上是在 HDFS 上的目录,每个数据库对应一个以 .db 结尾的文件。用户可以通过 `SHOW ...
1. **Sentry授权模型**:Sentry基于角色的访问控制(RBAC)模型,通过角色来定义权限,然后将角色分配给用户或组。 2. **Sentry授权实例**:例如,可以创建一个角色,允许用户只读取某个表或分区,不允许写入或修改...
- **支持的数据对象扩展**:Sentry不仅支持数据库/表/视图级别的权限控制,还扩展到了服务器、URI以及列粒度。这对于处理大量用户和表格的情况非常有用。 #### 四、Sentry的关键组件 Sentry的核心架构由三个主要...
正确地安装和配置Kerberos,结合Cloudera Manager,可以实现对CDH环境中所有服务和用户的细粒度权限控制,从而确保大数据处理环境的安全性和稳定性。同时,理解并熟练掌握Kerberos的配置方法和权限管理策略,对于...
本文档将详细阐述这两者如何协同工作,以实现对Yarn、HDFS、Hbase、Hive、Kafka等组件的权限控制。 Apache Atlas是一个元数据管理系统,它提供了全面的数据治理解决方案。Atlas的核心功能在于元数据管理与数据血缘...
3. **创建更多应用案例**:由于具备安全的权限控制,Sentry鼓励开发更多基于Hadoop的多用户应用程序。 4. **合规性**:Sentry的设计符合多项法规标准,如SOX、PCI、HIPAA和EAL3,确保了企业与政府用户的数据合规性。...
在大数据环境中,用户管理和权限控制是至关重要的。Ranger 的用户同步工具允许管理员从一个中央身份提供者(如 LDAP 或 Active Directory)同步用户和组信息到 Ranger 的服务实例,确保权限设置的一致性和安全性。这...
1. **权限管理**:Ranger 提供细粒度的权限控制,允许管理员定义用户或组对资源的读、写、执行等操作权限。 2. **策略管理**:通过Web界面,管理员可以轻松创建、修改和删除权限策略,这些策略可应用于HDFS目录、...
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版本中,它提供了精细的权限控制,使得用户可以对Hive、HBase等数据存储系统进行细粒度的权限设定,从而保护数据资产的安全。 源码包"apache-sentry-2.1.0-src.tar.gz"包含了Sentry的所有源...
3. **Ranger-SDK**:这是一个开发工具包,用于与Ranger的接口进行交互,支持对用户、用户组和策略的管理,使第三方服务能够无缝集成到Ranger的安全管理体系中。 Ranger的权限模型基于“用户-资源-权限”关系,这...
Apache Ranger 是一个强大的安全框架,用于管理大数据生态系统中的数据访问和权限控制。Ranger 提供了集中式的策略管理、审计和细粒度的访问控制,适用于多种数据存储和处理服务,如 Hadoop、Hive、HBase、Kafka 等...