本文介绍了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主要包括databasetablecolumnurludf,表示对所填资源进行权限配置。默认情况下Policy中展示的是databasetablecolumn,您可以单击对应资源名称进行切换。

    配置权限Policy时,需要在Resource输入框中输入对应资源的名称,例如database填写testdbtable填写testcolumn填写idurl填写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=testdbtable=testcolumn=idselect权限,拥有权限执行select id from testdb.test。如果您希望配置某个用户能够select testdb.test的所有列,可以将column配置为*即可。

示例二:表权限配置

Ranger Hive中表的创建权限可以配置到表级别,例如配置database=testdbtable=testcolumn=*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 Grouppublic时,表示所有用户都对这条权限Policy生效。
public