内容简介:Hive v0.70增加了和Hadoop安全功能的结合,这意味着,当Hive提交到安全集群的JobTracker上时,将使用合适的认证处理过程。用户权限可以被授予也可以被回收。如果文件和文件夹是多个用户共同拥有,那么文件的权限就变得非常重要。HDFS中文件目录权限和Unix中的模式非常类似,都包含有3层:用户、组和其他。同时具有3种权限:可读、可写和可执行。Hive中有一个配置变量hive.files.umask.value来定义对于新创建的文件设置的默认权限的umask值,也就是掩码字节数。同时,当属性h
和Hadoop安全功能相结合
Hive v0.70增加了和Hadoop安全功能的结合,这意味着,当Hive提交到安全集群的JobTracker上时,将使用合适的认证处理过程。用户权限可以被授予也可以被回收。
使用Hive进行验证
如果文件和文件夹是多个用户共同拥有,那么文件的权限就变得非常重要。HDFS中文件目录权限和Unix中的模式非常类似,都包含有3层:用户、组和其他。同时具有3种权限:可读、可写和可执行。Hive中有一个配置变量hive.files.umask.value来定义对于新创建的文件设置的默认权限的umask值,也就是掩码字节数。
<property> <name>hive.files.umask.value</name> <value>0002</value> </property>
同时,当属性hive.metastore.authorization.storage.checks的值为true时,如果用户没有权限删除表底层的文件,Hive就会阻止用户来删除这样的表。这个参数的默认值是false。其应该设置为true的:
<property> <name>hive.metastore.authorization.storage.checks</name> <value>true</value> </property>
当在安全模式下执行时,Hive元数据存储要尽可能的将hive.metastore.execute.setugi设置为true。
<property> <name>hive.metastore.execute.setugi</name> <value>false</value> </property>
Hive中的权限管理
Hive v0.7.0增加了HiveQL进行授权设置的功能。默认授权模块是不开启的,需要将如下的属性设置为true,才能开启授权:
<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的值是null,这使得用户无法访问自己的表,因此,我们也要给予表创建者对应的权限才能访问自己创建的表。
用户、组和角色
可以对用户(user)、组(group)、或者角色(role)授予权限或者回收权限。
hive> set hive.security.authorization.enabled=true; hive> create table authorization_test(key int, value string); --->会报权限错误
我们使用的用户没有在default数据库下创建表的权限。我们可以对多个实体进行授权。第一个实体就是用户(user),Hive中的用户就是用户的系统用户名。我们可以确定其名称,并按照如下语句将在default数据库下的创建表(create)权限授予这个用户:
hive> set system:user.name; 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 18 17:37:00 EDT 2019 grantor edward
可以基于组级别授权,Hive中组和用户的住POSIX组是等价的。
hive> create table authorization_test_group(a int, b int); hive> select * from authorization_test_group; ----> 权限异常 hive> grant select on table authorization_test_group to group edward; hive> select * from authorization_test_group;
也可以使用角色(role)。用户可以放置在角色中同时可以为角色进行授权。角色关系灵活,因为和组不一样,组由系统外部控制,角色是由Hive内部控制:
hive> create table authorization_test_role(a int, b int); hive> select * from authorization_test_role; ----> 权限异常 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 authorization_test_role to role users_who_can_select_authentication_test_role; hive> select * from authorization_test_role;
Grant和Revoke权限
权限 描述 ALL 赋予所有的权限 ALTER 有修改表结构的权限 CREATE 有创建表的权限 DROP 有删除表或表中的分区权限 INDEX 创建表索引的权限 LOCK 开启并发后,锁定和解锁定表的权限 SELECT 查询表或者分区中数据的权限 SHOW DATABASE 查看所有数据库的权限 UPDATE 向表或者分区中插入或加载数据的权限
以create权限为例:
hive> set hive.security.authorization.enabled=true; hive> create database edsstuff; hive> use edsstuff; hive> create table a (id int); --->权限异常 hive> grant create on database edsstuff to user edward; hive> create table a (id int); hive> create external table a (id int);
同样,我们可以通过如下命名授予ALTER权限:
hive> alter table a replace columns(a int, b int); --->权限异常 hive> grant alter on table a to user edward; hive> alter table a replace columns(a int, b int);
注意:为分区表新增分区的操作是不需要alter权限的:
hive> alter table a_part_table add partition(b=5);
往表中加载数据的话需要使用UPDATE权限:
hive> load data inpath '${env:HIVE_HOME}/NOTICE' into table a_part_table partition(b=5); ---> 权限异常
hive> grant update on table a_part_table to user edward;
hive> load data inpath '${env:HIVE_HOME}/NOTICE' into table a_part_table partition(b=5);
删除表或者分区需要drop权限:
hive> alter table a_part_table drop partition(b=5); --->权限异常
从表或者分区中查询数据需要select权限
hive> select id from a_part_table; --->权限异常 hive> grant select on table a_part_table to user edward; hive> select id from a_part_table;
授予全部的权限:
hive> grant all on table a_part_table to user edward;
分区级别的权限
Hive中分区表非常常见。默认是在表级别授予权限,不过,同样可以在分区级别进行授权。为达到这个目标,只需要将表属性PARTITION_LEVEL_PRIVILEGE设置为TRUE即可:
hive> create table authorize_part(key int, value string) partitioned by (ds string);
hive> alter table authorize_part set tblproperties("PARTITION_LEVEL_PRIVILEGE"="TRUE"); --->权限异常
hive> grant alter on table authorize_part to user edward;
hive> alter table authorize_part set tblproperties("PARTITION_LEVEL_PRIVILEGE"="TRUE");
hive> grant select on table authorize_part to user edward;
hive> alter table authorize_part add partition(ds='3');
hive> alter table authorize_part add partition(ds='4');
hive> select * from authorize_part where ds = '3';
hive> revoke select on table authorize_part partition(ds='3') from user edward;
hive> select * from authorize_part where ds = '3'; --->权限异常
hive> select * from authorize_part where ds = '4';
自动授权
用户经常会期望创建表后不再执行烦人的授权命令,就可以具有相关的权限,而直接去执行后续的查询等等。早期,用户可能需要具有ALL权限才可以,不过现在为默认情况制定更细节的权限。
属性hive.security.authorization.createtable.owner.grants中可以定义为创建表的用户自动授予这张表的指定的权限。比如下面的例子为用户自动授予对其所创建表的表的select和drop权限:
<property> <name>hive.security.authorization.createtable.owner.grants</name> <value>select, drop</value> </property>
类似的,可以在创建表时自动授予指定用户指定的权限。属性hive.security.authorization.createtable.user.grants控制这个行为。
比如下面的例子展示了Hive管理员账号admin1和用户edward默认授予所有表的读权限,而user1只有创建表的权限。
<property> <name>hive.security.authorization.createtable.user.grants</name> <value>admin,edward:select;user1:create</value> <property>
对于组(group)和角色(role)同样具有类似的属性来控制自动授予的权限。对于组,该属性名为hive.security.authorization.createtable.group.grants;对于角色,这个属性是hive.security.authorization.createtable.role.grants。这些属性的值的形式和前面介绍的是相同的。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Is Parallel Programming Hard, And, If So, What Can You Do About
Paul E. McKenney
The purpose of this book is to help you understand how to program shared-memory parallel machines without risking your sanity.1 By describing the algorithms and designs that have worked well in the pa......一起来看看 《Is Parallel Programming Hard, And, If So, What Can You Do About 》 这本书的介绍吧!