配置Hive开启Ranger权限控制

更新时间:
复制 MD 格式

本文介绍了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 ranger开关。

    3. 在弹出的对话框中,单击确定。

  3. 重启HiveServer。

    1. 在集群服务页面,选择more > Hive。

    2. 在组件列表区域,单击HiveServer操作列的重启。

    3. 在弹出的对话框中,输入执行原因,单击确定。

    4. 在确认对话框中,单击确定。

权限配置

基础介绍

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

Ranger Hive权限需要单击HADOOP SQL下的emr-hive进行配置。进入 Ranger Service Manager 页面后,在 HADOOP SQL 类别下可找到已创建的 emr-hive 服务实例,可对其执行查看、编辑或删除操作。

进入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时,需要输入对应资源的名称,例如database填写testdb、table填写test、column填写id和url填写oss://test-bucket/test/tmp等。您也可以在输入框中输入星号*,表示所有的对应资源。每个资源配置行包含资源类型下拉框(如 column)、值输入框(必填)以及 Include 开关,用于设置包含或排除模式。

  • Policy User

    权限Policy需要配置User信息,可以在Select User列表中选择需要配置权限的用户(例如 test)。

  • Policy Permission

    单击Add Permissions,显示add/edit permissions弹窗,根据需要选中对应的permission(例如 Select 和 Create),然后单击确认按钮完成权限添加。

示例一:列权限配置

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

该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权限。

在 Apache Ranger 中创建访问策略,关键配置如下:

  • Policy Name:create-permission-example

  • Policy Type:Access

  • database:testdb(Include 开启)

  • table:*(Include 开启)

  • column:*(Include 开启)

  • Audit Logging:Yes

在 Allow Conditions 中,Select User 选择 test,Permissions 选择 Create。

示例三: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的Read权限。

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

  • Policy Name:url-permission-example

  • 资源类型选择 url,值为 oss://test-bucket/test,开启 Recursive

  • Allow Conditions:用户为 test,权限为 Read

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

说明

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