Hive权限介绍

jopen 9年前

一、开启权限 

目前hive支持简单的权限管理,默认情况下是不开启,这样所有的用户都具有相同的权限,同时也是超级管理员,也就对hive中的所有表都有查看和改动的权利,这样是不符合一般数据仓库的安全原则的。Hive可以是基于元数据的权限管理,也可以基于文件存储级别的权限管理,此次以介绍MetaData权限管理为主。通过以下配置开启Hive身份认证功能进行权限检查:    

<property>

  <name>hive.security.authorization.enabled</name>

  <value>true</value>

  <description>enable or disable the hive client authorization</description>

</property>

开启身份认证后,任何用户必须被grant privilege才能对实体进行操作。

有一个表创建者对所创建表的权限配置:

<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,表示创建者对其创建的表拥有所有的权限,这样也是比较合理的,同时也可以通过配置在表创建时给某个role赋予权限:

<property>

  <name>hive.security.authorization.createtable.role.grants</name>

  <value>admin_role:ALL</value>

</property>

当然也可以在创建时对user,group赋予权限

二、权限操作

在hive命令行下可以通过set system:user.name;查看当前hive用户名,也即OS的登录用户。

开启权限认证,在命令行下创建表:

hive>CREATE TABLE auth_test (key int, value string); 

Authorization failed:No privilege 'Create' found for outputs { database:default}.Use show grant to get more details.  

此时会创建失败,默认情况下用户是没有创建表权限的,执行

hive>Grant create on database defaut to user test

后重新创建表则会成功,可以通过 desc extended auth_test查看包括表所有者在内的表详细信息

默认情况下其他的用户也是是没有权限读取auth_test中任何列,以另外一个用户登录os在hive下执行:

hive>Select key from auth_test;

出现以下错误:

Authorization failed:No privilege 'Select' found for inputs { database:default, table:auth_test, columnName:key}. Use show grant to get more details.

执行:

grant select(key) on table auth_test to user test1;

后查询则可以成功

Grant/revoke语法:

grant/revoke priv_type[column_list] on object_type object to/from principal_type principal_name

查看grant 定义:

show grant user user_name on table table_name;

三、Role:

此外Hive还支持基于role的授权认证,role是一组权限的集合,一个role可以被grant给多个用户,所有拥有role的用户都具有与此role相匹配的权限,通过对role权限的管理可以间接控制用户的权限,因此在一个多用户的大型系统中,role无疑更方便于权限管理。

创建/删除角色:

Create/drop Role role_name

角色分配/回收:

Grant role role_name to user user_name

Revoke role role_name from user user_name

角色授权:

Grant/revoke priv_type[col_List] on object_type object from/to role role_name

查看role定义:

show role grant role role_name

四、权限MetaData:

登录hive元数据库,可以发现以下表:

Db_privs:记录了User/Role在DB上的权限

Tbl_privs:记录了User/Role在table上的权限

Tbl_col_privs:记录了User/Role在table column上的权限

Roles:记录了所有创建的role

Role_map:记录了User与Role的对应关系