Hive的Security配置
2015-07-23 19:45
337 查看
为了更好地使用好Hive,我将《Programming Hive》的Security章节取出来,翻译了一下。
Hive还是支持相当多的权限管理功能,满足一般数据仓库的使用。
Hive由一个默认的设置来配置新建文件的默认权限。
Xml代码
<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代码
<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代码
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
<description>Enable or disable the hive client authorization</description>
</property>
另外还有一个是表格创建者用于的权限配置项:
Xml代码
<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代码
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代码
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代码
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代码
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代码
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
介绍一下常用的授权关键字:
分区表级别的授权
默认情况下,分区表的授权将会跟随表的授权
当然,也可以给每一个分区建立一个授权机制,
只需要设置表的属性PARTITION_LEVEL_PRIVILEGE设置成TRUE:
Shell代码
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代码
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>select,drop</value>
</property>
类似的,特定的用户可以被在表创建的时候自动授予其权限。
Xml代码
<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
转自 /article/4039304.html
Hive还是支持相当多的权限管理功能,满足一般数据仓库的使用。
Hive由一个默认的设置来配置新建文件的默认权限。
Xml代码
<property>
<name>hive.files.umask.value</name>
<value>0002</value>
<description>The dfs.umask value for the hive created folders</description>
</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代码
<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>
<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代码
<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.enabled</name> <value>true</value> <description>Enable or disable the hive client authorization</description> </property>
另外还有一个是表格创建者用于的权限配置项:
Xml代码
<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>
<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代码
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.
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代码
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);
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代码
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> 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代码
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
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代码
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
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代码
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> 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代码
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>select,drop</value>
</property>
<property> <name>hive.security.authorization.createtable.owner.grants</name> <value>select,drop</value> </property>
类似的,特定的用户可以被在表创建的时候自动授予其权限。
Xml代码
<property>
<name>hive.security.authorization.createtable.user.grants</name>
<value>admin1,edward:select;user1:create</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
转自 /article/4039304.html
相关文章推荐
- 创建层级目录命令mkdir -p
- leetcode 055 —— Jump Game
- PAT (Advanced Level) 1030. Travel Plan (30) Dijkstra最短路径
- 提取图像的边界,用数字标记不同的目标边界
- HDU 1224 SPFA算法算有向图的最长路径
- Dialog
- HDOJ 1019 Least Common Multiple(最小公倍最大公约)
- Keepalived+Mysql(2主2从架构)
- Linux下的一些问题收集及解决方法(二)
- Linux下的一些问题收集及解决方法(二)
- 8数码问题-搜索-双向BFS/A*算法
- !codeforces 558C Amr and Chemistry-yy题-(位运算相关)
- java学习笔记-------通过实例来学习事件
- Android 关于使用LruCache缓存你想缓存的数据
- 当 PHP 遇到 PDF
- 密码
- leetcode第6题—zigZag
- java中多态的简单学习与实践
- 位段
- redis事务