本文結合具體業務場景,為您介紹如何使用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 數據權限。可以參考EMR元數據遷移到數據湖構建(DLF),也可通過釘釘群聯系我們: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管理所有數據權限的管理員??梢詾槿我庥脩襞渲孟嚓P數據權限。
如果需要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數據權限,以授予不同用戶訪問和操作各類資源的適當權限。