更新时间:2025-07-14 GMT+08:00

配置Hive单表动态视图的访问控制权限

操作场景

开启了Kerberos认证的MRS Hive可以创建一个视图并控制用户访问权限,支持授权给不同的用户访问,又可以限定不同用户只能访问不同数据。

在视图中,Hive可以通过获取当前客户端提交任务的用户的内置函数“current_user()”来进行过滤,这样被授权的用户,在访问视图时,即可被限定访问对应的数据。

约束与限制

  • 未开启Kerberos认证的集群的“current_user()”函数无法区别客户端提交任务的用户,因此,当前访问控制仅对开启了Kerberos认证的集群的Hive有效。
  • 如果已经在实际业务逻辑中使用了“current_user()”函数,那么,在安全模式(开启了Kerberos认证的集群)与普通模式(未开启Kerberos认证的集群)互转时,需要充分评估可能的风险。

配置Hive视图的访问控制权限

  1. 以Hive客户端安装用户登录安装客户端的节点。
  2. 执行以下命令,切换到客户端安装目录,配置环境变量并认证用户。

    切换至客户端安装目录:

    cd 客户端安装目录

    加载环境变量:

    source bigdata_env

    认证用户:

    kinit Hive业务用户

  3. 执行以下命令登录Hive客户端。

    beeline

  4. 配置Hive视图的访问控制权限示例:

    • 不采用“current_user”函数,要实现不同的用户访问不同数据,需要创建不同的视图:
      • 将视图v1授权给用户hiveuser1,hiveuser1用户可以访问表table1中“type='hiveuser1'”的数据:
        create view v1 as select * from table1 where type='hiveuser1';
      • 将视图v2授权给用户hiveuser2,hiveuser2用户可以访问表table1中“type='hiveuser2'”的数据:
        create view v2 as select * from table1 where type='hiveuser2';
    • 采用“current_user”函数,则只需要创建一个视图:

      将视图v分别赋给用户hiveuser1、hiveuser2,当hiveuser1查询视图v时,“current_user()”被自动转化为hiveuser1,当hiveuser2查询视图v时,“current_user()”被自动转化为hiveuser2:

      create view v as select * from table1 where type=current_user();