hive权限控制:
1.0.X版本的hive对表权限控制基于linux的用户和用户组权限(使用setfacl getfacl)
2.0.x版本的hive可以针对表的create select truncate drop等操作权限进行控制
hive.security.authorization.createtable.owner.grants
ALL
表示用户自己创建的表有所有权限
hive.security.authorization.enabled
true
enable or disable the hive clientauthorization
开启权限验证
hive.metastore.authorization.storage.checks
true
当hive.metastore.authorization.storage.checks属性被设置成true时,
Hive将会阻止没有权限的用户进行表删除操作。
不过这个配置的默认值是false,应该设置成true
hive.files.umask.value
0002
The dfs.umask value for the hive created folders
配置新建文件的默认权限。
set system:user.name;
查看用户对数据库权限:SHOW GRANT USER hduser0508 ON DATABASE default;
查看用户对表的权限:SHOW GRANT USER hduser0508 ON table zq_cust_charge_fee;(默认是all。对应用户自己的表)
(1)当Hive里面用于N多用户和N多张表的时候,管理员给每个用户授权每张表会让他崩溃的。
所以,这个时候就可以进行组(GROUP)授权。
Hive里的用户组的定义等价于POSIX里面的用户组。
授权: GRANT SELECT on table authorization_test_group to group edward;
(2)当给用户组授权变得不够灵活的时候,角色(ROLES)就派上用途了。
用户可以被放在某个角色之中,然后角色可以被授权。
角色不同于用户组,是由Hadoop控制的,它是由Hive内部进行管理的。
hive> CREATE TABLE authentication_test_role (a int , b int);
hive> SELECT * FROM authentication_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 authentication_test_role TO ROLE users_who_can_select_authentication_test_role;
hive> SELECT * FROM authentication_test_role;
OK
常用权限:
ALTER
更改表结构,创建分区
CREATE
创建表
DROP
删除表,或分区
INDEX
创建和删除索引
LOCK
锁定表,保证并发
SELECT
查询表权限
SHOW_DATABASE
查看数据库权限
UPDATE
为表加载本地数据的权限
分区表的授权:默认情况下,分区表的授权将会跟随表的授权
当然,也可以给每一个分区建立一个授权机制,
只需要设置表的属性PARTITION_LEVEL_PRIVILEGE设置成TRUE:
hive> ALTER TABLE authorization_part SET TBLPROPERTIES ("PARTITION_LEVEL_PRIVILEGE"="TRUE");
自动授权
属性hive.security.authorization.createtable.owner.grants决定了
建表者对表拥有的权限,一版情况下,有select和drop
类似的,特定的用户可以被在表创建的时候自动授予其权限。
hive.security.authorization.createtable.user.grants
admin1,edward:select;user1:create