更新时间:2024-11-29 GMT+08:00

Hive表支持级联授权功能

操作场景

开启级联授权功能的集群极大地提升了鉴权易用性,用户只需在Ranger页面上对业务表进行一次授权,系统就会自动细粒度关联数据存储源的权限,不需要感知表的存储路径,无需进行二次授权。同时也补齐了基于存算分离授权功能缺陷,可以在Ranger上实现对存算分离表的授权鉴权。Hive表的级联授权功能主要体现为:

  • 开启Ranger级联授权后,Ranger中创建策略对表授权时,只需创建表的Hive策略,无需对表存储源进行二次授权。
  • 针对已授权的库/表,当存储源发生变动时,周期同步关联新存储源HDFS/OBS,生成对应权限。
  • 不支持对视图表进行级联授权。
  • 仅支持对数据库/表进行级联授权操作,不支持对分区做级联权限,如果分区路径不在表路径下,则需要用户手动授权分区路径。
  • 不支持对Hive Ranger策略中的“Deny Conditions”进行级联授权,即“Deny Conditions”的权限仅限制表权限,不能生成HDFS/OBS存储源端的权限。
  • 不支持在Hive Ranger中创建“database”为“*”且“table”为“*”的策略。
  • 级联授权生成的HDFS/OBS存储源端的权限弱于HDFS Ranger策略的权限,即如果已经对表的HDFS存储源设置了HDFS Ranger权限,则级联权限将不会生效。
  • 不支持对存储源为OBS的表级联授权后直接进行alter操作,需要给对应用户组额外授予OBS表路径的父目录的“Read”和“Write”权限才能使用alter功能,且用户组仅由数字0~9、字母a~Z、下划线或#组成,且最大长度为52个字符,否则将导致策略添加失败。
  • 针对OBS存储源,需满足以下条件,否则OBS表将授权失败:
    • 集群中必须已安装Guardian服务。
    • OBS表的授权只能针对用户组。
    • 仅支持安全模式集群的OBS级联授权。

开启级联授权功能

  1. 登录FusionInsight Manager页面,选择“集群 > 服务 > Ranger > 配置”。
  2. 在搜索框中搜索参数“ranger.ext.authorization.cascade.enable”,修改该参数值为“true”。
  3. 单击“保存”,保存配置。
  4. 配置保存成功后,单击“实例”,勾选所有RangerAdmin实例,选择“更多 > 重启实例”,在弹出对话框输入密码,单击“确定”,重启所有RangerAdmin实例。

对接HDFS存储源

HDFS存储源无需进行配置。

对接OBS存储源

  • 建表时指定Location为OBS路径:
    1. 已完成存算分离配置。
    2. 使用Ranger管理员用户rangeradmin登录Ranger管理页面,在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”,单击“Add New Policy”,为对应用户的用户组赋予OBS存储路径的“Read”和“Write”的权限,详细操作请参见添加OBS的Ranger访问权限策略

      例如,为“hgroup1”用户组赋予“obs://obs-test/test/”目录的“Read”和“Write”的权限:

    3. 在首页中单击“HADOOP SQL”区域的组件插件名称“Hive”。在“Access”页签单击“Add New Policy”为对应用户的用户组添加赋予OBS存储路径的“Read”和“Write”权限的URL策略,详细操作请参见添加Hive的Ranger访问权限策略

      例如,为“hgroup1”用户组创建“hive_url_policy”URL策略赋予“obs://obs-test/test/”目录的“Read”和“Write”的权限:

    4. 进入beeline客户端,在创建表时指定Location为OBS文件系统路径。

      cd 客户端安装目录

      kinit 组件操作用户

      beeline

      例如,创建一个表“test”,该表的Location为“obs://obs-test/test/数据库名/表名”:

      create table test(name string) location "obs://obs-test/test/数据库名/表名";

  • 配置Hive基于MetaStore方式对接OBS:
    1. 已配置Guardian服务对接OBS。
    2. 登录FusionInsight Manager,选择“集群 > 服务 > Hive > 配置”。
    3. 在搜索框搜索“hive.metastore.warehouse.dir”,修改参数值为OBS路径,例如:obs://hivetest/user/hive/warehouse/,其中“hivetest”为OBS文件系统名。
      图1 hive.metastore.warehouse.dir配置
    4. 保存配置,然后单击“集群 > 服务”,在服务列表中重启Hive服务。
    5. 更新客户端配置文件。
      1. 登录Hive客户端所在的节点,执行以下命令修改Hive客户端配置文件目录下的“hivemetastore-site.xml”。

        vi 客户端安装目录/Hive/config/hivemetastore-site.xml

      2. 将“hive.metastore.warehouse.dir”的值修改为对应的OBS路径,例如“obs://hivetest/user/hive/warehouse/”。

      3. 修改HCatalog客户端配置文件目录下的“hivemetastore-site.xml”,将“hive.metastore.warehouse.dir”的值修改为对应的OBS路径,例如“obs://hivetest/user/hive/warehouse/”。

        vi 客户端安装目录/Hive/HCatalog/conf/hivemetastore-site.xml

      4. 使用Ranger管理员用户rangeradmin登录Ranger管理页面,在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”,单击“Add New Policy”,为对应用户的用户组赋予OBS存储路径的“Read”和“Write”的权限。

        例如,为“hgroup1”用户组赋予“obs://hivetest/user/hive/warehouse/”目录的“Read”和“Write”的权限:

      5. 选择“Settings > Roles > Add New Role”,创建“Role Name”为“hive”的角色:

    6. 进入Hive Beeline命令行,创建一个表并确认Location为OBS路径。

      cd 客户端安装目录

      kinit 组件操作用户

      beeline

      create table test(name string);

      desc formatted test;

      如果当前数据库Location已指向HDFS,那么在当前数据库下建表(不指定Location)默认也指向当前HDFS。如需修改默认建表策略可以修改数据库的Location重新指向OBS。

      操作如下:

      1. 执行以下命令查看数据库Location。

        show create database obs_test;

      2. 执行以下命令修改数据库Location。

        alter database obs_test set location 'obs://test1/'

        执行命令show create database obs_test,查看数据库Location已经指向OBS。

      3. 执行以下命令修改表的Location。

        alter table user_info set location 'obs://test1/'

        如果表已有业务数据,需要同步迁移原数据文件至修改后的Location地址。