本文介绍了 Hive 如何开启 Ranger 权限控制,以及详细的 Ranger Hive 权限配置示例进行说明。

前提条件

已创建 DataLake 集群,并选择了 Ranger 服务,创建集群详情请参见 创建集群

注意事项

Hive开启Ranger权限控制后,HiveServer2服务会加载Ranger Hive plugin,仅在您通过HiveServer2提交SQL作业时需要进行权限校验,其他方式访问Hive将不会触发权限校验。
  • 支持权限校验的访问方式
    • 通过 Beeline 客户端访问 HiveServer2。
    • 通过 JDBC URL 连接 HiveServer2。
  • 不支持权限校验的访问方式
    • 通过 Hive 客户端直接连接 Metastore。
    • 通过 Hive-Client API 直接连接 Metastore。

配置方法

  1. 进入集群服务页面。
    1. 登录 EMR on ECS 控制台
    2. 顶部菜单栏处,根据实际情况选择地域和资源组。
    3. 集群管理 页面,单击目标集群操作列的 集群服务
  2. Ranger 启用 Hive。
    1. 集群服务 页面,单击 Ranger-plugin 服务区域的 状态
    2. 服务概述 区域,打开 enableHive 开关。
    3. 在弹出的对话框中,单击 确定
  3. 重启 HiveServer。
    1. 集群服务 页面,选择 more > Hive
    2. 组件列表 区域,单击 HiveServer 操作列的 重启
    3. 在弹出的对话框中,输入 执行原因 ,单击 确定
    4. 确认 对话框中,单击 确定

权限配置

基础介绍

Ranger 权限配置需要在 Ranger UI 页面完成,进入 Ranger UI 页面,详情请参见 Ranger 概述

Ranger Hive权限需要单击HADOOP SQL下的 emr-hive 进行配置,如下图所示。 hive power

进入 emr-hive 后,您能看到所有配置的权限列表,Ranger 会默认添加一些权限 Policy,例如默认 Policy 配置 hive 用户作为 HiveServer 服务的启动用户拥有所有 Database、Table、Column、UDF URL 等资源的访问权限、所有用户都有 Database Create 权限和在 default Database 下所有用户都有 Create 权限。

添加权限 Policy

单击右上角的Add New Policy按钮能添加权限Policy。权限Policy需要在Policy Name中配置名称,并且所有Policy的名称不能重复。基础的权限配置需要填写Resource、User和Permission三个要素,Resource表示权限Policy管理的资源,例如Database、Table、Column、URL等,User表示权限Policy指定权限的用户、Permission表示权限Policy所管理的权限类型。
  • Policy Resource

    Ranger Hive 中,Policy Resource 主要包括 database table column url udf ,表示对所填资源进行权限配置。默认情况下 Policy 中展示的是 database table column ,您可以单击对应资源名称进行切换。

    配置权限 Policy 时,需要在 Resource 输入框 中输入对应资源的名称,例如 database 填写 testdb table 填写 test column 填写 id url 填写 oss://test-bucket/test/tmp 等。您也可以在输入框中输入星号 * ,表示所有的对应资源,如下所示。 *
  • Policy User
    权限 Policy 需要配置 User 信息,可以在 Select User 列表中选择需要配置权限的用户,如下所示。 User
  • Policy Permission
    单击 Add Permissions ,显示 add/edit permissions ,根据需要选中对应的 permission ,如下所示。 permission

示例一:列权限配置

Ranger权限控制中最常用的一种情况是配置指定用户赋予表的Select权限,确保对应用户能够执行 select columns from table 操作。权限配置如下图所示: exmple

Policy 表示 test 用户具有 database = testdb table = test column = id select 权限,拥有权限执行 select id from testdb.test 。如果您希望配置某个用户能够 select testdb.test 的所有列,可以将 column 配置为 * 即可。

示例二:表权限配置

Ranger Hive中表的创建权限可以配置到表级别,例如配置 database = testdb table = test column = * Create 权限时,用户仅具有 test 这张表的创建权限,不能创建其他表。如果您希望配置用户能在Database下自由创建所有表,需要配置 database = testdb , table = * column = * Create 权限,配置如下所示。 Setting

示例三:URL 权限配置

当您执行的 Hive SQL 语句中包含 Location 信息,且 Location Scheme oss 时,会检查 Location Write、Read 权限。例如 create external table test(id int, name string) location 'oss://test-bucket/test' ,会检查 oss://test-bucket/test Write 权限。

此时,需要配置对URL的权限Policy,Resource切换为URL请参见上面添加权限Policy部分的内容,具体配置如下图。 setting

如果您不需要控制 URL 的权限,也可以在默认权限 Policy Name 中修改 all - url Policy,在 Select Group 中添加 public ,即表示所有用户都具有所有 URL 的读写权限,具体步骤如下图所示。

说明 public在Ranger中是一个特殊的group,表示所有用户,当Policy配置 Select Group public 时,表示所有用户都对这条权限Policy生效。
public