文档

DLF+EMR之统一权限最佳实践

本文结合具体业务场景,为您介绍如何使用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的访问权限。

操作步骤

  1. 创建EMR集群,并使用DLF作为元数据。

    1. 打开E-MapReduce控制台

    2. 创建E-MapReduce集群,输入选项如下:

      1. 业务场景:选择新版数据湖 DataLake。

      2. 可选服务:需要至少选中HiveDLF-Auth组件,其他组件根据业务需要选择。

      3. 元数据:选择DLF 统一元数据。

      4. DLF数据目录:选择默认的DLF Catalog,或者新建一个数据目录(Catalog)。此处演示使用catalog_test做示例。

    3. 继续其他配置完成EMR 集群创建。

      说明
      • 如果您已经有E-MapReduce集群,但未安装DLF-Auth组件,可以通过EMR集群中添加服务的方式,添加DLF-Auth组件后,再使用DLF数据权限。

      • 如果您已经有E-MapReduce集群,但Hive元数据未使用DLF,可以通过元数据迁移后再使用DLF 数据权限。可以参考EMR元数据迁移到数据湖构建(DLF),也可通过钉钉群联系我们:33719678

  2. 初始化相关数据库和数据表。

    1. 登录EMR集群,可参考登录集群

    2. 通过beeline连接Hive SQL。

      beeline -u jdbc:hive2://<主节点的节点名称>:10000
    3. 执行以下语句初始化数据,创建测试数据。

      --创建数据库和表
      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');
  3. 初始化各角色登录所需的RAM用户。

    1. 超级管理员,新建RAM用户:dlf_data_admin。

    2. 业务A数据管理员,新建RAM用户:dlf_dba_admin。

    3. 业务A数据开发人员,新建RAM用户:dlf_dba_dev。

    4. 业务A数据分析人员,新建RAM用户:dlf_dba_analyst。

  4. 开启数据权限控制。

    1. 需要完成以下两步,才可以正式开启EMR集群的数据权限控制:

      1. 在EMR集群开启数据权限控制,具体操作参考DLF-Auth

      2. 在DLF中开启Catalog的权限控制,具体操作参考权限设置

        说明

        生产使用建议同时开启LDAP认证,以保证用户身份经过合法校验。以下示例为简单说明权限问题,并未开启LDAP认证,所以beeline连接时未要求输入密码。

  5. 设置超级管理员的权限,使其具备DLF控制台授权权限,以及所有数据的访问权限。

    1. 打开数据构建控制台

    2. 依次打开菜单:数据权限-角色

    3. admin角色中,添加用户dlf_data_admin,此时dlf_data_admin就会具备dlf管理所有数据权限的管理员。可以为任意用户配置相关数据权限。

    4. 如果需要dlf_data_admin可以为在DLF控制台为RAM用户配置数据权限,还需要在RAM控制台中,为dlf_data_admin添加权限策略:AliyunDLFFullAccessAliyunRAMReadOnlyAccess

    5. 登录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同时具备了所有数据库,数据表的访问权限。

  6. 设置业务A数据管理员的权限,使其具备DLF控制台授权db_a数据库的权限,以及db_a数据库数据的访问权限。

    1. 切换阿里云网站的登录用户为dlf_data_admin子账号,使用该账户后续为其他用户进行数据授权。

    2. 打开数据构建控制台

    3. 依次打开菜单:数据权限-数据授权,点击新增授权。

    4. 输入如下信息:

      1. 主体类型RAM 用户/角色

      2. 主体选择:dlf_dba_admin。

      3. 授权资源资源授权

      4. 选择数据目录:catalog_test。

      5. 选中数据库:db_a。

      6. 权限配置

        1. 数据库-数据权限ALL

        2. 数据库-授权权限ALL。

        3. 数据库下所有对象-数据权限ALL

        4. 数据库下所有对象-授权权限ALL

    5. 点击确定按钮,保存授权信息。

    6. 如果需要dlf_dba_admin可以为在DLF控制台为RAM用户配置数据权限,还需要在RAM控制台中,为dlf_dba_admin添加权限策略:AliyunDLFFullAccess,AliyunRAMReadOnlyAccess。

    7. 登录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数据库及其下面所有资源的权限。

  7. 设置业务A数据开发人员的权限,使其具备db_a数据库数据的查询和修改权限。

    1. 切换阿里云网站的登录用户为dlf_dba_admin子账号,使用该账户后续为其他用户进行数据授权。

    2. 打开数据构建控制台

    3. 依次打开菜单:数据权限-数据授权,点击新增授权。

    4. 输入如下信息:

      1. 主体类型RAM 用户/角色

      2. 主体选择:dlf_dba_dev。

      3. 授权资源资源授权

      4. 选择数据目录:catalog_test。

      5. 选中数据库:db_a。

      6. 权限配置

        1. 数据库-数据权限ALL

        2. 数据库-授权权限ALL。

        3. 数据库下所有对象-数据权限ALL

        4. 数据库下所有对象-授权权限ALL

    5. 点击确定按钮,保存授权信息。

    6. 登录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数据库及其下面所有资源的查询和修改权限。

  8. 设置业务A数据分析人员的权限,使其具备db_a数据库table1(col1,col2)的访问权限。

    1. 在阿里云网站的登录用户为dlf_dba_admin子账号,使用该账户后续为其他用户进行数据授权。

    2. 打开数据构建控制台

    3. 依次打开菜单:数据权限-数据授权,点击新增授权。

    4. 输入如下信息:

      1. 主体类型RAM 用户/角色

      2. 主体选择:dlf_dba_analyst。

      3. 授权资源资源授权

      4. 资源类型数据列

      5. 选择数据目录:catalog_test。

      6. 选择数据库:db_a。

      7. 选择数据表:table1。

      8. 权限配置

        1. 数据列-数据权限ALL

    5. 点击确定按钮,保存授权信息。

    6. 登录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数据权限可以更加灵活的结合业务情况授予不同的人,针对不同资源的查询,修改,授权等权限。

  • 本页导读 (0)
文档反馈