CN114861229B - 一种Hive动态脱敏方法及系统 - Google Patents

一种Hive动态脱敏方法及系统 Download PDF

Info

Publication number
CN114861229B
CN114861229B CN202210639407.3A CN202210639407A CN114861229B CN 114861229 B CN114861229 B CN 114861229B CN 202210639407 A CN202210639407 A CN 202210639407A CN 114861229 B CN114861229 B CN 114861229B
Authority
CN
China
Prior art keywords
hive
query
hql
desensitization
sub
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210639407.3A
Other languages
English (en)
Other versions
CN114861229A (zh
Inventor
卢薇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Bizhi Technology Co ltd
Original Assignee
Hangzhou Bizhi Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou Bizhi Technology Co ltd filed Critical Hangzhou Bizhi Technology Co ltd
Priority to CN202210639407.3A priority Critical patent/CN114861229B/zh
Publication of CN114861229A publication Critical patent/CN114861229A/zh
Application granted granted Critical
Publication of CN114861229B publication Critical patent/CN114861229B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • G06F21/6245Protecting personal data, e.g. for financial or medical purposes
    • G06F21/6254Protecting personal data, e.g. for financial or medical purposes by anonymising data, e.g. decorrelating personal data from the owner's identification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/248Presentation of query results
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Medical Informatics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Operations Research (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种Hive动态脱敏方法和系统,基于敏感数据发现和字段血缘解析来实现,所述方法包括以下步骤:步骤S1:HQL语法树解析,对提交的HQLs进行逐个解析,生成对应的抽象语法树节点;步骤S2:通过正则表达式以及语法树结构特征判断HQL是否是查询语句;步骤S3:被判定为是查询语句时,HQL字段血缘解析;步骤S4:对Hive JDBC ResultSet实现类中获取列值的方法进行改写,完成脱敏处理。本发明的方法和系统能够实现基于敏感数据发现和字段血缘解析的透明化、自动化动态脱敏,有效提高实际生产环境中数据的安全性。

Description

一种Hive动态脱敏方法及系统
技术领域
本发明涉及计算机网络及数据处理技术领域,尤其是涉及一种基于敏感数据发现和字段血缘解析的Hive动态脱敏方法及系统。
背景技术
近年来,随着互联网的快速发展,企业数据呈现爆炸性地增长趋势。数据智能成为企业保持核心竞争力的关键。数据中台战略是企业打通数据孤岛,实现“业务数据化和数据业务化”的必然选择。与此同时,数据中台离不开以Hadoop为核心的大数据技术生态支撑。其中,Hive是数据中台建设离线数仓、进行OLAP(Online Analysis Process, OLAP)分析的必要工具。它能够为业务开发人员屏蔽大数据底层复杂的分布式计算编程框架,如MapReduce、弹性分布式数据集(Resillient Distributed Dataset, RDD)等,提供一种被称为HiveQL或HQL的SQL方言,来查询存储在Hadoop集群中的海量数据。然而,新的数据存储和分析模型对传统建立在关系型数据库基础上的数据安全系统提出了变革性挑战。
数据安全必须覆盖数据的整个生命周期,如数据产生、存储、传输、使用、共享以及销毁。在每一个环节都需要面向不同开发人员提供安全的数据接入。因此,数据安全必须借助多种技术手段实现,其中数据脱敏是必不可少。数据脱敏可以在数据传输、共享和展示时通过对敏感信息进行脱敏处理来防止用户隐私数据、商业机密等敏感信息泄露。针对不同的场景,数据脱敏可以分为静态脱敏和动态脱敏。静态脱敏适用于数据脱离生产环境进行共享和迁移场景,在数据迁移过程中对敏感数据进行脱敏替换;动态脱敏适用于数据不脱离生产环境对敏感数据查询进行展示脱敏,即“边脱敏,边使用”。作为大数据查询引擎,为Hive赋予动态脱敏能力是数据中台数据安全架构建设中必须要进行的技术创新。
目前企业常用的Hive脱敏实现,如大数据权限管控组件Apache Ranger的基于策略的字段脱敏,大多是基于Hive提供的自定义函数(User Defined Function, UDF)相关接口,通过在查询字段上添加具有脱敏功能的UDF来实现。这一类脱敏实现方案存在以下问题:1)HQL查询必须精确到字段级别,对于“select *”这类查询操作,必须对“*”进行字段拆分,然后将脱敏UDF函数应用到具体需要脱敏的字段上,这一方面给编写业务SQL带来不便,另一方面使得原本可以通过“select *”来避免触发MapReduce任务变得不可行,增加了HQL查询执行的复杂度。2)脱敏UDF函数必须人工应用到字段,无法实现自动化动态脱敏。
综上,在以数据服务能力作为核心的数据中台上,为其必不可少的大数据查询引擎Hive提供基于敏感数据发现和字段血缘解析的透明化、自动化动态脱敏方案是十分必要的。这里,透明化是指敏感字段的脱敏无需人工参与,而自动化是指字段一旦被识别为敏感就会在HQL查询中自动脱敏展示。
发明内容
针对现有技术存在的问题,本发明的目的在于提供一种Hive动态脱敏方法及系统,能够实现基于敏感数据发现和字段血缘解析的透明化、自动化动态脱敏,有效提高实际生产环境中数据的安全性。
为实现上述目的,本发明提供一种Hive动态脱敏方法,所述方法基于敏感数据发现和字段血缘解析来实现,包括以下步骤:
步骤S1:HQL语法树解析,对提交的HQLs进行逐个解析,生成对应的抽象语法树节点;
步骤S2:通过正则表达式以及语法树结构特征判断HQL是否是查询语句;
步骤S3:被判定为是查询语句时,HQL字段血缘解析;
步骤S4:对Hive JDBC ResultSet实现类中获取列值的方法进行改写,完成脱敏处理。
进一步,步骤S1中,HQL语法树解析利用Hive提供的ParseDriver对HQL进行解析,得到相应的ASTNode。
进一步,步骤S2中,判断HQL为查询语句的ASTNode的充分必要条件如下:从ASTNode的根出发,其0号子节点必须为TOK_QUERY类型,并且TOK_QUERY子节点必须包含一个TOK_INSERT类型的子节点,该节点的子树索引序列0→0→0对应的Token类型必须为TOK_DESTINATION→TOK_DIR→TOK_TMP_FILE。
进一步,步骤S2中,在一个HQL被判定为查询语句的情况下,进入步骤S3;若一个HQL被判定为非查询语句,则直接交由HiveJDBC提交到HiveServer2上去执行。
进一步,步骤S3中,HQL字段血缘解析包括以下步骤:
S31.通过字符串匹配和字符串替换方式将HQL调整为以select开头;
S32.改写HQL为“insert overwrite table temp + HQL”的形式;
S33.利用ParseDriver对改写后的HQL进行抽象语法树解析,获得ASTNode;
S34.对步骤S33中生成的ASTNode进行左递归遍历,收集输入表、输出表、子查询、列集信息,最终获得“temp”表与HQL中输入表的字段血缘关系;当节点为以下几种类型的特殊节点时要进行相应的信息收集:
当节点为TOK_TABREF类型时,获取其子节点所对应的表,将其加入输入表集合,并将子查询对象添加到子查询列表和子查询映射表中;
当节点为TOK_SELEXPR类型时,若其子节点为TOK_ALLCOLREF,则代表查询输入表所有列,输入表可以从最新的子查询映射表中通过键值获取,将所有键关联的子查询的列集进行汇聚,作为目标表的列集,存到全局列集中,供父查询引用,若最新子查询列集为空,查看子查询键值所对应的表是否在全局输入表集中,通过Hive Meta的客户端查询表的列元数据作为列集;
当节点为TOK_SUBQUERY类型时,创建子查询对象,以其1号子节点作为当前表,并且将当前全局列集设为子查询对象的列集,之后清空全局列集,将子查询对象插入子查询列表中,然后清除子查询映射表中除与自己有相同父查询之外的其它子查询,并添加子查询列表中与自己有相同父查询的子查询;
当节点为TOK_TAB类型时,将其子节点所对应的表加入输出表。
当ASTNode遍历完成后,对收集的输入表、全局列集以及输出表进行表字段血缘分析,得出表字段血缘关系图。
进一步,步骤S4中,对Hive JDBC ResultSet实现类中的getString(intcolumnIndex)获取列值的方法进行改写,改写的流程包括如下步骤:
S41.根据columnIndex在表字段血缘关系图中获取结果字段所对应的来源表和字段;
S42.根据来源表和字段向动态脱敏规则管理模块查询关联的动态脱敏规则;
S43.根据动态脱敏规则对结果字段的值进行脱敏替换。
进一步, Hive动态脱敏还可以利用Hive的安全认证机制提供的接口,自定义实现类将敏感数据识别结果和动态脱敏规则组合起来对查询操作时的敏感字段添加对应的脱敏表达式。
另一方面,本发明提供一种Hive动态脱敏系统,所述系统基于敏感数据发现和字段血缘解析来实现,所述系统用于实现根据本发明所述的Hive动态脱敏方法,所述系统包括敏感数据发现单元、Hive动态脱敏单元和动态脱敏规则管理单元。
进一步,所述系统通过敏感数据发现单元中的数据分级分类模块定义数据的安全等级和安全类别,所述安全等级包括公开、秘密、私密、机密和绝密,所述安全类别包括身份证或手机号等;然后将安全类别与安全等级进行关联,继而识别规则管理模块为每一种安全类别设置基于正则的敏感字段识别规则;规则开启生效后,通过敏感数据识别任务获取Hive表元数据以及表的抽样数据,敏感数据识别模块利用规则进行敏感数据识别,识别结果最终由敏感数据管理模块进行统一管理,其中记录了Hive表、字段、安全类别之间的映射关系。
进一步,所述动态脱敏规则管理单元中为每一种安全类别定义动态脱敏方案,所述动态脱敏方法包括适合字符类型的哈希脱敏、遮盖脱敏、和顺序重排,适合数值类型的数值取整和比特移位,以及适合日期和布尔类型的日期取整和随机替换。
本发明提出的基于敏感数据发现和字段血缘解析的Hive动态脱敏方法和系统,同时解决敏感数据发现、脱敏规则、自动化动态脱敏三大核心问题;通过基于正则的识别规则进行敏感数据发现技术;基于数据类型的动态脱敏规则设计;实现不侵入大数据集群的Hive动态脱敏方案,能够有效提高实际生产环境中数据的安全性。
附图说明
图1示出了根据本发明实施例中Hive动态脱敏方案的方法和系统的设计架构示意图;
图2示出了根据本发明实施例中创建敏感字段识别规则示意图;
图3示出了根据本发明实施例中Hive表safe_test的元数据和内容示意图;
图4示出了根据本发明实施例中Hive表safe_test敏感字段识别结果示意图;
图5示出了根据本发明实施例中创建动态脱敏规则示意图;
图6示出了根据本发明实施例中Hive表safe_test预期查询结果示意图;
图7示出了根据本发明实施例中HQL为查询语句的ASTNode充分必要条件的结构示意图;
图8示出了根据本发明实施例中HQL的ASTNode结构示意图;
图9示出了根据本发明实施例中HQL的字段血缘分析结果示意图;
图10示出了根据本发明实施例中目标表temp数据的示意图。
具体实施方式
下面将结合附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
目前已有的Hive动态脱敏方案中,大部分基于Hive提供的UDF接口,需要人工参与如下内容:1)自定义脱敏替换相关的UDF函数;2)将UDF函数作为永久函数注册到Hive Meta中;3)在HQL中为查询字段添加相应的脱敏UDF函数。众所周知,一旦涉及到人工参与就会涉及到数据安全和处理效率问题。业务开发人员是Hive动态脱敏防止用户隐私数据、商业机密等敏感信息泄漏的第一道关卡。这也就是说,业务开发人员是实际写业务HQL的,但是将UDF函数作用于脱敏字段的必须由安全相关的管理人员来处理。安全管理人员需要拦截业务开发人员的HQL,将脱敏UDF添加到HQL的敏感字段上,然后提交到HiveServer2上执行查询。自动化是Hive动态脱敏方案能否在实际生产环境中大规模应用的关键,例如大数据权限管控组件Apache Ranger基于策略的字段脱敏方案由于人工配置限制不能大规模应用于线上动态脱敏需求。Hive动态脱敏技术必须与敏感数据的自动发现技术绑定在一起,然后实现自动化,才能适应数据中台实际生产环境,两者缺一不可。然而,现有的Hive动态脱敏方案对于如何进行敏感数据发现以及如何自动化动态脱敏这两大关键问题没有给出明确的方案。本发明提出一种基于敏感数据发现和字段血缘解析的Hive动态脱敏方法及系统,同时解决敏感数据发现、脱敏规则、自动化动态脱敏三大核心问题,真正意义上满足实际生产环境中的安全需求。
以下结合附图1-10对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
图1为本发明的总体技术方案设计架构图。如图1下半部分所示,Hive提供多种交互方式,其中包括Hive命令行接口(Command Line Interface, CLI),Hive网页接口(HiveWeb Interface, HWI)以及基于Thrift服务器的JDBC/ODBC。来自这些交互方式的所有HQL都会进入到Hive驱动模块进行抽象语法树解析、逻辑执行计划生成与优化、物理执行计划的生成与优化等几大阶段,最终被转换为MapReduce或者Spark作业提交到Hadoop Yarn上去执行。本发明提供的基于敏感数据发现和字段血缘解析的Hive动态脱敏系统包括敏感数据发现单元1、Hive动态脱敏单元2以及动态脱敏规则管理单元3。其中,Hive动态脱敏是针对Hive JDBC交互方式设计的。
在敏感数据发现单元1中,首先数据分级分类模块11定义数据的安全等级和安全类别,所述安全等级包括公开、秘密、私密、机密和绝密,所述安全类别包括身份证、手机号、邮箱等;然后将安全类别与安全等级进行关联,比如将身份证的安全等级设为私密。继而识别规则管理模块12为每一种安全类别设置基于正则的敏感字段识别规则,如图2所示。规则开启生效后,通过周期的敏感数据识别任务获取Hive表元数据以及表的抽样数据,如图3所示的表safe_test及其元数据和内容,敏感数据识别模块13利用规则进行敏感数据识别,识别结果最终由敏感数据管理模块14进行统一管理,其中记录了Hive表、字段和安全类别之间的映射关系。如图4所示,此表中的结果是敏感数据识别任务将图2创建的识别规则应用到图3表数据后获得的。
与此同时,在动态脱敏规则管理单元3中,为每一种安全类别定义动态脱敏方案,所述动态脱敏方法包括适合字符类型的哈希脱敏、遮盖脱敏、顺序重排,适合数值类型的数值取整和比特移位,以及适合日期和布尔类型的日期取整和随机替换。针对图4中的识别结果,图5创建了相应安全类别的动态脱敏规则。一旦某一个安全类别的动态脱敏规则被开启生效后,通过Hive JDBC提交的所有查询任务,只要涉及该安全类别的敏感字段查询,都会在查询结果中得到按照相应脱敏规则处理后的字段脱敏结果,图3中通过“select * fromsafe_test”表查询HQL的预期结果如图6所示,其中idcard,phone,email等敏感字段的数据均被脱敏替换。
敏感数据发现单元1和动态脱敏规则管理单元3是实现自动化Hive动态脱敏的前置功能。Hive动态脱敏单元2包含字段血缘解析模块21、基于JDBC的HQL提交模块22和结果脱敏处理模块23。字段血缘解析模块21对HQL进行语法树解析、判断是否是查询HQL以及查询HQL输出表字段与源表字段之间的血缘关系。基于字段血缘解析模块21、结果脱敏处理模块23对查询结果敏感字段按照字段所属的安全类别所关联的脱敏规则进行脱敏替换处理,并返回给Hive任务的提交者。字段血缘解析模块21和结果脱敏处理模块23是本发明的两大主要创新点。
根据本发明实施例基于敏感数据发现和字段血缘解析的Hive动态脱敏的方法流程如下:
步骤S1:HQL语法树解析
如图1所示,当一个Hive任务提交时,首先需要对提交的HQLs进行逐个解析,生成对应的抽象语法树节点(Abstract Syntax Tree Node, ASTNode)。HQL语法树解析可以有多种方式。一种比较原始的方式是利用ANTRL4和Hive的g4语法文件,进行代码生成得到HQL词法/语法解析器,继而利用生成的HQL词法/语法解析器对提交的HQLs进行逐个抽象语法树解析。本发明优选第二种方式,即利用Hive提供的ParseDriver对HQL进行解析,得到相应的ASTNode。
步骤S2:判断HQL是否是查询语句
在不借助ASTNode的情况下,可以通过正则表达式来初步判断HQL是否是查询语句,比如以“select”关键字开头,其中包含“from”,可以确定HQL是查询语句。但是,这种方式不能覆盖所有的查询场景,只能作为一种快速查询语句判定方案。HQL为查询语句的ASTNode的充分必要条件如图7箭头所示部分。从ASTNode的根出发,其0号子节点必须为TOK_QUERY类型,并且TOK_QUERY子节点必须包含一个TOK_INSERT类型的子节点,该节点的子树索引序列0→0→0对应的Token类型必须为TOK_DESTINATION→TOK_DIR→TOK_TMP_FILE。
在一个HQL被判定为查询语句的情况下,进入步骤S3。如果一个HQL被判定为非查询语句,则直接交由HiveJDBC提交到HiveServer2。HiveServer2会首先通过Hive驱动对HQL进行解析、编译、执行计划优化,然后将执行计划翻译为MapReduce或Spark作业提交到Hadoop Yarn上分布式并行执行HQL逻辑,最终将执行结果返回给Hive JDBC,结果无需进行脱敏处理。
步骤S3:HQL字段血缘解析
HQL字段血缘解析依赖Hive Meta和ASTNode。当HQL在步骤S2中被判定为查询语句时,需要进行如下操作:
S31.通过字符串匹配和字符串替换等方式将HQL调整为以select开头。
S32.改写HQL为“insert overwrite table temp + HQL”的形式,比如HQL为“select * from safe_test”,改写后的HQL为“insert overwrite table temp select *from safe_test”。这样做的目的是以temp为目标表,分析它的字段与原始HQL中输入表(如safe_test)及其字段(如*)之间的血缘关系。对于with as开头的HQL语句,需要将with as中的子查询语句替换select部分的引用表。比如“with t1 as (select addressid fromaddress), t2 as (select city from address) select * from t1,t2”,需要调整为“select * from (select addressid from address) t1, (select city from address)t2”,然后添加“insert overwrite table temp”。需要注意的是,表名“temp”不是必须的,只要不与Hive中表名冲突即可。
S33.利用ParseDriver对改写后的HQL进行抽象语法树解析,获得ASTNode。
S34.对步骤S33中生成的ASTNode进行左递归遍历,收集输入表、输出表、子查询、列集等信息,最终获得目标表temp与HQL中输入表的字段血缘关系。下面以一个相对语法复杂的查询HQL“select phone, idcard from safe_test join (select * from (select 1as col2) newt2) newt”为例解释血缘解析的过程,其中表safe_test为图3中的表。
改写后的HQL为“insert overwrite table temp select phone, idcard fromsafe_test join (select * from (select 1 as col2) newt2) newt”,对应的ASTNode如图8所示。对ASTNode进行左递归节点遍历,当节点为以下几种类型的特殊节点时要进行相应的信息收集:
TOK_TABREF:获取其子节点所对应的表,将其加入输入表集合,比如safe_test,然后以表名作为键,创建子查询对象作为值,存入子查询映射表中供后续引用(注:一个子查询对象包含当前表、子查询ID, 父查询ID,子查询下关联的列集)。与此同时,将子查询对象添加到子查询列表中;
TOK_SELEXPR:如果其子节点为TOK_ALLCOLREF,则代表查询输入表所有列,输入表可以从最新的子查询映射表中通过键值获取,将所有键关联的子查询的列集进行汇聚,作为目标表的列集,存到全局列集中,供父查询引用。如果最新子查询列集为空,查看子查询键值所对应的表是否在全局输入表集中,如果在,通过Hive Meta的客户端查询表的列元数据,作为列集。列集中每一列对象包含来源表名和列名、目标表名和列名等信息。目标表可以通过其伯父TOK_INSERT分支下的叶子节点获得,如TOK_TMP_FILE,代表目标表待定。如果其0号子节点为其它情况,如示例图中1和TOK_TABLE_OR_COL,则创建列对象,并且将列对象存储在全局列集合中,供后续父查询引用。
TOK_SUBQUERY:创建子查询对象,以其1号子节点作为当前表,并且将当前全局列集设为子查询对象的列集,之后清空全局列集,将子查询对象插入子查询列表中,然后清除子查询映射表中除与自己有相同父查询之外的其它子查询,并添加子查询列表中与自己有相同父查询的子查询。比如当经过newt2子查询时,会清空子查询映射表中safe_test相关的记录,将col2作为newt2子查询的列集,清空全局列集,将newt2子查询添加到子查询映射表和子查询列表。当经过newt子查询时,会清空子查询映射表中newt2子查询,将其newt2所拥有的列集{col2}作为newt子查询的列集(因为newt和newt2是父子关系),清空全局列集,将newt子查询添加到子查询列表以及子查询映射表,并且重新将子查询safe_test添加进子查询映射表中,这是因为safe_test和newt有相同的父查询。
TOK_TAB:将其子节点所对应的表加入输出表,比如temp。
当ASTNode遍历完成后,对收集的输入表、全局列集以及输出表进行表字段血缘分析。因为列集中的每一列包含来源表、来源字段、目标表和目标字段信息(注:如果目标表为TOK_TMP_FILE,用输出表temp代替),可以通过列集,得出如图9所示的表字段血缘关系图,即目标表temp的第0列phone和第1列idcard分别来自safe_test的第3列phone和第2列idcard。
步骤S4:结果脱敏处理
对Hive JDBC ResultSet实现类中的getString(int columnIndex)等获取列值的方法进行改写。传统这些获取列值的方法是直接将Hive返回的列值进行类型转换后返回。改写的流程如下:
S41.根据columnIndex在表字段血缘关系图中获取结果字段所对应的来源表和字段;
S42.根据来源表和字段向动态脱敏规则管理单元3查询关联的动态脱敏规则,比如根据图4和5,safe_test的第3列phone关联了一项顺序重排脱敏规则,第2列idcard关联了一项SHA256哈希脱敏规则;
S43.根据动态脱敏规则对结果字段的值进行脱敏替换,最终temp表的数据如图10所示,其中phone被顺序重排,idcard被SHA256哈希替换。
进一步, Hive动态脱敏还可以利用Hive的安全认证机制提供的接口,自定义实现类将敏感数据识别结果和动态脱敏规则组合起来对查询操作时的敏感字段添加脱敏UDF,脱敏UDF需要提前手动注册到Hive Meta中。
本发明提出一种基于敏感数据发现和字段血缘解析的Hive动态脱敏方法,同时解决敏感数据发现、脱敏规则、自动化动态脱敏三大核心问题,真正意义上满足实际生产环境中的安全需求。本发明有四大技术优势:1)本发明的总体技术方案架构设计同时解决敏感数据发现、脱敏规则、自动化动态脱敏三大核心问题;2)通过正则识别规则进行敏感数据发现技术;3)基于数据类型的动态脱敏规则设计;4)不侵入大数据集群的Hive动态脱敏方案实现。
针对上述四大关键点,本发明的重点技术在于:1)本发明的总体技术方案架构设计,如敏感数据发现、动态脱敏规则和Hive动态脱敏之间的交互逻辑和功能职责;2)判断HQL是否是查询HQL的充分必要条件;3)HQL表字段血缘解析方案中对with as和非select开头HQL进行改写和添加“insert overwrite table temp”等手段;4)基于ParseDriver获取HQLASTNode以及对ASTNode左递归遍历生成表字段血缘方案;5)对HiveJDBCResultSet类的getString(int columnIndex)等获取字段值方法进行重写的结果脱敏处理方案。
在本说明书的描述中,参考术语“实施例”、“示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。此外,本领域的技术人员可以在不产生矛盾的情况下,将本说明书中描述的不同实施例或示例以及其中的特征进行结合或组合。
上述内容虽然已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型等更新操作。

Claims (9)

1.一种Hive动态脱敏方法,所述方法基于敏感数据发现和字段血缘解析来实现,其特征在于,所述方法包括以下步骤:
步骤S1:HQL语法树解析,对提交的HQLs进行逐个解析,生成对应的抽象语法树节点;
步骤S2:通过正则表达式以及语法树结构特征判断HQL是否是查询语句;
步骤S3:被判定为是查询语句时,HQL字段血缘解析;
步骤S4:对Hive JDBC ResultSet实现类中获取列值的方法进行改写,完成脱敏处理;
步骤S3中,HQL字段血缘解析包括以下步骤:
S31.通过字符串匹配和字符串替换方式将HQL调整为以select开头;
S32.改写HQL为“insert overwrite table temp+HQL”的形式;
S33.利用ParseDriver对改写后的HQL进行抽象语法树解析,获得ASTNode;
S34.对步骤S33中生成的ASTNode进行左递归遍历,收集输入表、输出表、子查询、列集信息,最终获得“temp”表与HQL中输入表的字段血缘关系;当节点为以下几种类型的特殊节点时要进行相应的信息收集:
当节点为TOK_TABREF类型时,获取其子节点所对应的表,将其加入输入表集合,并将子查询对象添加到子查询列表和子查询映射表中;
当节点为TOK_SELEXPR类型时,若其子节点为TOK_ALLCOLREF,则代表查询输入表所有列,输入表可以从最新的子查询映射表中通过键值获取,将所有键关联的子查询的列集进行汇聚,作为目标表的列集,存到全局列集中,供父查询引用,若最新子查询列集为空,查看子查询键值所对应的表是否在全局输入表集中,通过Hive Meta的客户端查询表的列元数据作为列集;
当节点为TOK_SUBQUERY类型时,创建子查询对象,以其1号子节点作为当前表,并且将当前全局列集设为子查询对象的列集,之后清空全局列集,将子查询对象插入子查询列表中,然后清除子查询映射表中除与自己有相同父查询之外的其它子查询,并添加子查询列表中与自己有相同父查询的子查询;
当节点为TOK_TAB类型时,将其子节点所对应的表加入输出表;
当ASTNode遍历完成后,对收集的输入表、全局列集以及输出表进行表字段血缘分析,得出表字段血缘关系图。
2.根据权利要求1所述的Hive动态脱敏方法,其特征在于,步骤S1中,HQL语法树解析利用Hive提供的ParseDriver对HQL进行解析,得到相应的ASTNode。
3.根据权利要求2所述的Hive动态脱敏方法,其特征在于,步骤S2中,判断HQL为查询语句的ASTNode的充分必要条件如下:从ASTNode的根出发,其0号子节点必须为TOK_QUERY类型,并且TOK_QUERY子节点必须包含一个TOK_INSERT类型的子节点,该节点的子树索引序列0→0→0对应的Token类型必须为TOK_DESTINATION→TOK_DIR→TOK_TMP_FILE。
4.根据权利要求3所述的Hive动态脱敏方法,其特征在于,步骤S2中,在一个HQL被判定为查询语句的情况下,进入步骤S3;若一个HQL被判定为非查询语句,则直接交由Hive JDBC提交到HiveServer2上去执行。
5.根据权利要求4所述的Hive动态脱敏方法,其特征在于,步骤S4中,对Hive JDBCResultSet实现类中的getString(int columnIndex)获取列值的方法进行改写,改写的流程包括如下步骤:
S41.根据columnIndex在表字段血缘关系图中获取结果字段所对应的来源表和字段;
S42.根据来源表和字段向动态脱敏规则管理模块查询关联的动态脱敏规则;
S43.根据动态脱敏规则对结果字段的值进行脱敏替换。
6.根据权利要求5所述的Hive动态脱敏方法,其特征在于,Hive动态脱敏还可以利用Hive的安全认证机制提供的接口,自定义实现类将敏感数据识别结果和动态脱敏规则组合起来对查询操作时的敏感字段添加对应的脱敏表达式。
7.一种Hive动态脱敏系统,所述系统基于敏感数据发现和字段血缘解析来实现,其特征在于,所述系统用于实现根据权利要求1-6任一项所述的Hive动态脱敏方法,所述系统包括敏感数据发现单元、Hive动态脱敏单元和动态脱敏规则管理单元。
8.根据权利要求7所述的Hive动态脱敏系统,其特征在于,所述系统通过敏感数据发现单元中的数据分级分类模块定义数据的安全等级和安全类别,所述安全等级包括公开、秘密、私密、机密和绝密,所述安全类别包括身份证或手机号等;然后将安全类别与安全等级进行关联,继而识别规则管理模块为每一种安全类别设置基于正则的敏感字段识别规则;规则开启生效后,通过敏感数据识别任务获取Hive表元数据以及表的抽样数据,敏感数据识别模块利用规则进行敏感数据识别,识别结果最终由敏感数据管理模块进行统一管理,其中记录了Hive表、字段、安全类别之间的映射关系。
9.根据权利要求7或8所述的Hive动态脱敏系统,其特征在于,所述动态脱敏规则管理单元中为每一种安全类别定义动态脱敏方案,所述动态脱敏方法包括适合字符类型的哈希脱敏、遮盖脱敏、和顺序重排,适合数值类型的数值取整和比特移位,以及适合日期和布尔类型的日期取整和随机替换。
CN202210639407.3A 2022-06-08 2022-06-08 一种Hive动态脱敏方法及系统 Active CN114861229B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210639407.3A CN114861229B (zh) 2022-06-08 2022-06-08 一种Hive动态脱敏方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210639407.3A CN114861229B (zh) 2022-06-08 2022-06-08 一种Hive动态脱敏方法及系统

Publications (2)

Publication Number Publication Date
CN114861229A CN114861229A (zh) 2022-08-05
CN114861229B true CN114861229B (zh) 2023-03-28

Family

ID=82624153

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210639407.3A Active CN114861229B (zh) 2022-06-08 2022-06-08 一种Hive动态脱敏方法及系统

Country Status (1)

Country Link
CN (1) CN114861229B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115203750B (zh) * 2022-09-19 2022-12-16 杭州比智科技有限公司 基于Hive插件对Hive数据权限管控及安全审计方法及系统

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10055444B2 (en) * 2015-12-16 2018-08-21 American Express Travel Related Services Company, Inc. Systems and methods for access control over changing big data structures
CN110532797A (zh) * 2019-07-24 2019-12-03 方盈金泰科技(北京)有限公司 大数据的脱敏方法和系统
CN110555032A (zh) * 2019-09-09 2019-12-10 北京搜狐新媒体信息技术有限公司 一种基于元数据的数据血缘关系分析方法及系统
CN110909016B (zh) * 2019-10-12 2023-06-16 中国平安财产保险股份有限公司 基于数据库的重复关联检测方法、装置、设备及存储介质
CN111177788A (zh) * 2020-01-07 2020-05-19 北京启明星辰信息安全技术有限公司 Hive的动态脱敏方法及动态脱敏系统
CN113343299A (zh) * 2021-06-18 2021-09-03 浪潮云信息技术股份公司 Hive数据库动态脱敏系统及实现方法
CN113672628A (zh) * 2021-10-22 2021-11-19 中航金网(北京)电子商务有限公司 数据血缘分析方法、终端设备及介质
CN114329082A (zh) * 2021-11-19 2022-04-12 海纳致远数字科技(上海)有限公司 一种基于hugegraph的数据血缘关系分析方法和系统

Also Published As

Publication number Publication date
CN114861229A (zh) 2022-08-05

Similar Documents

Publication Publication Date Title
US20130006968A1 (en) Data integration system
CN110837492B (zh) 一种多源数据统一sql提供数据服务的方法
US7716170B2 (en) Holistic dynamic information management platform for end-users to interact with and share all information categories, including data, functions, and results, in collaborative secure venue
US7885983B2 (en) Apparatus and method for producing a virtual database from data sources exhibiting heterogeneous schemas
WO1999000745A1 (en) Data repository with user accessible and modifiable reuse criteria
US11449508B2 (en) Serverless data lake indexing subsystem and application programming interface
CN113157723B (zh) 一种面向Hyperledger Fabric的SQL访问方法
CN103559189A (zh) 基于元数据集成模型的电力仿真培训资源管理系统及方法
Vajk et al. Automatic NoSQL schema development: A case study
CN109902101A (zh) 基于SparkSQL的透明分区方法及装置
CN114861229B (zh) 一种Hive动态脱敏方法及系统
CN113282599A (zh) 数据同步方法及系统
Vanier et al. Advanced MySQL 8: Discover the full potential of MySQL and ensure high performance of your database
Dombrovskaya et al. PostgreSQL Query Optimization
Kvet et al. Master index access as a data tuple and block locator
CN117421302A (zh) 一种数据处理方法及相关设备
EP2365448A1 (en) Data integration system
CN117873970A (zh) 计算机实现文档的基于关系显示
Pottinger Mapping-based merging of schemas
CN113221528A (zh) 基于openEHR模型的临床数据质量评估规则的自动生成与执行方法
Powell Oracle high performance tuning for 9i and 10g
Cheney Provenance, XML and the scientific web
Meimaris Managing, querying and analyzing big data on the web
Laadidi et al. Simplification of owl ontology sources for data warehousing
Cerjan et al. Implementing domains in Neo4j

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant