Hive的Security配置

简介:

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

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

 

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

Xml代码  复制代码  收藏代码
  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

 

Xml代码  复制代码  收藏代码
  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

Xml代码  复制代码  收藏代码
  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>

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

Xml代码  复制代码  收藏代码
  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,让用户能够访问自己创建的表。

 

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

Shell代码  复制代码  收藏代码
  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)

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

Shell代码  复制代码  收藏代码
  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命令确认我们拥有的权限:

Shell代码  复制代码  收藏代码
  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里面的用户组。

Shell代码  复制代码  收藏代码
  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内部进行管理的。

Shell代码  复制代码  收藏代码
  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:

Shell代码  复制代码  收藏代码
  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

Xml代码  复制代码  收藏代码
  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>

 

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

Xml代码  复制代码  收藏代码
  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



本文转自茄子_2008博客园博客,原文链接:http://www.cnblogs.com/xd502djj/p/4671512.html,如需转载请自行联系原作者。


 

目录
相关文章
|
6月前
|
SQL 数据库 HIVE
记录hive数据库远程访问配置问题
记录hive数据库远程访问配置问题
155 0
|
SQL 安全 Java
一篇文章彻底理解 HIVE 常见的三种 AUTHENTICATION 认证机制的配置与使用
一篇文章彻底理解 HIVE 常见的三种 AUTHENTICATION 认证机制的配置与使用
|
1月前
|
SQL 存储 分布式计算
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
44 3
|
1月前
|
SQL 存储 数据管理
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
60 2
|
6月前
|
SQL 存储 分布式计算
Hive详解、配置、数据结构、Hive CLI
Hive详解、配置、数据结构、Hive CLI
121 0
Hive详解、配置、数据结构、Hive CLI
|
6月前
|
SQL 分布式计算 资源调度
一文看懂 Hive 优化大全(参数配置、语法优化)
以下是对提供的内容的摘要,总长度为240个字符: 在Hadoop集群中,服务器环境包括3台机器,分别运行不同的服务,如NodeManager、DataNode、NameNode等。集群组件版本包括jdk 1.8、mysql 5.7、hadoop 3.1.3和hive 3.1.2。文章讨论了YARN的配置优化,如`yarn.nodemanager.resource.memory-mb`、`yarn.nodemanager.vmem-check-enabled`和`hive.map.aggr`等参数,以及Map-Side聚合优化、Map Join和Bucket Map Join。
339 0
|
6月前
|
SQL HIVE
Hive【基础知识 04】【Hive 属性配置的三种方式及配置的优先级说明】
【4月更文挑战第7天】Hive【基础知识 04】【Hive 属性配置的三种方式及配置的优先级说明】
115 0
|
SQL 分布式计算 Hadoop
Hive on Tez 的安装配置
Hive on Tez 的安装配置
571 0
Hive on Tez 的安装配置
|
6月前
|
SQL Java Shell
Hive【非交互式使用、三种参数配置方式】
Hive【非交互式使用、三种参数配置方式】
|
SQL 分布式计算 Hadoop
配置Hive使用Spark执行引擎
在Hive中,可以通过配置来指定使用不同的执行引擎。Hive执行引擎包括:默认MR、tez、spark。
277 0