文档章节

[翻译]Hive的Security配置

吐槽的达达仔
 吐槽的达达仔
发布于 2014/12/05 22:17
字数 1042
阅读 14
收藏 1

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

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

 

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

<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

 

<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

<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>

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

 

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

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)

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

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命令确认我们拥有的权限:

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里面的用户组。

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内部进行管理的。

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:

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

<property>
  <name>hive.security.authorization.createtable.owner.grants</name>
  <value>select,drop</value>
</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

吐槽的达达仔
粉丝 27
博文 103
码字总数 6775
作品 0
广州
程序员
私信 提问
Hadoop集群(五) Hive安装

作为一个多年的DBA,hadoop家族中,最亲切的产品就是hive了。毕竟SQL的使用还是很熟悉的。再也不用担心编写Mapreducer的痛苦了。 首先还是简单介绍一下Hive吧Hive是基于Hadoop的数据仓库解决...

hsbxxl
2017/12/24
0
0
Hive配置项的含义详解

hive的配置: hive.ddl.output.format:hive的ddl语句的输出格式,默认是text,纯文本,还有json格式,这个是0.90以后才出的新配置; hive.exec.script.wrapper:hive调用脚本时的包装器,默...

bluz
2016/09/13
157
0
[翻译]Hive wiki GettingStarted

安装和配置 需求 java1.6 hadoop 0.20.x 使用发布包安装Hive 首先从Apache下载镜像下载最新的发布包(见Hive版本)接下来解压缩tar包。这将会创建一个名字为hive-x.y.z的子目录 配置环境变量H...

xiangel
2014/03/19
194
0
hive gateway功能介绍

官网介绍: Because the Hive service does not have worker roles, another mechanism is needed to enable the automatic propagation of client configurations to the other hosts in yo......

爱运动的小乌龟
2018/02/27
552
0
Linux 下 hiveserver2

1、安装配置好hive: http://my.oschina.net/u/574036/blog/734642 2、启动hiveserver2服务 (1)bin/hive --service hiveserver2 (2)连接测试 bin/beeline !connect jdbc:hive2://node01......

驛路梨花醉美
2016/08/25
74
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部