首页> 中国专利> 一种Hive数据权限控制代理层方法及系统

一种Hive数据权限控制代理层方法及系统

摘要

本发明公开了一种Hive数据权限控制代理层方法及系统,包括以下步骤:S1:Hive数据权限申请;S2:HQL解析;S3:HQL改写;S4:HQL权限校验;S5:HQL表、字段血缘分析。本方法和系统能够实现细粒度的数据权限控制需求。本发明能够满足企业内部细粒度的数据权限控制需求,本发明基于Hive原生类实现HQL解析、改写和权限校验,准确度和稳定性有一定保障,达到生产上线要求有一定把握;本发明提供的Java类DatablackHiveAuthorizerFactory和DatablackHiveAuthorizer都是对Hive接口的具体实现,能够实现员工/用户级别的数据鉴权;本发明的安装和部署都不需要侵入集团大数据集群管理平台,能够满足很大一部分实际生产场景需求。

著录项

  • 公开/公告号CN114896584A

    专利类型发明专利

  • 公开/公告日2022-08-12

    原文格式PDF

  • 申请/专利权人 杭州比智科技有限公司;

    申请/专利号CN202210818903.5

  • 发明设计人 卢薇;

    申请日2022-07-13

  • 分类号G06F21/45(2013.01);G06F21/44(2013.01);G06F16/182(2019.01);G06F16/2455(2019.01);G06F16/2457(2019.01);G06F16/25(2019.01);

  • 代理机构北京云科知识产权代理事务所(特殊普通合伙) 11483;

  • 代理人张飙

  • 地址 311121 浙江省杭州市余杭区仓前街道仓兴路1号23幢2-4楼

  • 入库时间 2023-06-19 16:23:50

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-10-11

    授权

    发明专利权授予

  • 2022-08-30

    实质审查的生效 IPC(主分类):G06F21/45 专利申请号:2022108189035 申请日:20220713

    实质审查的生效

说明书

技术领域

本发明涉及网络及数据处理技术领域,尤其是涉及一种Hive数据权限控制代理层方法及系统。

背景技术

随着互联网开源技术和云计算等技术的广泛应用,性能和扩展能力等基础技术不再成为企业业务发展瓶颈。打通数据孤岛、最大化数据智能、数据驱动业务成为企业未来发展的核心竞争力。当下,随着大数据开源技术和社区的蓬勃发展,企业搭建数据中台通常选用以“Hadoop”为核心的大数据技术栈,比如HDFS(注:“Hadoop”生态中一种分布式文件存储系统)/HBase(注:“Hadoop”生态中一种基于列式存储的非关系性数据库系统)进行分布式存储、Hive(注:“Hadoop”生态中一种离线查询引擎)/Spark(注:“Hadoop”生态中一种基于内存的分布式计算框架和离线计算引擎)进行离线数据分析、Flink(注:“Hadoop”生态中一种能够实现流批一体化的实时计算引擎)进行实时数据分析、Yarn(注:“Hadoop”生态中一种通用资源管理系统)进行资源管理和分布式任务调度、Ranger/Sentry(注:“Hadoop”生态中两种不同的数据权限管控框架和组件)进行大数据集群的数据权限管控。然而,企业不同部门的数据汇入到数据中台后必须要解决的一个难题是数据权限控制问题。

与此同时,为了整合资源,企业通常会有专门的大数据与安全部门负责搭建和管理以CDH(Cloudera’s Distribution Including Apache Hadoop, CDH)/HDP(HortonWorks Data Platform, HDP)/EMR(Elastic MapReduce, EMR)为代表的大数据集群管理平台,其他部门则以一个租户的身份向集团大数据集群管理平台申请Hive数据库、HDFS文件目录等资源。大数据与安全部门通过CDH/HDP/EMR自带的Ranger/Sentry组件为租户分配资源权限,从而实现租户之间的数据隔离。这种租户之间的数据隔离是一种粗粒度的数据权限控制方案,不能满足部门内部更细粒度的数据权限控制需求,比如员工A作为核心数据开发人员拥有所有表的的操作权限,而员工B作为普通访客只能拥有特定表的查看权限。这主要是因为部门中所有员工都是通过同一个租户与大数据集群进行交互,Ranger和Sentry的身份认证和数据鉴权只能是针对租户,不能再细化到租户底下的不同员工。

目前常被提出的Hive数据权限方案大多还是基于Ranger和Sentry。它们通过Ranger和Sentry提供的对外接口,向Ranger Admin创建权限策略或者向Sentry创建角色并且为角色分配权限。除此之外,还有一部分方案是对Ranger和Sentry的插件进行二次改造,实现自定义的数据权限控制。由于Ranger和Sentry都是采用插件化的方式对Hive、HDFS等大数据组件进行数据权限管控,也即需要将插件内嵌到这些大数据组件中,这些方案都是侵入式的数据权限管控方案。对于大数据集群管理平台由集团进行统一管理的场景,部门想要通过自研权限插件并将权限插件部署到集团大数据集群管理平台是不被允许的。因此,在现实许多场景中,不侵入大数据集群的Hive数据权限控制代理层方案成为企业部门内部实现细粒度的数据权限控制的唯一选择。

如前所述,目前已被提出的Hive数据权限方案中,大多还是基于Ranger和Sentry的插件方案。它们通过Ranger和Sentry提供的对外接口,向Ranger Admin(注:Ranger的策略管理中心)创建权限策略或者向Sentry创建角色并且为角色分配权限,然后利用Ranger和Sentry原生或经过二次改造后的Hive插件从Ranger Admin和Sentry拉取权限策略,完成数据权限鉴权。这些方案都需要将Ranger和Sentry的Hive插件放置在CDH/HDP/EMR Hive的依赖包目录下,并且必须配置和重启Hive才能生效。一方面,Hive插件会侵入HiveServer2(注:Hive的服务端)执行HQL(或HiveQL,一种Hive提供的SQL方言)过程,Hive插件的安全性对于集团大数据集群管理平台通常是不被信任的。这也是为什么在许多现实场景,特别是大数据集群管理平台由集团某特定部门统一管理和维护,其他部门共享使用的场景,第三方提供的Hive插件是不被允许放入到大数据集群管理平台。另一方面,Hive插件的安装和更新需要配置和重启Hive,这会导致Hive服务的中断,进而导致Hive任务执行结果不能正常返回,从而造成生产事故。由于这两方面原因,现有的Hive数据权限方案只能适用于部门独立部署和维护CDH/HDP/EMR场景,Hive插件的安全性保障、安装和更新都由部门自己负责和承担。因此,为数据中台必不可少的大数据查询引擎Hive实现数据权限代理层方案具有十分重要的生产价值。所谓“数据权限代理层”是指在不侵入大数据集群管理平台的前提下,在大数据集群管理平台之外代理提供数据鉴权服务。针对大多数大数据集群管理平台由集团集中管控的现实场景,本发明提出一种Hive数据权限控制代理层方案,它能在不使用任何插件侵入集团大数据集群管理平台的前提下,满足部门内部更细粒度的数据权限控制需求。

发明内容

针对现有技术存在的问题,本发明的目的在于提供一种Hive数据权限控制代理层方法及系统,能在不使用任何插件侵入集团大数据集群管理平台的前提下,满足部门内部更细粒度的数据权限控制需求。

为实现上述目的,本发明提供一种Hive数据权限控制代理层方法,所述方法包括以下步骤:

S1:Hive数据权限申请;当部门的数据权限审批服务批准员工的Hive数据权限申请时,数据权限管理中心同步创建相应的数据权限策略,存储在表及字段权限模块和行过滤及字段脱敏模块中,并且更新用户权限管理中员工与数据权限策略之间的映射关系;

S2:HQL解析;在HQL解析之前,需要利用部门与集团大数据集群管理平台交互的租户keytab进行kerberos认证,从而实现租户之间的数据隔离;

S3:HQL改写;SemanticAnalyzer在对HQL进行解析的过程中,通过Hive的TableMask对象对HQL进行行过滤和字段脱敏改写;

S4:HQL权限校验;基于QueryState、SemanticAnalyzer和HQL,调用Driver的静态doAuthorization方法,实现HQL数据权限校验;

S5:HQL表、字段血缘分析;当HQL鉴权通过后,进行HQL表、字段血缘分析。

进一步,当员工提交Hive任务,基于JDBC的HQL提交模块将HQL和员工的身份信息一并发送给Hive数据鉴权代理单元进行鉴权,HQL鉴权的过程为上述HQL解析、HQL改写、HQL权限校验和HQL表、字段血缘分析;若HQL鉴权通过,基于JDBC的HQL提交模块将改写后HQL提交到集团大数据集群管理平台上去执行。

进一步,步骤S2中,kerberos认证通过后,创建HiveConf;HiveConf的创建依赖集团大数据集群管理平台提供的Hadoop和Hive配置文件,所述配置文件包括core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和hive-site.xml。

进一步,步骤S2中,HQL解析包括如下子步骤:

S201,利用HiveConf创建SessionState对象,设置SessionState对象的userName为提交HQL的员工账户;

S202,启动SessionState对象,设置当前数据库为部门在大数据集群管理平台申请的Hive数据库,初始化事务管理器;SessionState对象创建和启动后,有效且保持唯一,能够与Hadoop进行通信来提交分布式任务,也能够连接Hive的元数据库来查询元数据信息;

S203,依次创建QueryState、Context、ParseDriver对象;调用ParseDriver对象的parse方法将原始HQL解析成为抽象语法树节点;利用Hive的SemanticAnalyzerFactory的get方法生成QueryState和ASTNode对应的SemanticAnalyzer;

S204,调用SemanticAnalyzer的analyze方法对HQL进行解析。

进一步,步骤S3中,HQL改写的过程包括如下子步骤:

S301,对HQL的ASTNode进行遍历和解析,获取表及字段信息;

S302,通过DatablackHiveAuthorizer从数据权限管理中心拉取与SessionState的userName对应的表及字段的行过滤和字段脱敏权限策略,并且调用applyRowFilterAndColumnMasking方法以便TableMask对象正确获取行过滤和字段脱敏表达式;

S303,根据行过滤和字段脱敏表达式对原始HQL的Token流进行改写,将最新HQL的Token流保存在Context对象中。

进一步,步骤S4中,若HQL权限校验成功,该方法正常返回,否则,抛出权限校验失败异常;Driver的权限校验底层依赖DatablackHiveAuthorizer类;DatablackHiveAuthorizer类是本发明提供的一个对Hive的HiveAuthorizer接口的实现,实现了checkPrivileges、applyRowFilterAndColumnMasking和needTransform方法;Driver的doAuthorization解析出HQL的HiveOperationType、输入和输出HivePrivilegeObject和认证上下文,然后调用DatablackHiveAuthorizer的checkPrivileges方法;checkPrivileges方法向数据权限管理中心拉取用户权限策略,解析输入输出HivePrivilegeObject中涉及的表和字段以及操作类型,然后匹配用户权限策略;若所有输入输出HivePrivilegeObject对象都权限验证通过,方法正常返回,否则抛出权限校验失败异常。

进一步,步骤S5中,HQL表、字段血缘分析具体包括以下步骤:

S501,基于HiveConf、QueryState、SemanticAnalyzer以及HQL,创建QueryPlan和HookContext对象;

S502,调用本发明提供的Java类ColumnLineageAnalysis的run方法,返回HQL中表、字段血缘关系;ColumnLineageAnalysis是Hive的LineageLogger的继承类,重写了其中的run方法,能够返回HQL的表、字段血缘关系;

S503,Hive数据鉴权代理将HQL权限校验结果、改写后的HQL以及表、字段血缘分析结果发送给基于JDBC的HQL提交模块。

另一方面,本发明还提供一种Hive数据权限控制代理层系统,所述系统用于实现根据本发明所述的Hive数据权限控制代理层方法。

进一步,所述系统包括集团大数据集群管理平台,用于为使用平台的各个部门开通和注册租户,并且通过Ranger Admin提前配置各租户使用Hive数据库和HDFS文件目录权限;还包括嵌入到HiveServer2的Hive插件和HDFS的HDFS插件;用于周期地从Ranger Admin拉取权限策略,保存在本地策略仓库。

进一步,还包括数据权限管理中心,所述数据权限管理中心设有表及字段权限模块、行过滤及字段脱敏模块和用户权限管理模块;其中,表及字段权限是从元数据维度定义数据权限;行过滤及字段脱敏是从数据维度定义数据权限;Hive数据鉴权代理单元进行HQL解析、HQL改写、HQL权限校验以及HQL表、字段血缘分析。

本发明的有益效果如下:1)本发明的技术方案架构设计能够满足企业内部细粒度的数据权限控制需求,2)本发明的技术方案实现是基于Hive原生类实现HQL解析、改写和权限校验,准确度和稳定性有一定保障,达到生产上线要求有一定把握,3)本发明提供的Java类DatablackHiveAuthorizerFactory和DatablackHiveAuthorizer都是对Hive接口的具体实现,能够实现员工/用户级别的数据鉴权,4)本发明的安装和部署都不需要侵入集团大数据集群管理平台,能够满足很大一部分实际生产场景需求。

附图说明

图1示出了根据本发明实施例中Hive数据权限控制代理层方法及系统的架构设计示意图;

图2示出了根据本发明实施例中测试表结构及其数据示意图;

图3示出了根据本发明实施例中数据权限策略表示意图;

图4示出了根据本发明实施例中员工与数据权限策略映射关系表示意图;

图5示出了根据本发明实施例中HQL鉴权流程示意图;

图6示出了根据本发明实施例中HQL安全认证、鉴权、血缘分析关键配置参数示意图;

图7中的(a)为根据本发明实施例中HQL改写前后对比图,(b)为查询结果示意图;

图8示出了根据本发明实施例中HQL鉴权过程示意图;

图9示出了根据本发明实施例中HQL的表、字段血缘分析过程示意图。

具体实施方式

下面将结合附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

以下结合图1-图9对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。

文中涉及术语的释义:

Hadoop:狭义上指Apache基金会所开发的一个开源分布式计算平台,广义上指以“Hadoop”为核心的大数据组件生态;

HDFS:“Hadoop”生态中一种分布式文件存储系统;

HBase:“Hadoop”生态中一种基于列式存储的非关系型数据库系统;

Hive:“Hadoop”生态中一种离线查询引擎,提供一种被称为“HiveQL(HQL)”的SQL方言来存储、查询和分析存储在Hadoop中的大规模数据;

Spark:“Hadoop”生态中一种基于内存的分布式计算框架和离线计算引擎;

Flink:“Hadoop”生态中一种能够实现流批一体化的实时计算引擎;

MapReduce:“Hadoop”生态中一种最基础的分布式计算框架和编程模型;

Yarn:“Hadoop”生态中一种通用资源管理系统;

CDH: Hadoop稳定发行版以及大数据集群管理平台;

HDP:开源大数据集群管理平台;

EMR: Hadoop稳定发行版以及大数据集群管理平台;

Ranger:“Hadoop”生态中一种基于权限策略的数据权限管控框架和组件,已被HDP和EMR集成;

Sentry:“Hadoop”生态中一种基于角色的数据权限管控框架和组件,已被CDH集成;

Ranger Admin:Ranger的权限策略和组件管理中心;

HiveServer2:Hive提供的一种能使客户端执行HQL的服务;

Kerberos:“Hadoop”生态支持的一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证;

Keytab:Kerberos服务器颁发给租户的身份认证票据;

JDBC:Java语言中用来规范客户端程序访问数据库的应用程序接口,一般指Java数据库连接;

HiveConf:Hive源码中提供的Java类,用于在内存中存储Hadoop和Hive配置,继承自Hadoop的配置类Configuration;

SessionState:Hive源码中提供的Java类,用于创建一个Hive会话并且维护会话中的状态;

QueryState:Hive源码中提供的Java类,用于维护一个HQL查询的状态信息,比如HiveConf和HQL对应的操作类型;

ParseDriver:Hive源码中提供的Java类,提供的parse方法能够将一个HQL解析成相应的抽象语法树节点ASTNode;

ASTNode:Hive源码中提供的Java类,用于表示一个HQL的抽象语法树;

SemanticAnalyzerFactory:Hive源码中提供的Java类,提供的get方法能够根据ASTNode和QueryState生成相应的语法分析器SemanticAnalyzer;

SemanticAnalyzer:Hive源码中提供的Java类,提供的analyze方法能够对ASTNode进行语义分析和优化,解析其中涉及的表、字段等元数据信息,并且对HQL进行行过滤和字段脱敏改写;

Context:Hive源码中提供的Java类,为SemanticAnalyzer提供上下文环境,维护HQL中的Token流,SemanticAnalyzer改写后HQL的Token流保存在Context中;

TableMask:Hive源码中提供的Java类,通过从HiveAuthorizer中获取的行过滤和字段脱敏表达式,对HQL进行改写,并且将改写后的HQL保存在Context中,TableMask对象在SemanticAnalyzer对象生成的时候被生成;

HiveAuthorizer:Hive源码中提供的Java接口,定义了一系列未实现方法,其中checkPrivileges方法用于用户数据权限校验,needTransform方法用于标注是否HQL改写和applyRowFilterAndColumnMasking方法用于获取表的行过滤和字段脱敏表达式;

DatablackHiveAuthorizer:Hive源码中HiveAuthorizer接口类的一个实现类,提供了checkPrivileges、needTransform和applyRowFilterAndColumnMasking三个方法的具体实现;

HiveAuthorizerFactory:Hive源码中提供的Java接口,定义了一个未实现的createHiveAuthorizer方法,是HiveAuthorizer的工厂类;

DatablackHiveAuthorizerFactory:Hive源码中HiveAuthorizerFactory接口类的一个实现类,实现了createHiveAuthorizer方法,来生成DatablackHiveAuthorizer的实例对象;

Driver:Hive源码中提供的Java类,是Hive的驱动,用于对HQL进行解析、编译、优化和执行,提供一个静态的doAuthorization方法能对用户数据权限进行校验;

HiveOperationType:Hive源码中提供的Java枚举类,用于表示HQL的操作类型,比如新增数据库、表查询、表插入等;

HivePrivilegeObject:Hive源码中提供的Java类,用于表示一个待鉴权对象,其中记录了数据库、表、字段、分区以及操作类型等信息;

QueryPlan:Hive源码中提供的Java类,用于记录一个HQL所对应的输入输出格式以及查询计划;

HookContext:Hive源码中提供的Java类,用于在HQL执行前后为钩子类执行run方法提供上下文环境,比如QueryPlan和QueryState;

LineageLogger:Hive源码中提供的Java类,是一种HQL执行后钩子类,用于对HQL的表、字段的血缘进行解析,然后打印为日志;

ColumnLineageAnalysis:Hive源码中LineageLogger类的继承类,重写了LineageLogger类的run方法,能够以特定格式输出HQL的表、字段血缘关系。

图1为本发明的细粒度Hive数据权限控制代理层方法及系统的总体技术方案架构设计图。如图1下半部分所示,在所述系统中,安全中心负责管理和维护集团大数据集群管理平台100,为使用平台的各个部门开通和注册租户,并且通过Ranger Admin 120提前配置各租户使用Hive数据库和HDFS文件目录权限。所述安全中心位于图1中所示的大数据与安全部门110。嵌入到HiveServer2 130的Hive插件131和HDFS 140的HDFS插件141周期地从Ranger Admin 120拉取权限策略,保存在本地策略仓库。上层租户提交HQL给HiveServer2130时会经过HQL解析、编译、优化和执行四个阶段。在HQL编译阶段,HiveServer2 130能够触发Hive插件131对HQL解析的输入/输出权限对象(Hive Privilege Object)进行鉴权。Hive插件131将权限对象与本地缓存的权限策略进行逐条核对,如果某一权限对象被鉴定为不被允许,则立即中断HiveServer2 130的HQL执行,并且向Ranger Admin 120发送鉴权审计日志,返回租户鉴权失败明细。只有当Hive插件131鉴权通过后,HiveServer2 130向Yarn 150提交MapReduce任务来执行HQL。由于Hive的数据库和表存储在HDFS 140,HDFS插件141对绕过HiveServer2 130直接访问HDFS 140的租户进行数据鉴权。这里,Hive数据权限策略在创建时会同步创建对应的HDFS 140数据权限策略。

如图1中间部分所示,部门A数据分析平台200和部门B数据分析平台300分别凭借租户A.keytab和租户B.keytab,通过kerberos认证后,与集团大数据集群管理平台100上大数据组件进行交互。需要注意的是,虽然集团大数据集群管理平台100上的Ranger Admin120能够管理租户资源权限,实现租户之间的资源隔离,但租户之间的数据隔离是一种粗粒度的数据权限控制方案,无法满足部门A和部门B对内部员工更细粒度的数据权限需求。为此,本发明的创新和贡献主要集中在图1的上半部分关于数据权限管理中心400和Hive数据鉴权代理模块500的技术实现。

根据本发明的改进技术原理,在数据权限管理中心400,将Hive数据权限类别分为表及字段权限和行过滤及字段脱敏两类,所述数据权限管理中心400相应地设有表及字段权限模块410和行过滤及字段脱敏模块420。其中,表及字段权限是从元数据维度定义数据权限,比如表删除、修改、清空和字段查询权限;行过滤及字段脱敏是从数据维度定义数据权限。用户权限管理模块430负责维护部门员工与数据权限策略之间的映射关系。具体地讲,在部门A 200内部,员工A.b 221通过数据权限审批服务210向部门A 200申请Hive数据权限,数据权限审批通过后,数据权限管理中心400同步创建相应的数据权限策略,存储在表及字段权限模块410和行过滤及字段脱敏模块420中,并且更新用户权限管理430中员工与数据权限策略之间的映射关系。

Hive数据鉴权代理单元500是本发明数据权限代理层方案的核心,负责进行HQL改写510、HQL权限校验520以及提供HQL表、字段血缘分析服务530。如图1的上半部分所示,部门A 200的员工A.b 221在申请Hive表权限后,提交Hive任务,基于JDBC的HQL提交模块230会将HQL和员工A.b的身份信息一并发送给Hive数据鉴权代理单元500进行鉴权。首先,Hive数据鉴权代理单元500向数据权限管理中心400拉取用户权限策略。然后,如果针对员工A.b存在行过滤和字段脱敏权限策略,Hive数据鉴权代理500在HQL解析时会对HQL进行改写,比如添加行过滤和字段脱敏表达式,从而实现行过滤和字段脱敏。类似于Ranger的Hive插件,在解析出HQL的输入/输出权限对象后,Hive数据鉴权代理单元500将权限对象与本地缓存的权限策略进行逐条核对,如果某一权限对象被鉴定为不被允许,则立即通知基于JDBC的HQL提交模块230中止HQL任务提交和用户鉴权失败明细,并且向数据权限管理中心400发送鉴权审计日志。最后,当鉴权通过后,Hive数据鉴权代理单元500对HQL进行表、字段血缘分析,将鉴权结果、改写后HQL以及表、字段血缘信息发送给基于JDBC的HQL提交模块230。基于JDBC的HQL提交模块230将改写后HQL提交到大数据管理平台100上的HiveServer2 130进行执行。

由图1所示,数据权限管理中心400和Hive数据鉴权代理单元500都是在集团大数据集群管理平台100之外,它们的安装和部署都不需要侵入集团大数据集群管理平台100。除此之外,Hive数据鉴权是在HQL提交到大数据集群管理平台100之前进行的,不干扰HiveServer2 130的执行过程,避免了安全问题的发生。最重要的是,Hive数据鉴权的粒度能够细化到部门内部员工,满足部门内部更细粒度的数据权限控制需求。因此,数据权限管理中心400和Hive数据鉴权代理单元500就是本发明的数据权限控制代理层。

本发明细粒度Hive数据权限控制代理层方法及系统的技术方案如下,所述方法包括以下步骤:

步骤S1:Hive数据权限申请。

如图1所示,当部门的数据权限审批服务批准员工的Hive数据权限申请时,数据权限管理中心400同步创建相应的数据权限策略,存储在表及字段权限模块410和行过滤及字段脱敏模块420中,并且更新用户权限管理430中员工与数据权限策略之间的映射关系。

在一个具体实施例中,部门A 200在大数据集群管理平台100申请的Hive数据库为“hive_test”,其中有一张名为“ods_tbl_test”的Hive表,其表结构和数据如图2所示。员工A.b 221向数据权限审批服务210申请了表“ods_tbl_test”的查看权限,并且设置了行过滤和字段脱敏条件。审批通过后,数据权限管理中心400存储的数据权限策略如图3所示,其中有三条权限策略,分别是1)对库“hive_test”的表“ods_tbl_test”的全字段查询权限,2)对库“hive_test”的表“ods_tbl_test”的行过滤,和3)对库“hive_test”的表“ods_tbl_test”的字段脱敏。相应地,员工与数据权限策略之间的映射关系如图4所示。员工A.a 222还未申请任何权限,而员工A.b 221的权限策略ID集为{1,2,3},对应着图3中的三条权限策略。当员工提交Hive任务,基于JDBC的HQL提交模块230会将HQL和员工的身份信息一并发送给Hive数据鉴权代理单元500进行鉴权。HQL鉴权的过程分为以下HQL解析、改写、权限校验和表、字段血缘分析四个步骤,对应技术实现流程如图5所示。技术实现流程图中的HiveConf、SessionState、QueryState、ParseDriver、ASTNode、SemanticAnalyzer、Driver、QueryPlan、HookContext均为Hive提供的Java类。以下的步骤S2-S5将详细介绍图5中的HQL鉴权过程。

步骤S2:HQL解析。

在HQL解析之前,首先需要利用部门与集团大数据集群管理平台100交互的租户keytab(注:keytab文件是kerberos服务器颁发给租户的身份认证票据)进行kerberos认证,从而实现租户之间的数据隔离。认证通过后,创建HiveConf。HiveConf的创建依赖大数据集群管理平台100提供的Hadoop和Hive配置文件。另外,在HiveConf创建的过程中必须设置一些关键参数来实现HQL的行过滤、字段脱敏以及数据鉴权。这些关键参数在图6中有详细说明,其中HQL安全鉴权管理器是本发明提供的Java类,主要作用是进行权限策略拉取以及HQL数据鉴权,也是本发明的技术核心。

HQL解析包括如下子步骤:

S201,利用HiveConf创建SessionState对象,设置SessionState对象的userName为提交HQL的员工账户。

S202,启动SessionState对象,设置当前数据库为部门在大数据集群管理平台申请的Hive数据库,例如步骤S1示例中的“hive_test”,初始化事务管理器。SessionState对象创建和启动后,会在全局范围内有效且保持唯一,它能够与Hadoop进行通信来提交分布式任务,也能够连接Hive的元数据库来查询元数据信息。

S203,依次创建QueryState、Context、ParseDriver对象。调用ParseDriver对象的parse方法将原始HQL解析成为抽象语法树节点(Abstract Syntax Tree Node, ASTNode)。利用Hive的SemanticAnalyzerFactory的get方法生成QueryState和ASTNode对应的SemanticAnalyzer。

S204,调用SemanticAnalyzer的analyze方法对HQL进行解析。

步骤S3:HQL改写。

SemanticAnalyzer在对HQL进行解析的过程中,会通过Hive的TableMask对象对HQL进行行过滤和字段脱敏改写。HQL改写详细过程包括如下子步骤:

S301,对HQL的ASTNode进行遍历和解析,获取表及字段信息;

S302,通过本发明提供的DatablackHiveAuthorizer从数据权限管理中心拉取与SessionState的userName对应的表及字段的行过滤和字段脱敏权限策略,并且调用applyRowFilterAndColumnMasking方法以便TableMask对象正确获取行过滤和字段脱敏表达式;

S303,根据行过滤和字段脱敏表达式对原始HQL的Token流进行改写,将最新HQL的Token流保存在Context对象中。针对步骤S1中的示例,假设员工A.b提交的HQL为“selectid, principal_part, note from ods_tbl_test”,在拉取图3中的权限策略后,TaskMask改写前后的HQL如图7中的(a)所示,改写后的数据查询结果如图7中的(b)所示。通过对比图2和图7中的(b)的表数据,可以看出数据已经按照权限策略进行了行过滤和字段脱敏。具体地说,原本图2中表ods_tbl_test有5行记录。图3中的第1行表及字段数据权限策略赋予了员工A.b对表ods_tbl_test的全字段查询权限。与此同时,图3中第2行行过滤策略使得图7中的(a)改写后HQL相比原始HQL添加了以where开头的过滤条件,最终使得图7中的(b)的查询结果只有图2中最后2行记录,前3行记录因为不满足过滤条件在查询时被过滤。另外,图3中的第3行字段脱敏策略substr(note, 3)(注:从第3字符开始裁剪note字段的数据)被应用到图7中的(a)改写后HQL的note字段,使得图7中的(b)两条记录的note是图2中note的从第三个字符开始的裁剪版本。

步骤S4:HQL权限校验。

基于QueryState、SemanticAnalyzer和HQL,调用Driver的静态doAuthorization方法,实现HQL权限校验。HQL权限校验成功,该方法正常返回,否则,抛出权限校验失败异常。Driver的权限校验底层依赖本发明提供的DatablackHiveAuthorizer类。DatablackHiveAuthorizer类是Hive的HiveAuthorizer接口的实现类,实现了checkPrivileges、applyRowFilterAndColumnMasking和needTransform三个方法。图8展示了Driver权限校验的底层流程细节。Driver的doAuthorization会解析出HQL的HiveOperationType、输入输出HivePrivilegeObject以及认证上下文,然后调用DatablackHiveAuthorizer的checkPrivileges方法。checkPrivileges方法会向数据权限管理中心拉取用户权限策略,解析输入输出HivePrivilegeObject中涉及的表和字段以及操作类型,然后匹配用户权限策略。若所有输入输出HivePrivilegeObject对象都权限校验通过,方法正常返回,否则抛出权限校验失败异常。最终,checkPrivileges方法还会将鉴权审计的详细日志发送给数据权限管理中心,以备审计分析。

步骤S5:HQL表、字段血缘分析。

当HQL权限校验通过后,可以进行HQL表、字段血缘分析。具体包括以下步骤:

S501,基于HiveConf、QueryState、SemanticAnalyzer以及HQL,创建QueryPlan和HookContext对象。

S502,调用本发明提供的Java类ColumnLineageAnalysis的run方法,返回HQL中表、字段血缘关系。ColumnLineageAnalysis是Hive的LineageLogger的继承类,重写了其中的run方法,能够返回HQL的表、字段血缘关系。例如,图7中的(a)中的HQL的表、字段血缘关系如图9所示,也即在图7中的HQL查询结果中,目标字段id,principal_part和note分别来自Hive数据库hive_test中表ods_tbl_test的字段id,principal_part和note,其中id和principal_part是源字段到目标字段的直接映射,而note通过了substr(note, 3)的函数变换。

S503,Hive数据鉴权代理将HQL鉴权结果、改写后的HQL以及表、字段血缘分析结果发送给基于JDBC的HQL提交模块。若HQL鉴权通过,基于JDBC的HQL提交模块会将改写后HQL提交到集团大数据集群管理平台100上去执行。由于Hive数据鉴权代理单元500是针对员工/用户进行数据鉴权,因此能够满足企业内部更细粒度的数据权限控制需求。

本发明关键技术重点包括:1)本发明的技术方案架构设计,如数据权限管理中心、Hive数据鉴权代理和基于JDBC的HQL提交之间的交互逻辑和功能职责;2)本发明提出的基于Hive原生类的HQL解析、改写、鉴权以及表、字段血缘分析的技术实现方案;3)本发明实现的安全鉴权相关的Java类DatablackHiveAuthorizer的checkPrivileges方法逻辑。

其中步骤S3中的HQL解析、改写也可以通过ANTLR4的访问者模式对ASTNode进行遍历,分析HQL中涉及的表、字段资源以及相应的访问方式。但是这种方式的准确度十分有限,不能覆盖复杂的HQL场景,因而通常不能达到生产上线标准。

另一方面,本发明还提供一种细粒度Hive数据权限控制代理层系统,所述系统用于实施根据本发明的细粒度Hive数据权限控制代理层方法。

在本说明书的描述中,参考术语“实施例”、“示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。此外,本领域的技术人员可以在不产生矛盾的情况下,将本说明书中描述的不同实施例或示例以及其中的特征进行结合或组合。

上述内容虽然已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型等更新操作。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号