Author : FuRenjie
-----------------------------------------------------------------------
任意用户都能通过set命令修改配置项。
1,新建文件的默认权限
<property>
<name>hive.files.umask.value</name>
<value>0002</value>
</property>
2,开启metastore对HDFS目录权限检查
如检查user是否有权删除某个目录下的文件。
<property>
<name>hive.metastore.authorization.storage.checks</name>
<value>true</value>
</property>
默认值:false
3,开启HQL级别验证
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
默认值:false
4,表创建者对所建表的默认权限
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>ALL</value>
</property>
这个属性指定Hive创建者对自己所创建表的HQL操作权限,默认为NULL,也可用“select,drop”限制其操作权限。
5,特定用户、组、角色的默认权限
<property>
<name>hive.security.authorization.createtable.user.grants</name>
<value>luopeng,xiejie:select;xujiao:drop</value>
</porerty>
组和角色只要替换name中的user为group/role即可。
1,Users
Hive中的user就是系统中的user,
2,Groups
Group即系统中的用户组;
3,Roles
Role则在Hive中控制,role相对group而言比较灵活;
在Hive CLI中操作。
1,user授权(Group授权与此相同)
GRANT CREATE ON DATABASE default TO USERedward;
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.
(以上错误是因为用户没有select权限导致的,下面授予用户select执行权限)
GRANT SELECT on tableauthorization_test_group to group edward;
2,role授权
CREATE ROLEusers_who_can_select_authentication_test_role;
GRANT ROLEusers_who_can_select_authentication_test_role TO USER edward;
GRANT SELECT ON TABLEauthentication_test_role TO ROLE users_who_can_select_authentication_test_role;
(必须先在Hive中创建role,然后将用户添加到相应的role中,再给role授权,虽然上例中的role名很长,但是非常好的表示了role的作用:比Group灵活,与由系统控制的Group相比,role直接由Hive内部进行控制)
3,查看用户授权
SHOW GRANT USER edward ON DATABASE default;
databasedefault
principalNameedward
principalTypeUSER
privilegeCreate
grantTimeMon Mar 19 09:18:10 EDT 2012
grantoredward
(斜体部分为show命令的结果)
4,分区级别授权
Hive授权默认到表级别,设置PARTITION_LEVEL_PRIVILEGE为True,可以授权到分区级别。
CREATE TABLE authorize_part (key INT, valueSTRING) PARTITIONED BY (ds STRING);
ALTER TABLE authorization_part SETTBLPROPERTIES ("PARTITION_LEVEL_PRIVILEGE"="TRUE");
Authorization failed:No privilege'Alter' found for inputs{database:default, table:authorization_part}.
Useshow grant to get more details.
GRANT ALTER ON table authorization_part touser edward;
ALTER TABLE authorization_part ETTBLPROPERTIES ("PARTITION_LEVEL_PRIVILEGE"="TRUE");
GRANT SELECT ON TABLE authorization_part TOUSER edward;
ALTER TABLE authorization_part ADDPARTITION (ds='3');
ALTER TABLE authorization_part ADDPARTITION (ds='4');
SELECT * FROM authorization_part WHEREds='3';
REVOKE SELECT ON TABLE authorization_partpartition (ds='3') FROM USER edward;
SELECT * FROM authorization_part WHEREds='3';
Authorization failed:No privilege'Select' found for inputs
{database:default, table:authorization_part, partitionName:ds=3,columnName:key}.
Useshow grant to get more details.
SELECT * FROM authorization_part WHEREds='4';
OK
Timetaken: 0.146 seconds
(以上事例先创建分区表,然后对alter授权,添加分区3、4,取消分区3的select权限,测试分区3的select报错,斜体部分为命令执行结果)
权限名称 |
含义 |
ALL |
所有权限 |
ALTER |
允许修改元数据(modify metadata data of object)---表信息数据 |
UPDATE |
允许修改物理数据(modify physical data of object)---实际数据 |
CREATE |
允许进行Create操作 |
DROP |
允许进行DROP操作 |
INDEX |
允许建索引(目前还没有实现) |
LOCK |
当出现并发的使用允许用户进行LOCK和UNLOCK操作 |
SELECT |
允许用户进行SELECT操作 |
SHOW_DATABASE |
允许用户查看可用的数据库(本权限尚未测试) |
角色名 |
用户 |
权限 |
可操作数据库/表 |
Bdc |
Hexun大数据部所有成员 |
ALL |
ALL |
Riskctl |
linxianji,yuchunjie(风控部) |
SELECT |
DB:dbank_records/TB: rec_zhejiang_reputation |
|
|
|
|
注:在创建任何一个数据库时,请务必进行角色授权!