Hive多用户权限

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:允许用户查看可用的数据库

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值