为了更好地使用好Hive,我将《Programming Hive》的Security章节取出来,翻译了一下。

Hive还是支持相当多的权限管理功能,满足一般数据仓库的使用。

Hive由一个默认的设置来配置新建文件的默认权限。

  1. <property>
  2. <name>hive.files.umask.value</name>
  3. <value>0002</value>
  4. <description>The dfs.umask value for the hive created folders</description>
  5. </property>
<property>
<name>hive.files.umask.value</name>
<value>0002</value>
<description>The dfs.umask value for the hive created folders</description>
</property>

当hive.metastore.authorization.storage.checks属性被设置成true时,
Hive将会阻止没有权限的用户进行表删除操作。
不过这个配置的默认值是false,应该设置成true

  1. <property>
  2. <name>hive.metastore.authorization.storage.checks</name>
  3. <value>true</value>
  4. <description>Should the metastore do authorization checks against
  5. the underlying storage for operations like drop-partition (disallow
  6. the drop-partition if the user in question doesn't have permissions
  7. to delete the corresponding directory on the storage).</description>
  8. </property>
<property>
<name>hive.metastore.authorization.storage.checks</name>
<value>true</value>
<description>Should the metastore do authorization checks against
the underlying storage for operations like drop-partition (disallow
the drop-partition if the user in question doesn't have permissions
to delete the corresponding directory on the storage).</description>
</property>

同时,Hive会尽可能地将hive.metastore.execute.setugi设置成true。

开启Hive的身份认证功能,默认是false

  1. <property>
  2. <name>hive.security.authorization.enabled</name>
  3. <value>true</value>
  4. <description>Enable or disable the hive client authorization</description>
  5. </property>
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
<description>Enable or disable the hive client authorization</description>
</property>

另外还有一个是表格创建者用于的权限配置项:

  1. <property>
  2. <name>hive.security.authorization.createtable.owner.grants</name>
  3. <value>ALL</value>
  4. <description>The privileges automatically granted to the owner whenever
  5. a table gets created.An example like "select,drop" will grant select
  6. and drop privilege to the owner of the table</description>
  7. </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>

这个配置默认是NULL,我们建议将其设置成ALL,让用户能够访问自己创建的表。

试验,在命令行环境开启用户认证

  1. hive> set hive.security.authorization.enabled=true;
  2. hive> CREATE TABLE authorization_test (key int, value string);
  3. Authorization failed:No privilege 'Create' found for outputs { database:default}.
  4. Use show grant to get more details.
hive> set hive.security.authorization.enabled=true;
hive> CREATE TABLE authorization_test (key int, value string);
Authorization failed:No privilege 'Create' found for outputs { database:default}.
Use show grant to get more details.

我们可以看到,建表需要权限了。
权限可以授予给不同的主题,如用户(USER),组(GROUP),角色(ROLES)

现在我们通过授权方式,将权限授予给当前用户:

  1. hive> set system:user.name;
  2. system:user.name=edward
  3. hive> GRANT CREATE ON DATABASE default TO USER edward;
  4. hive> CREATE TABLE authorization_test (key INT, value STRING);
hive> set system:user.name;
system:user.name=edward
hive> GRANT CREATE ON DATABASE default TO USER edward;
hive> CREATE TABLE authorization_test (key INT, value STRING);

这样就可以创建表了。

我们可以通过SHOW GRANT命令确认我们拥有的权限:

  1. hive> SHOW GRANT USER edward ON DATABASE default;
  2. database default
  3. principalName edward
  4. principalType USER
  5. privilege Create
  6. grantTime Mon Mar 19 09:18:10 EDT 2012
  7. grantor edward
hive> SHOW GRANT USER edward ON DATABASE default;
database default
principalName edward
principalType USER
privilege Create
grantTime Mon Mar 19 09:18:10 EDT 2012
grantor edward

当Hive里面用于N多用户和N多张表的时候,管理员给每个用户授权每张表会让他崩溃的。
所以,这个时候就可以进行组(GROUP)授权。
Hive里的用户组的定义等价于POSIX里面的用户组。

  1. hive> CREATE TABLE authorization_test_group(a int,b int);
  2. hive> SELECT * FROM authorization_test_group;
  3. Authorization failed:No privilege 'Select' found for inputs
  4. { database:default, table:authorization_test_group, columnName:a}.
  5. Use show grant to get more details.
  6. hive> GRANT SELECT on table authorization_test_group to group edward;
  7. hive> SELECT * FROM authorization_test_group;
  8. OK
  9. Time taken: 0.119 seconds
hive> CREATE TABLE authorization_test_group(a int,b int);
hive> SELECT * FROM authorization_test_group;
Authorization failed:No privilege 'Select' found for inputs
{ database:default, table:authorization_test_group, columnName:a}.
Use show grant to get more details.
hive> GRANT SELECT on table authorization_test_group to group edward;
hive> SELECT * FROM authorization_test_group;
OK
Time taken: 0.119 seconds

当给用户组授权变得不够灵活的时候,角色(ROLES)就派上用途了。
用户可以被放在某个角色之中,然后角色可以被授权。
角色不同于用户组,是由Hadoop控制的,它是由Hive内部进行管理的。

  1. hive> CREATE TABLE authentication_test_role (a int , b int);
  2. hive> SELECT * FROM authentication_test_role;
  3. Authorization failed:No privilege 'Select' found for inputs
  4. { database:default, table:authentication_test_role, columnName:a}.
  5. Use show grant to get more details.
  6. hive> CREATE ROLE users_who_can_select_authentication_test_role;
  7. hive> GRANT ROLE users_who_can_select_authentication_test_role TO USER edward;
  8. hive> GRANT SELECT ON TABLE authentication_test_role
  9. > TO ROLE users_who_can_select_authentication_test_role;
  10. hive> SELECT * FROM authentication_test_role;
  11. OK
  12. Time taken: 0.103 seconds
hive> CREATE TABLE authentication_test_role (a int , b int);
hive> SELECT * FROM authentication_test_role;
Authorization failed:No privilege 'Select' found for inputs
{ database:default, table:authentication_test_role, columnName:a}.
Use show grant to get more details.
hive> CREATE ROLE users_who_can_select_authentication_test_role;
hive> GRANT ROLE users_who_can_select_authentication_test_role TO USER edward;
hive> GRANT SELECT ON TABLE authentication_test_role
> TO ROLE users_who_can_select_authentication_test_role;
hive> SELECT * FROM authentication_test_role;
OK
Time taken: 0.103 seconds

介绍一下常用的授权关键字:

ALTER 更改表结构,创建分区
CREATE 创建表
DROP 删除表,或分区
INDEX 创建和删除索引
LOCK 锁定表,保证并发
SELECT 查询表权限
SHOW_DATABASE 查看数据库权限
UPDATE

为表加载本地数据的权限

分区表级别的授权
默认情况下,分区表的授权将会跟随表的授权
当然,也可以给每一个分区建立一个授权机制,
只需要设置表的属性PARTITION_LEVEL_PRIVILEGE设置成TRUE:

  1. hive> ALTER TABLE authorization_part
  2. > SET TBLPROPERTIES ("PARTITION_LEVEL_PRIVILEGE"="TRUE");
  3. Authorization failed:No privilege 'Alter' found for inputs
  4. {database:default, table:authorization_part}.
  5. Use show grant to get more details.
hive> ALTER TABLE authorization_part
> SET TBLPROPERTIES ("PARTITION_LEVEL_PRIVILEGE"="TRUE");
Authorization failed:No privilege 'Alter' found for inputs
{database:default, table:authorization_part}.
Use show grant to get more details.

自动授权
属性hive.security.authorization.createtable.owner.grants决定了
建表者对表拥有的权限,一版情况下,有select和drop

  1. <property>
  2. <name>hive.security.authorization.createtable.owner.grants</name>
  3. <value>select,drop</value>
  4. </property>
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>select,drop</value>
</property>

类似的,特定的用户可以被在表创建的时候自动授予其权限。

  1. <property>
  2. <name>hive.security.authorization.createtable.user.grants</name>
  3. <value>admin1,edward:select;user1:create</value>
  4. </property>
<property>
<name>hive.security.authorization.createtable.user.grants</name>
<value>admin1,edward:select;user1:create</value>
</property>

当表建立的时候,管理员admin1和用户edward授予读所有表的权限。
而user1只能创建表。

同样的配置也可以作用于组授权和角色授权
hive.security.authorization.createtable.group.grants
hive.security.authorization.createtable.role.grants

转自 http://dacoolbaby.iteye.com/blog/1829545

Hive的Security配置的更多相关文章

  1. 【转】hive简介安装 配置常见问题和例子

    原文来自:  http://blog.csdn.net/zhumin726/article/details/8027802 1 HIVE概述 Hive是基于Hadoop的一个数据仓库工具,可以将结构化 ...

  2. hadoop2.2.0 + hbase 0.94 + hive 0.12 配置记录

    一开始用hadoop2.2.0 + hbase 0.96 + hive 0.12 ,基本全部都配好了.只有在hive中查询hbase的表出错.以直报如下错误: java.io.IOException: ...

  3. Hive的安装配置

    Hive的安装配置 Hive的安装配置 安装前准备 下载Hive版本1.2.1: 1.[root@iZ28gvqe4biZ ~]# wget http://mirror.bit.edu.cn/apac ...

  4. Hive安装与配置详解

    既然是详解,那么我们就不能只知道怎么安装hive了,下面从hive的基本说起,如果你了解了,那么请直接移步安装与配置 hive是什么 hive安装和配置 hive的测试 hive 这里简单说明一下,好 ...

  5. spring boot 之 spring security 配置

    Spring Security简介 之前项目都是用shiro,但是时过境迁,spring security变得越来越流行.spring security的前身是Acegi, acegi 我也玩过,那都 ...

  6. [hive] hive 安装、配置

    一.hive安装 1.官网下载 1.2.2版本 http://apache.fayea.com/hive/hive-1.2.2/ 2. 解压,此处目录为 /opt/hadoop/hive-1.2.2 ...

  7. Hive安装与配置--- 基于MySQL元数据

    hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过 ...

  8. 【Hive一】Hive安装及配置

    Hive安装及配置 下载hive安装包 此处以hive-0.13.1-cdh5.3.6版本的为例,包名为:hive-0.13.1-cdh5.3.6.tar.gz 解压Hive到安装目录 $ tar - ...

  9. CentOS6安装各种大数据软件 第八章:Hive安装和配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

随机推荐

  1. 对Spring <context:annotation-config/>的理解

    在基于主机方式配置Spring的配置文件中,你可能会见到<context:annotation-config/>这样一条配置,他的作用是向 Spring 容器注册 AutowiredAnn ...

  2. CentOS系统下各文件夹的作用

    linux下的文件结构,看看每个文件夹都是干吗用的 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的 ...

  3. Beaglebone Black–GPIO 高低电平控制 LED 灯

    上一篇,运用 Linux 的 sysfs,控制本机上的 LED 灯,usr0 至 usr3,这次用 GPIO 控制外部的电路,点亮 LED 灯. 这次的全部材料: BBB 一台 购买 BBB 自带的 ...

  4. Ubuntu中文输入法的添加

    做了一个英文环境的Ubuntu14.04LTS,为了写博客方便,添加了中文输入法,在网上搜寻了一堆方法,最后找到个靠谱的. 1 添加fcitx输入法框架.(在此框架下有各种输入法) sudo add- ...

  5. Smart Forms&ScriptFrom

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. Nemerle Quick Guide

    This is a quick guide covering nearly all of Nemerle's features. It should be especially useful to a ...

  7. 使用Select命令创建菜单

    创建文本菜单的一半功夫都花在了创建菜单布局和获取输入的字符上.bash shell提供了一个很容易上手的小工具来自动完成这些工作select命令允许从单个命令行创建菜单,然后在提取输入的答案并自动处理 ...

  8. iOS - Swift NSData 数据

    前言 public class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding public class NSMutabl ...

  9. hibernate(三)检索属性配置

    检索即对象的获取:获取的时机和和方式:减少没必要的内存占用,尽量少的sql语句减少多余数据库的访问 一:类级别的检索:load() 和属性<class lazy=true> .无论 < ...

  10. css 的小细节,小总结

    CSS的一些零碎总结 1.CSS 伪元素用于向某些选择器设置特殊效果(用来当作一个东西的,跟一个元素差不多,但不是元素). ① :frist-line伪元素:用于向文本首行设置特殊样式,但是只能用于块 ...