本文介紹了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