HIVE多用户权限
当多个用户共同使用hive时,需要对不同角色做不同的权限控制。
权限控制主要指底层的hdfs文件操作控制和hive自身对表的授权管理。hive是通过mysql的元数据来控制hive里的权限。
Hive授权的核心是:user,group,role。
User:是基于linux用户的user,哪个linux用户使用hive客户端,那个linux用户就是该hive的user。
Group:同样是linux层面上的用户组。
Role:只有角色是在hive里面自己创建的,可以给角色添加权限,再把角色赋予给user,这样该用户就拥有了该角色的权限。
1.1,hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.8.101:3306/hive?useSSL=false</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
如果以上已经配置完成 可省略
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<!--开启hive权限认证机制-->
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
<description>enableor disable the hive clientauthorization</description>
</property>
<!--设置用户对自己创建的表拥有所有权限-->
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>ALL</value>
<description>theprivileges automatically granted to the ownerwhenever
a table gets created. Anexample like "select,drop" willgrant select
and drop privilege to theowner of the table</description>
</property>
<!--报错The current builtin authorization in Hive is incompleteand disabled的错误提示时,加配上下面的参数-->
<property>
<name>hive.security.authorization.task.factory</name>
<value>org.apache.hadoop.hive.ql.parse.authorization.HiveAuthorizationTaskFactoryImpl</value>
</property>
到此表示已经配置完多用户权限,但是建库报错
create database joseph;
发现报错:
Authorization failed:No privilege ‘Create’ found for outputs { }. Use SHOW GRANT to get more details
问题排查过程:
1、在一个已经存在数据库下,比如test,给用户root,授全部权限:
grant all on database test to user root;
然后执行创建表语句,是成功的,但是新建库就不行。
2、那是因为需要一个超级管理员赋权给用户
<!--超级管理员,必须配置-->
<property>
<name>hive.users.in.admin.role</name>
<value>hdfs</value>
<description>新建一个hdfs用户,进入hive,然后给root用户赋所有权,我用root用户进入hive,无法给自己赋权</description>
</property>
注意:
切换到hdfs,进入Hive命令行,执行:
grant all to user root;
给账号root授权全部权限
再建库:create database joseph;
ok
创建角色:create role role_name
显示所有的角色:Show roles
删除角色:drop role role_name
赋权给角色:
<!--赋予role_name拥有在database_name创建的权限-->
grant create on database database_name to role role_name
<!--赋予role_name拥有table_name查询的权限-->
grant select on [table] table_name to role role_name
回收某个角色的某个权限:
revoke create on database database_name from role role_name
revoke select on [table] table_name from role role_name
查看某个角色在某张表或某个数据库的权限:
show grant role role_name on database database_name
show grant role role_name on [table] table_name
将角色赋予给用户:grant role role_name to user user_name
查看某用户的所有角色:show role grant user user_name
权限属性:
ALL:所有权限
ALTER:允许修改元数据(modify metadatadata of object)---表信息数据
UPDATE:允许修改物理数据(modify physicaldata of object)---实际数据
CREATE:允许进行Create操作
DROP:允许进行DROP操作
LOCK:当出现并发的使用允许用户进行LOCK和UNLOCK操作
SELECT:允许用户进行SELECT操作:
SHOW_DATABASE:允许用户查看可用的数据库