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

### Hive 权限授权方法 Hive 提供了灵活的权限管理功能,允许管理员为特定用户或角色分配对数据库、或其他数据对象的操作权限。以下是关于如何在 Hive 中为设置权限的具体说明: #### 权限分类 Hive权限通常分为以下几类: - **读 (SELECT)**:允许查询中的数据。 - **写 (INSERT/LOAD)**:允许向中插入新数据或将外部文件加载到中。 - **更新 (ALTER/DROP/TRUNCATE)**:允许修改结构或清空内容。 - **删除 (DROP)**:允许删除整个。 这些操作可以通过 `GRANT` 和 `REVOKE` 命令来实现[^1]。 --- #### 使用 GRANT 授权 通过 `GRANT` 命令可以授予用户或角色对指定的某种权限。语法如下: ```sql -- 对用户授予权限 GRANT [privilege_type] ON TABLE [table_name] TO USER [user_name]; -- 对角色授予权限 GRANT [privilege_type] ON TABLE [table_name] TO ROLE [role_name]; ``` 其中 `[privilege_type]` 可以为 `SELECT`, `INSERT`, `UPDATE`, 或其他具体权限类型。 **示例 1**: 将 SELECT 权限授予用户 admin。 ```sql GRANT SELECT ON TABLE my_table TO USER admin; ``` **示例 2**: 将 INSERT 权限授予角色 writer。 ```sql GRANT INSERT ON TABLE my_table TO ROLE writer; ``` --- #### 使用 REVOKE 回收权限 如果需要撤销已授予的权限,则可以使用 `REVOKE` 命令。其语法类似于 `GRANT`,只需替换关键字即可。 ```sql -- 撤销用户权限 REVOKE [privilege_type] ON TABLE [table_name] FROM USER [user_name]; -- 撤销角色的权限 REVOKE [privilege_type] ON TABLE [table_name] FROM ROLE [role_name]; ``` **示例 3**: 撤销用户 admin 的 SELECT 权限。 ```sql REVOKE SELECT ON TABLE my_table FROM USER admin; ``` --- #### 查看权限 为了验证当前的权限配置,或者排查问题,可以使用以下命令查看权限详情。 - **查看用户权限** ```sql SHOW GRANT USER [user_name] ON TABLE [table_name]; ``` - **查看角色权限** ```sql SHOW GRANT ROLE [role_name] ON TABLE [table_name]; ``` **示例 4**: 查看用户 admin 在 my_table 上的权限。 ```sql SHOW GRANT USER admin ON TABLE my_table; ``` --- #### 角色管理(可选) 除了直接为用户授予权限外,还可以创建角色并将其关联到多个用户,从而简化权限管理流程。 - **创建角色** ```sql CREATE ROLE [role_name]; ``` - **将角色绑定到用户** ```sql GRANT ROLE [role_name] TO USER [user_name]; ``` - **赋予角色权限** ```sql GRANT [privilege_type] ON TABLE [table_name] TO ROLE [role_name]; ``` **示例 5**: 创建一个名为 reader 的角色,并为其赋予 SELECT 权限,最后将该角色分配给用户 analyst。 ```sql CREATE ROLE reader; GRANT SELECT ON TABLE sales_data TO ROLE reader; GRANT ROLE reader TO USER analyst; ``` --- ### 总结 以上介绍了如何在 Hive 中为设置权限的方法,包括直接针对用户或角色进行权限管理和查看现有权限的方式。实际应用中可以根据业务需求选择合适的策略,例如利用角色机制统一管理复杂场景下的权限分配[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值