本文结合具体业务场景,为您介绍如何使用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 数据权限。也可通过钉钉群联系我们: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数据权限,以授予不同用户访问和操作各类资源的适当权限。