本文結合具體業務情境,為您介紹如何使用DLF+EMR兩個產品實現資料湖上統一許可權的最佳實務。
背景說明
中繼資料和資料許可權是DLF產品提供的資料湖構建所需的基礎能力、資料湖上引擎及產品。通過DLF提供的統一中繼資料視圖訪問湖上資料,解決湖上資料面臨的中繼資料一致性及資料難以共用的問題,同時各引擎也可通過整合DLF統一許可權服務獲得企業級的許可權管理能力。
相關概念說明
EMR:阿里雲 E-MapReduce產品,詳見什麼是E-MapReduce。
DLF Catalog:DLF資料目錄(DLF),DLF中繼資料體系的最上層實體,可以包括資料庫,資料表等中繼資料資訊。詳見資料目錄。
DLF 資料許可權:DLF所提供的資料湖的資料許可權體系,支援設定資料庫、資料表、資料列、函數四種維度細粒度許可權控制。詳見資料許可權概述。
業務情境說明
某公司有一個EMR叢集,期望Hive、Spark、Presto、Impala引擎可以通過統一的資料許可權,控制實際業務中不同使用者使用資料的許可權,主要分為以下幾種情況:
超級管理員
擁有資料湖上資料的所有許可權,以及分配許可權給其他人員的能力。
業務A資料管理員
擁有業務A相關的db_a的所有資料使用和存取權限,以及分配該資料庫許可權給其他人員的能力。
業務A資料開發人員
擁有業務A相關的db_a中所有資料使用和存取權限。
業務A資料分析人員
擁有業務A相關的db_a中部分表的部分列的存取權限,如對table1中col1,cole2的存取權限。
操作步驟
建立EMR叢集,並使用DLF作為中繼資料。
建立E-MapReduce叢集,輸入選項如下:
業務情境:選擇資料湖。
可選服務:需要至少選中Hive和DLF-Auth組件,其他組件根據業務需要選擇。
中繼資料:選擇DLF 統一中繼資料。
DLF資料目錄:選擇預設的DLF Catalog,或者建立一個資料目錄(Catalog)。此處示範使用catalog_test為例。
繼續其他配置完成EMR叢集建立。
說明如果您已經有E-MapReduce叢集,但未安裝DLF-Auth組件,可以通過EMR叢集中添加服務的方式,添加DLF-Auth組件後,再使用DLF資料許可權。
如果您已經有E-MapReduce叢集,但Hive中繼資料未使用DLF,可以通過中繼資料遷移後再使用DLF 資料許可權。也可通過DingTalk群聯絡我們:33719678。
初始化相關資料庫和資料表。
登入EMR叢集,可參考登入叢集。
通過Beeline串連Hive SQL。
beeline -u jdbc:hive2://<主節點的節點名稱>:10000
執行以下語句初始化資料,建立測試資料。
--建立資料庫和表 create database db_a; create table db_a.table1( col1 string, col2 string, col3 string ); create table db_a.table2( col1 string, col2 string, col3 string ); create database db_b; create table db_b.table1( col1 string, col2 string, col3 string ); --初始化測試資料 --db_a.table1 insert overwrite table db_a.table1 values('1','aliyun','emrA1'),('2','aliyun','dlfA1'); --db_a.table2 insert overwrite table db_a.table2 values('1','aliyun','emrA2'),('2','aliyun','dlfA2'); --db_b.table1 insert overwrite table db_b.table1 values('1','aliyun','emrB1'),('2','aliyun','dlfB1');
初始化各角色登入所需的RAM使用者。
超級管理員,建立RAM使用者:dlf_data_admin。
業務A資料管理員,建立RAM使用者:dlf_dba_admin。
業務A資料開發人員,建立RAM使用者:dlf_dba_dev。
業務A資料分析人員,建立RAM使用者:dlf_dba_analyst。
開啟資料許可權控制。
需要完成以下兩步,才可以正式開啟EMR叢集的資料許可權控制:
設定超級管理員的許可權,使其具備DLF控制台授權許可權,以及所有資料的存取權限。
開啟資料湖構建控制台。
在左側功能表列,選擇
。在admin角色中,添加使用者dlf_data_admin,此時dlf_data_admin就會具備dlf管理所有資料許可權的管理員。可以為任意使用者配置相關資料許可權。
如果需要dlf_data_admin可以為在DLF控制台為RAM使用者配置資料許可權,還需要在RAM控制台中,為dlf_data_admin添加權限原則:AliyunDLFFullAccess,AliyunRAMReadOnlyAccess。
登入EMR叢集,使用dlf_data_admin串連Hive,執行HiveSQL。
beeline -u jdbc:hive2://<主節點的節點名稱>:10000 -n dlf_data_admin
select * from db_a.table1; select * from db_b.table1;
上述SQL查詢成功,該使用者dlf_data_admin同時具備了所有資料庫,資料表的存取權限。
設定業務A資料管理員的許可權,使其具備DLF控制台授權db_a資料庫的許可權,以及db_a資料庫資料的存取權限。
切換阿里雲網站的登入使用者為dlf_data_admin子帳號,使用該賬戶後續為其他使用者進行資料授權。
登入資料湖構建控制台。
在左側功能表列,選擇
,單擊新增授權。輸入如下資訊:
主體類型:RAM 使用者/角色。
主體選擇:dlf_dba_admin。
授權資源:資源授權。
選擇資料目錄:catalog_test。
選中資料庫:db_a。
許可權配置:
資料庫-資料許可權:ALL。
資料庫-授權許可權:ALL。
資料庫下所有對象-資料許可權:ALL。
資料庫下所有對象-授權許可權:ALL。
單擊確定,儲存授權資訊。
如果需要dlf_dba_admin在DLF控制台為RAM使用者配置資料許可權,還需要在RAM控制台中,為dlf_dba_admin添加權限原則:AliyunDLFFullAccess,AliyunRAMReadOnlyAccess。
登入EMR叢集,使用dlf_dba_admin串連Hive,執行HiveSQL。
beeline -u jdbc:hive2://<主節點的節點名稱>:10000 -n dlf_dba_admin
select * from db_a.table1; select * from db_b.table1;
上述SQL第一條查詢成功,該使用者dlf_dba_admin具備了db_a資料庫及其下面所有資源的許可權。
上述SQL第二條查詢失敗,該使用者dlf_dba_admin不具備db_b資料庫及其下面所有資源的許可權。
設定業務A資料開發人員的許可權,使其具備db_a資料庫資料的查詢和修改許可權。
切換阿里雲網站的登入使用者為dlf_dba_admin子帳號,使用該賬戶後續為其他使用者進行資料授權。
登入資料湖構建控制台。
在左側功能表列,選擇資料許可權>資料授權,單擊新增授權。
輸入如下資訊:
主體類型:RAM 使用者/角色。
主體選擇:dlf_dba_dev。
授權資源:資源授權。
選擇資料目錄:catalog_test。
選中資料庫:db_a。
許可權配置:
資料庫-資料許可權:ALL。
資料庫-授權許可權:ALL。
資料庫下所有對象-資料許可權:ALL。
資料庫下所有對象-授權許可權:ALL。
單擊確定,儲存授權資訊。
登入EMR叢集,使用dlf_dba_dev串連Hive,執行HiveSQL。
beeline -u jdbc:hive2://<主節點的節點名稱>:10000 -n dlf_dba_dev
select * from db_a.table1; insert into table db_a.table1 values('3','aliyun','emrA1'),('4','aliyun','dlfA1'); select * from db_b.table1; insert into table db_b.table1 values('3','aliyun','emrA1'),('4','aliyun','dlfA1');
上述SQL第1、2條查詢成功,該使用者dlf_dba_dev具備了db_a資料庫及其下面所有資源的查詢和修改許可權。
上述SQL第3、4條查詢失敗,該使用者dlf_dba_dev不具備db_b資料庫及其下面所有資源的查詢和修改許可權。
設定業務A資料分析人員的許可權,使其具備db_a資料庫table1(col1,col2)的存取權限。
在阿里雲網站的登入使用者為dlf_dba_admin子帳號,使用該賬戶後續為其他使用者進行資料授權。
登入資料湖構建控制台。
在左側功能表列,選擇資料許可權>資料授權,單擊新增授權。
輸入如下資訊:
主體類型:RAM 使用者/角色。
主體選擇:dlf_dba_analyst。
授權資源:資源授權。
資源類型:資料列。
選擇資料目錄:catalog_test。
選擇資料庫:db_a。
選擇資料表:table1。
許可權配置:
資料列-資料許可權:ALL。
單擊確定,儲存授權資訊。
登入EMR叢集,使用dlf_dba_analyst串連Hive,執行HiveSQL。
beeline -u jdbc:hive2://<主節點的節點名稱>:10000 -n dlf_dba_analyst
select * from db_a.table1; select col1,col2 from db_a.table1; insert into table db_a.table1 values('5','aliyun','emrA1'),('6','aliyun','dlfA1'); select * from db_b.table1;
上述SQL第2條查詢成功,該使用者dlf_dba_dev具備了db_a.table1(col1,col2)的查詢許可權。
上述SQL第1條查詢失敗,該使用者dlf_dba_dev不具備db_a.table1(col3)的查詢許可權。
上述SQL第3條查詢失敗,該使用者dlf_dba_dev不具備db_a.table1的資料修改許可權。
上述SQL第4條查詢失敗,該使用者dlf_dba_dev不具備db_b資料庫的資料查詢許可權。
總結
以上樣本示範了一個簡單業務情境下如何運用DLF進行資料授權的操作步驟。您可以根據具體業務需求,靈活配置DLF資料許可權,以授予不同使用者訪問和操作各類資源的適當許可權。