基于hive插件对hive数据权限管控及安全审计方法及系统
技术领域:
:1.本发明涉及计算机、网络通信技术及大数据处理领域,具体涉一种基于hive插件对hive数据权限管控及安全审计方法及系统。
背景技术:
::2.近年来,随着企业数据量爆炸式增长,越来越多的企业运用以hadoop为核心的大数据技术生态来分析处理企业中有价值的数据。进行olap(onlineanalysisprocess,olap)分析后的数据可以方便企业划分用户群体,寻找企业的增长点,提升企业的竞争力。保障企业的数据安全是企业竞争力的最基础的保证,只有通过事前身份验证,事中权限管控和事后安全审计全链路管控,才能保证数据在使用期间的数据安全。3.hive是hadoop生态中最基础的离线分析组件,保障hive数据权限是最基础的方案,现在业内中已经常有的有apachesentry和apacheranger这2种大数据权限管控组件。它们都是通过将插件安装到hive底层,当一个sql请求hive的时候首先通过hive对hql进行解析,将hql拆分成库,表,字段,然后对该hql的请求方进行校验,判断请求方是否拥有该hql的执行权限,若没有权限则抛出异常,最后会把hql鉴权的结果发送到对应的admin客户端上保存下来。4.现有的插件方案对于使用者是非常不方便的,每次创建表后都需要数据管理员在客户端中授予数据开发刚创建表的权限,数据开发才有权限使用该创建表,如果上百个数据开发需要开发上千个任务,那么管理成本就会非常高。若将数据管理员的权限授予数据开发使用,这样数据非常容易泄漏造成安全漏洞。5.本方案是创建表后异步通知admin客户端让表的创建者默认拥有表的全部权限,而数据管理员可以通过变更策略来限制创建者对表的使用权限。后期删除表时候也会通知admin客户端,同步变更策略,防止出现aba问题。(aba问题是指创建一张表,同时授予用户该表权限,后续该表被管理员删除。然后创建相同表名的另一张表,而用户同样拥有新表的权限)。技术实现要素:6.针对现有技术存在的问题,本发明的目的在于提供一种基于hive插件对hive数据权限管控及安全审计方法及系统,用于解决上述存在的问题,使得放开使用权限的同时防止数据泄露,实现数据管控和安全,形成更完善的数据安全体系。7.为实现上述目的,本发明提供一种hive插件对hive数据权限管控及安全审计方法,所述方法包括如下步骤:s1.hive请求通过jdbc连接或odbc连接进入hive集群中,连接到thirft服务器(用于链接管理),然后进去到hive驱动模块中;s2.在hive驱动模块2中,依次进行抽象语法树解析、逻辑优化器优化、物理执行计划生成与优化、权限校验和提交到集群yarn运行;s3.hql执行成功以后,异步通知到admin服务器中;通过antrl4来解析sql,获取hql的操作类型、表和字段;s4.对于操作类型为创建表的情况,则授予创建人全部的表权限;若是操作类型为删除表,则变更表策略去掉策略中被删除的表;s5.更改完策略以后,策略信息保存到mysql中,同时添加标识标记该策略已经变更;hive插件定时拉取策略,根据变更标识来刷新hive插件中缓存。8.进一步,步骤s2中,权限校验是指调用鉴权插件接口来判断用户的操作,鉴权结束需要将审计日志同步到服务器中;鉴权流程包括如下子步骤:s21.检验是否有表的操作权限;s22.校验是否有字段的查询权限;s23.审计权限校验日志。9.进一步,步骤s3中,解析流程包括如下子步骤:s31.使用词法分析器生成token序列;s32.使用语法分析器将token序列串联成ast;通过visitor模式遍历ast解析hql中表节点,字段节点,以及hql对应的操作类型;s33.根据操作类型来判断是否需要变更策略;s34.获取到表的元数据信息,以及策略中原本的字段信息,调整数据库中原本存储的策略。10.进一步,步骤s3中,antrl4通过.g4文件生成了6个基础文件,分别为词法分析器、语法分析器、监听接口、listener默认实现、visitor接口以及visitor默认实现。11.进一步,为了防止admin客户端无法连接,将策略同步保存到磁盘上,若请求不到admin客户端,则从磁盘中读取策略文件,按照权限的最小原则,管控用户对hive数据的使用权限。12.另一方面,本发明提供一种基于hive插件对hive数据权限管控及安全审计系统,所述系统用于实现根据本发明所述的方法,所述系统包括hive请求模块,通过hive请求进入hive驱动模块。13.进一步,hive驱动模块包括hql解析单元、hql优化单元、权限校验单元、物理计划执行单元和提交单元;通过所述hql解析单元进行抽象语法树解析、逻辑优化器优化、理执行计划生成与优化、权限校验和提交到yarn运行。14.进一步,权限校验在在hql解析和hql优化之后;此时hql已经在hive中被拆解成表、字段和操作类型,调用鉴权插件接口来判断用户的操作,鉴权结束将审计日志同步到服务器中。15.进一步,admin服务器中包括antr解析sql单元、元数据获取字段单元、创建表操作添加策略单元和变更表操作修改策略单元。16.进一步,每次hql运行成功后发送kafka记录下来,便于记录数据血缘和元数据操作记录变更。17.本发明通过对运行成功后的hql进行解析,同步变更数据权限中的策略,让数据开发人员更加便捷的开发hive任务,方便用户使用。表删除以及字段删除和变更时候的同步策略,防止出现安全上的漏洞以及制度上的缺失,可以让数据更加安全,快捷的使用。通过对hql执行成功的审计记录,可以帮助企业搭建血缘记录,形成更完善的数据安全体系。附图说明18.图1为根据本发明实施例的一种基于hive插件对hive数据权限管控及安全审计方法及系统的架构设计示意图。具体实施方式19.下面将结合附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。20.在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。21.在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。22.以下结合图1对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。23.如图1所示,根据本发明实施例的基于hive插件对hive数据权限管控及安全审计方法及系统,所述系统包括hive请求模块,通过hive请求进入hive驱动模块,在hive驱动模块中依次进行抽象语法树解析、逻辑优化器优化、物理执行计划生成与优化、权限校验和提交到集群yarn运行。24.hive驱动模块的具体工作流程如下:s100.利用antlr框架定义的预发规则,对hql完成语法解析,将hql转换为抽象语法树ast(abstractsyntaxtree)。25.s200.遍历抽象语法树ast,抽象出查询的基本构成单元查询块(queryblock),查询块为最小查询执行单元,接着遍历查询块,将其转换为操作树(operatortree),可以理解成不可拆分的逻辑执行单元。26.s300.逻辑优化器对操作树进行逻辑优化;具体地,将操作树进行优化,包括分区裁剪、列裁剪和谓词下推。列裁剪就是在查询时只读取需要的列,分区裁剪就是只读取需要的分区。谓词下推(predicatepushdown,ppd)是将sql语句中的where谓词逻辑都尽可能提前执行,减少下游处理的数据量。27.s400.将操作树转换为tasktree,翻译成mr任务,将逻辑执行计划转换为物理执行计划;s500.物理优化器对tasktree进行物理优化,主要是对join的优化,比如join查询时候有一张表是小表(小表指数据量较小的,hive中根据参数hive.auto.convert.join.nonconditionaltask.size来确定小表,一般大小默认25m。大于该数据量的则为大表),那么可以在大表通过map的时候将小表完全放到内存中。hive可以在map端执行连接的过程称之为map-sidejoin。因为hive可以和内存中的小表进行逐一匹配,从而省略掉常规连接操作所需要的reduce过程。即使对于很小的数据集,也会快于常规的连接操作,这样不仅减少了reduce过程,而且有时还可以同时减少map过程的执行步骤。28.现有技术中所使用的流程,每个表都需要进过map(并行处理),shufflesort(分区,排序,规约,分组)和reduce(汇总整理)3个步骤。29.比如执行sql语句:selectu.name,o.orderidfromorderojoinuseruono.uid=u.uid;需要将每个表进行map处理,然后再根据条件重新排序分组,最后汇总整理才能得到结果。30.本发明进行优化后,只需要在map阶段将小表读入内存,顺序扫描大表完成join。这样只需要一个map流程就处理完成,不需要后面的shufflesort以及reduce步骤,大大减少了执行时间,提升了效率。31.s600.对数据库、表和字段进行权限校验;s700.生成最终的执行计划,提交到集群yarn上面进行运行。32.具体地,本系统中,hive驱动模块包括hql解析单元、hql优化单元、权限校验单元、物理计划执行单元和提交单元;通过所述hql解析单元进行抽象语法树解析;所述hql优化单元进行逻辑执行计划生成与优化;提交单元提交到yarn运行。其中权限校验在hql解析和hql优化之后;此时hql已经在hive中被拆解成表、字段和操作类型等详细的信息,需要调用鉴权插件接口来判断用户的操作,鉴权结束需要将审计日志同步到服务器中。鉴权流程如下:首先从权限配置中拉取数据权限策略,数据权限策略的数据一般存储在mysql中,将数据权限根据用户-数据库-表-字段的重新组装成map结构,便于从map中获取到某个用户的权限然后根据session中获取请求的访客(即用户),根据用户获取到该用户的数据权限。33.接着根据已经拆分后的表,字段和操作类型,对照着数据权限策略,对比该用户在数据库中是否拥有权限,在该数据库中的表是否拥有权限。根据查询,删除,创建,编辑等用户权限对比用户是否有操作权限。34.最后,无论是鉴权成功还是失败,都要记录下日志,发送到审计日志中,用于后期对用户行为进行审计判断。35.hql执行成功以后,异步通知到admin服务器中,admin服务器中首先需要通过antrl4来解析sql,获取hql的操作类型、表和字段。所述操作类型主要为表创建、表删除。对于操作类型为创建表的情况,则授予创建人全部的表权限;若是操作类型为删除表,则变更表策略去掉策略中被删除的表。36.具体地,admin服务器中包括antrl解析sql单元、元数据获取字段单元、创建表操作添加策略单元和变更表操作修改策略单元,用于实现上述功能。37.安装在hive中的鉴权插件需要实时拉取admin客户端中的策略,若策略已经变更,需要刷新hive插件的策略信息。为了防止admin客户端无法连接,需要将策略同步保存到磁盘上,若请求不到admin客户端,则从磁盘中读取策略文件,按照权限的最小原则,严格管控用户对hive数据的使用权限,防止出现权限泄漏情况。[0038]本发明中使用antrl4来解析hql中的基础语法。antrl4是解析器生成工具,可用来读取、处理、执行和翻译结构化文本或二进制文件,一般通过在.g4中编写产生式,来生成相应的词法分析器和语法分析器代码。[0039]antrl4通过.g4文件生成了6个基础文件,分别为lexer(词法分析器),parser(语法分析器),listener(监听接口),baselistener(listener默认实现),visitor(visitor接口)以及basevisitor(visitor默认实现)。[0040]解析流程如下:首先使用词法分析器生成token序列:通过词法分析器分析sql中的所有字符,将所有的单词或字符都转化成符合规范的token,规范化的token分为两种类型:1.sql中的关键字,比如select*fromtable_test;语句中关键字就有select,from,*。2.自定义的名称,比如表名称,字段名称,函数名称等然后使用语法分析器将token序列串联成抽象语法树(abstractsyntaxtree),抽象语法树是一种用来描述程序代码语法结构的树形表示方式,语法树的的每一个节点都代表着一个语法结构;本发明中通过visitor模式遍历ast解析hql中表节点,字段节点,以及hql对应的操作类型;需要根据操作类型来判断是否需要变更策略;操作类型为创建表,删除表这2个操作类型需要更改策略,创建表时方便用户操作,需要添加用户对创建表具有全部操作权限(即删除,查询,变更,清空)。删除表是需要更改数据权限策略,需要将该表的策略删除,防止后续创建重复的表名时仍拥有表的权限。[0041]比如某个用户拥有的数据权限策略为{"isneedauth":true,"resource":{"database":"simbatest","tables":[{"columns":["*"],"name":"message","permissions":["drop","alter","truncate","select"]}],"isgrantall":false}}。isneedauth:是否需要鉴权,不需要鉴权则放过,默认需要鉴权。resource指资源,即鉴权的内容。database指的是数据库,放的是数据库的名称。isgrantall指数据库是否具有全量权限,即可以拥有该数据库下全部表的权限。tables是表鉴权信息的列表,里面信息为:name:表名称,columns:字段列表(“*”指的是表中的全部字段),permissions:操作类型权限(现阶段为“drop”删除表权限,“alter”变更表权限,“select”查询表权限,“truncate”清空表权限)。[0042]假设该用户在hive集群中的simbatest数据库新创建一张【tabletest】表。[0043]createtable`simbatest`.`tabletest`(idint,addressstring,phonestring)partitionedby(dsstring)rowformatdelimitedfieldsterminatedby','storedastextfile;在sql执行成功后,通过解析sql获取到信息:数据库为simbatest,表为tabletest,操作类型为创建表【createtable】。需要将该表的【删除,变更,查询,清空】操作权限赋予给创建该表的用户上,需要查询出用户所拥有的数据权限策略,在该数据权限策略中的tables添加信息:{"columns":["*"],"name":"tabletest","permissions":["drop","alter","truncate","select"]},重新组装策略,将策略变更为{"isneedauth":true,"resource":{"database":"simbatest","tables":[{"columns":["*"],"name":"message","permissions":["drop","alter","truncate","select"]},{"columns":["*"],"name":"tabletest","permissions":["drop","alter","truncate","select"]}],"isgrantall":false}}。[0044]更改完策略以后,将策略持久化保存到mysql中,同时添加标识标记该策略已经变更。标识一般存放在redis缓存中,如果策略已经变更则在redis缓存中添加key为isupdate,值为true,失效时间设置为1天。拉取策略后设置isupdate的值为false,意味着策略未发生变动。[0045]hive插件会定时【10s】拉取策略,根据变更标识来判断是否刷新hive插件中缓存,通过缓存可减少数据权限鉴权的时间,提升效率。拉取策略时发现策略已经变动,即根据新的数据权限进行鉴权,这样用户就拥有了刚刚创建的表的权限。[0046]根据本发明实施例的基于hive插件对hive数据权限管控及安全审计方法,所述方法包括如下步骤:s1.hive请求通过jdbc连接或odbc连接进入hive集群中,连接到thirft服务器(用于链接管理),然后进去到hive驱动模块中;s2.在hive驱动模块2中,依次进行抽象语法树解析、逻辑优化器优化、物理执行计划生成与优化、权限校验和提交到yarn运行;s3.hql执行成功以后,异步通知到admin服务器中;通过antrl4来解析sql,获取hql的操作类型、表和字段;s4.对于操作类型为创建表的情况,则授予创建人全部的表权限;若是操作类型为删除表,则变更表策略去掉策略中被删除的表;s5.更改完策略以后,策略信息保存到mysql中,同时添加标识标记该策略已经变更;hive插件定时拉取策略,根据变更标识来刷新hive插件中缓存。[0047]其中步骤s2中,权限校验是指调用鉴权插件接口来判断用户的操作,鉴权结束需要将审计日志同步到服务器中。鉴权流程包括如下子步骤:s21.检验是否有表的操作权限;s22.校验是否有字段的查询权限;s23.审计权限校验日志。[0048]进一步,步骤s3中,解析流程包括如下子步骤:s31.使用词法分析器生成token序列;s32.使用语法分析器将token序列串联成ast;通过visitor模式遍历ast解析hql中表节点,字段节点,以及hql对应的操作类型;s33.根据操作类型来判断是否需要变更策略;本发明通过对运行成功后的hql进行解析,同步变更数据权限中的策略,让数据开发人员更加便捷的开发hive任务,方便用户使用。表创建和表删除的同步策略,防止出现安全上的漏洞以及制度上的缺失,可以让数据更加安全,快捷的使用。[0049]在其他大数据权限管控组件中,审计记录只是记录下操作人,操作行为,sql,数据库,表,字段以及鉴权结果等信息,不知道hql是否真实执行成功。可能会出现在创建名称重复表的时候,数据权限鉴权是成功的,但是实际hq因为表是重复的,导致执行结果是失败的。这种时候元数据的变更记录是不精准。需要记录下hql执行成功的日志记录,这样帮助企业搭建更完善的数据安全体系。[0050]在本说明书的描述中,参考术语“实施例”、“示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。此外,本领域的技术人员可以在不产生矛盾的情况下,将本说明书中描述的不同实施例或示例以及其中的特征进行结合或组合。[0051]上述内容虽然已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型等更新操作。当前第1页12当前第1页12