Spark是一种流行的大数据集群计算框架,通常被大数据工程师,大数据科学家和大数据分析师用于各种用例。根据情况的不同,每种用户类型都将要求一定范围的数据访问权限。与其他像Presto这样具有内置授权框架和细粒度访问控制的大数据引擎不同,Spark可以直接访问Qubole Metastore(利用Apache Hive)中存储的所有表和资源。这不仅带来安全问题,而且阻碍了增长和企业采用。因此,我们很有必要在Qubole平台上引入新的Spark数据访问控制框架。
一、目标
1、这些是介绍Spark访问控制框架时考虑的一些最重要的设计目标:
2、细粒度的访问控制应在各种大数据引擎上统一应用。
3、必须通过任何引擎查看或编辑策略,以提供一致且可预测的行为。
4、支持SparkSQL访问方法,例如数据框或SQL语句。
5、该框架必须易于与Hive Authorization或Apache Ranger等各种策略管理器集成。
二、实施细节
考虑到这些要求,我们决定将Hive授权实施为我们的第一个策略管理器。Hive授权策略存储在Qubole Metastore中,该库充当共享的中央组件,并存储与Hive资源(如Hive表)相关的元数据。Spark在访问Hive表或添加和修改这些策略时尊重Qubole Metastore中存储的策略。
总之,我们实现了一个SQL标准访问控制层,该层与当今的Apache Hive或Presto中的层相同。以下各节详细介绍了体系结构,并提供了一个示例说明其工作原理。
三、建筑
授权逻辑嵌入在Spark Catalyst Framework 的分析器层内部。分析工具的规则负责解析“数据库”,“表”和“列”等实体。从计划中提取有关不同已解析实体的信息,并将其传递给Hive 授权器,后者已经具有有关用户的信息。然后,Hive授权器使用Qubole Metastore中存在的安全策略执行资源级别检查,如果用户缺少抛出HiveAccessControlException的运行特权,则该查询将停止执行查询。
四、限制表级访问
1、假设我们有一个Hive表“工资”,其定义如下:
出于数据治理的目的,应允许属于财务团队的用户“ Jane”访问表,并且应限制IT用户“ Robin”访问表。
2、属于“ admin”角色的任何用户都可以按照以下步骤限制对该表的访问:
A、创建一个新角色,并将此角色授予应该有权访问该表的用户,在这种情况下,将其授予用户“ Jane”。
(用户)sql> SET ROLE admin;
(用户/管理员)sql> CREATE ROLE finance;
(用户/管理员)sql>向用户Jane授予资金;
B、向角色“金融”提供“选择”特权。
(用户/管理员)SQL>在工资单上授予资助以选择角色;
3、当“简”承担通过“ SET ROLE ALL”命令授予的所有角色后访问表时,将显示以下结果–
4、当“罗宾”或未获得“财务”角色的任何其他用户尝试相同的流程时,我们可以预期会发生
五、限制列和行访问
可以通过视图来实现高级用例,例如限制列或行的访问。例如,假设我们有一个名为“ finance_intern”的新角色,该角色无权访问表“工资”中的“工资”列,而只能访问与“财务”部门关联的行。
A、像以前一样,任何属于admin角色的用户都可以创建一个包含三列的新视图(emp_id,emp_name,dept_name),在dept_name上添加一个过滤器,并提供finance-intern角色。访问此新视图而不是基表。
(用户)sql> SET ROLE admin;
(用户/管理员)sql> CREATE VIEW payroll_view AS
SELECT emp_id,emp_name,dept_name FROM工资单
dept_name ='财务';
(用户/管理员)sql> GRANT SELECT ON payroll_view TO ROLE finance_intern;
B、分配了`finance_intern`角色的用户可以担任该角色并访问视图。结果如下:
(用户)SQL> SET ROLE finance_intern;
C、由于访问基表没有被授予这个角色,我们会得到一个HiveAccessControlException如果用户试图访问未经授权的数据。
填写下面表单即可预约申请免费试听!怕钱不够?可先就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可推荐就业!
©2007-2022/ www.aaa-cg.com.cn 北京漫动者数字科技有限公司 备案号: 京ICP备12034770号 监督电话:010-53672995 邮箱:bjaaa@aaaedu.cc