本文介紹了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。
-
Ranger 許可權控制僅針對 Hive 中繼資料及 SQL 操作層面生效,不支援對 OSS 或 OSS-HDFS 儲存層進行許可權控制。如需對儲存層資源進行存取控制,請通過儲存服務自身的許可權機制(如 OSS Bucket Policy 或 RAM 策略)實現。
配置方法
-
進入叢集服務頁面。
-
頂部功能表列處,根據實際情況選擇地區和資源群組。
-
在單擊目的地組群操作列的集群服务。
-
Ranger啟用Hive。
-
在集群服务頁面,單擊Ranger-plugin服務地區的状态。
-
在服务概述地區,開啟enableHive開關。
-
在彈出的對話方塊中,單擊确定。
-
-
重啟HiveServer。
-
在集群服务頁面,選擇。
-
在组件列表地區,單擊HiveServer操作列的重启。
-
在彈出的對話方塊中,輸入执行原因,單擊确定。
-
在确认對話方塊中,單擊确定。
-
許可權配置
基礎介紹
Ranger許可權配置需要在Ranger UI頁面完成,進入Ranger UI頁面,詳情請參見Ranger概述。
Ranger Hive許可權需要單擊HADOOP SQL下的emr-hive進行配置,如下圖所示。
進入emr-hive後,您能看到所有配置的許可權列表,Ranger會預設添加一些許可權Policy,例如預設Policy配置hive使用者作為HiveServer服務的啟動使用者擁有所有Database、Table、Column、UDF和URL等資源的存取權限、所有使用者都有Database的Create許可權和在default Database下所有使用者都有Create許可權。
如果 Ranger UI 頁面中未顯示 emr-hive 服務入口,需要在 EMR 控制台的集群服务頁面,單擊 Ranger-plugin 服務地區的状态進入服務配置頁,搜尋 enableImpala 參數並將其設定為 true,儲存配置後重新整理 Ranger UI 頁面即可正常顯示 emr-hive 服務。
添加許可權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等。您也可以在輸入框中輸入星號*,表示所有的對應資源,如下所示。

-
Policy User
許可權Policy需要配置User資訊,可以在Select User列表中選擇需要配置許可權的使用者,如下所示。

-
Policy Permission
單擊Add Permissions,顯示add/edit permissions,根據需要選中對應的permission,如下所示。

樣本一:列許可權配置
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許可權,配置如下所示。
樣本三: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部分的內容,具體配置如下圖。
如果您不需要控制URL的許可權,也可以在預設許可權Policy Name中修改all - url的Policy,在Select Group中添加public,即表示所有使用者都具有所有URL的讀寫權限,具體步驟如下圖所示。
public在Ranger中是一個特殊的group,表示所有使用者,當Policy配置Select Group為public時,表示所有使用者都對這條許可權Policy生效。

常見問題
如何為唯讀帳號配置 Ranger Hive 許可權?
可以在 Ranger UI 中為唯讀帳號建立僅含 Select 許可權的 Policy,操作步驟如下:
-
在 Ranger UI 頁面,單擊 HADOOP SQL 下的 emr-hive 進入許可權配置。
-
單擊右上方的 Add New Policy。
-
在 Policy Name 中填寫策略名稱稱。
-
在 Resource 地區配置目標資源:database 填寫目標資料庫名稱(支援萬用字元 * 表示所有資料庫),table 填寫目標表名稱(支援萬用字元 *),column 填寫 *。
-
在 Select User 中選擇唯讀帳號。
-
單擊 Add Permissions,僅勾選 select 許可權。
-
單擊 Add 儲存策略。
如果不確定唯讀帳號的具體名稱,可以在 Select User 下拉框中查看所有可選使用者,或通過 Ranger 的 Audit 頁面查詢歷史串連帳號以確保覆蓋。
EMR 4.9.0 版本是否支援使用 Ranger 控制 Impala 許可權?
EMR 4.9.0 版本不支援通過 Ranger 控制 Impala 許可權。如需通過 Ranger 控制 Impala 許可權,建議升級至更高版本的 EMR 叢集,或使用其他許可權管理方案。
> Hive