一种数据查询服务权限的处理方法与流程

文档序号:30598144发布日期:2022-07-01 21:06阅读:180来源:国知局
1.本发明属于数据查询服务权限
技术领域
:,具体涉及一种数据查询服务权限的处理方法。
背景技术
::2.大数据平台对各方数据进行抽取、加载、转化,然后再输出用于业务需要,为此需要一种通用查询的数据服务进行数据查询。然而数据查询涉及到数据权限和数据安全等的问题,在目前大数据行业中并没有统一的解决方案,各种组件都有自身的一套权限验证体系,其中haddoop体系自带有ranger的权限管理,druid数据库和clickhouse数据库则分别在各自系统中单独配置用户权限。对于支持sql查询的oltp系统和olap系统,大数据平台通过rest-api提供统一的数据服务,其权限验证和数据安全实现较为困难。第一,不同存储引擎sql的语法不同,其解析规则也有差异,没有一个屏蔽parse细节的服务;第二,解析出的数据库表字段,没有统一的元数据系统管理,即便是有开源的元数据系统也很难和自己开发的数据服务进行交互;第三,各个开源组件的实现复杂、权限验证模块功能复杂。3.因此,本发明提供了一种数据查询服务权限的处理方法,以至少解决上述部分技术问题。技术实现要素:4.本发明要解决的技术问题是:提供一种数据查询服务权限的处理方法,以至少解决上述部分技术问题。5.为实现上述目的,本发明采用的技术方案如下:一种数据查询服务权限的处理方法包括以下步骤:步骤s1,采集各oltp和olap系统中的元数据并存储至mysql系统中,形成元数据信息;步骤s2,基于客户端的数据查询需求,服务端给各个用户分配不同的元数据查询权限;步骤s3,服务端根据查询需求的sql语言生成抽象语法树,基于广度遍历算法遍历抽象语法树,获取解析后的元数据;步骤s4,服务端根据查询权限进行校验,给客户端返回查询结果。6.进一步地,所述步骤s1中,采集各oltp和olap系统中的元数据包括数据库和数据库表。7.进一步地,所述步骤s1中,元数据存储的逻辑结构包括第一结构表,所述第一结构表包括数据库名称、各数据库中的存储引擎、以及数据库表名称。8.进一步地,所述数据库名称、各数据库中的存储引擎、以及数据库表名称一一对应。9.进一步地,元数据存储的逻辑结构还包括第二结构表,所述第二结构表包括数据库表和各数据库表中的数据库列。10.进一步地,一个所述数据库表对应一个或多个数据库列,数据库表和各数据库表中的数据库列一一对应。11.进一步地,所述步骤s3包括以下过程:步骤s31,服务端获取数据库中存储引擎的类型,生成数据查询需求的sql语言;步骤s32,根据存储引擎的源代码,解析生成抽象语法树;步骤s33,通过广度遍历算法遍历抽象语法树,解析出该数据库下sql语言中数据库表和数据库列的关系;步骤s34,获取数据库、数据库表和数据库列的对应关系,作为解析后的元数据信息;步骤s35,将解析后的元数据信息存储在元数据存储系统中。12.进一步地,所述步骤s31包括以下过程:所述步骤s31包括以下过程:步骤s331,遍历当前节点,获取当前节点的所有子节点;步骤s332,循环遍历当前节点的所有子节点;步骤s333,判断子节点的类型,如果是选择节点并且是第一次处理该选择节点类型,则解析选择节点的孩子节点,解析出sql语言最外层查询的数据库列信息,将数据库列信息放入临时存储list中,然后break当前的分支返回到步骤s332;如果是数据库表名的节点,则解析表名和对应的别名,分别push到数据结构,然后break当前的分支返回到步骤s332;如果是选择节点,从栈中解析出数据库表的名称,然后解析选择节点的孩子节点,解析出相应的一个或多个数据库列信息,形成一条数据库表和对应数据库列的关系,放入临时存储map数据结构中;如果是其它节点,返回到步骤s331直至执行完递归算法;步骤s334,执行完递归算法后,根据临时存储list和数据结构,解析出最外层的数据库表与数据库列的关系。13.进一步地,所述步骤s4中,权限配置系统返回校验结果,如果验证不通过,则给客户端返回无权访问数据的结果;如果验证通过,则在元数据存储系统拉取数据,将验证之后的元数据信息发送给客户端。14.进一步地,所述步骤s2中,数据查询权限的数据结构包括各个用户名、与每个用户名对应的具有查询权限的数据库、以及与每个用户名对应的数据库中具有查询权限的数据库表,将数据查询权限的数据结构存储至权限配置系统中。15.与现有技术相比,本发明具有以下有益效果:本发明设计科学合理,使用方便,解决了现有数据查询中数据权限和数据安全实现困难的技术问题。本发明包括元数据的采集、查询权限的分配、元数据的获取、以及查询权限的校验,以此实现数据通用且安全的输出。本发明最为核心的是元数据的获取,其基于不同开源引擎的源代码,剥离引擎中ast抽象语法树的生成代码,然后此基础上进行二次开发,通过广度遍历算法遍历ast抽象语法树解析出所需的数据库、数据库表和数据库列。而后根据之前分配给用户的元数据查询权限,进行数据权限和数据安全的校验,最终返回查询结果。附图说明16.图1为本发明方法流程图。具体实施方式17.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进一步详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。18.本发明对以下技术名称进行解释:sql是structuredquerylanguage的缩写,是一种结构化查询语言;list是一个计算机专业术语,在编程语言中list是类库中的一个类;break在一些计算机编程语言中是保留字,其作用大多情况下是终止所在层的循环;push指在集合中添加元素,并返回新的长度;栈在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。19.map是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。20.如图1所示,本发明提供的一种数据查询服务权限的处理方法,设计科学合理,使用方便,解决了现有数据查询中数据权限和数据安全实现困难的技术问题。本发明包括以下步骤:步骤s1,采集各oltp和olap系统中的元数据并存储至mysql系统中,形成元数据信息;步骤s2,基于客户端的数据查询需求,服务端给各个用户分配不同的元数据查询权限;步骤s3,服务端根据查询需求的sql语言生成抽象语法树,基于广度遍历算法遍历抽象语法树,获取解析后的元数据;步骤s4,服务端根据查询权限进行校验,给客户端返回查询结果。21.本发明所述步骤s1中,采集各oltp和olap系统中的元数据包括数据库和数据库表。元数据存储的逻辑结构包括第一结构表,所述第一结构表包括数据库名称、各数据库中的存储引擎、以及数据库表名称。元数据存储的逻辑结构还包括第二结构表,所述第二结构表包括数据库表和各数据库表中的数据库列。第一结构表和第一结构表分别如表1和表2所示。22.表1表2其中,所述数据库名称、各数据库中的存储引擎、以及数据库表名称一一对应。一个所述数据库表对应一个或多个数据库列,数据库表和各数据库表中的数据库列一一对应。23.本发明最为核心的是元数据的获取,其基于不同开源引擎的源代码,剥离引擎中ast抽象语法树的生成代码,然后此基础上进行二次开发,通过广度遍历算法遍历ast抽象语法树解析出所需的数据库、数据库表和数据库列。而后根据之前分配给用户的元数据查询权限,进行数据权限和数据安全的校验,最终返回查询结果。24.不同开源组件都遵循ansi-sql国际通用的标准,但是在具体的实现过程中,会更具自身存储引擎的特点,自定义自己的ansi-sql语法规则。上述存储引擎按引擎类型分为三类:第一类为基于hadoop体系统的离线数据仓库,例如hive-sql和druid-sql等;第二类为基于mmp架构的olap的sql引擎,例如trino-sql和clickhouse-sql等;第三类为事务型的关系型数据库,例如mysql-sql和pg-sql等。最后执行的一条sql语句在引擎层面经过解析生成ast抽象语法树,每一个树的节点就是一个astnode节点,每一个节点都有具体的节点类型。以hive-sql为例:包含query_node,其对应的树的根节点;from_node,对应sql语句的from关键字;leftjoin_node对应sql语句中的leftjoin关键字;righjoin_node,对应sql语句中的rightjoin关键字;ableref_node和tablename_node,对应from关键字后面的tablename;whete_node对应sql语句中的where关键字;selexpr_node,对应sql语句中的select关键字;table_or_col_node对应select关键字后面的具体的column。25.本发明通过抽离不同引擎的ast抽象语法树的生成代码,并在此基础上,通过编写的数据库表和数据库列抽取算法,实现sql语句中的table和column信息的解析。具体的算法流程如下:步骤s31,服务端获取数据库中存储引擎的类型,生成数据查询需求的sql语言;步骤s32,根据存储引擎的源代码,解析生成抽象语法树;步骤s33,通过广度遍历算法遍历抽象语法树,解析出该数据库下sql语言中数据库表和数据库列的关系;步骤s34,获取数据库、数据库表和数据库列的对应关系,作为解析后的元数据信息;步骤s35,将解析后的元数据信息存储在元数据存储系统中。26.所述步骤s31包括以下过程:步骤s331,遍历当前节点,获取当前节点的所有子节点;步骤s332,循环遍历当前节点的所有子节点;步骤s333,判断子节点的类型,如果是选择节点并且是第一次处理该选择节点类型,则解析选择节点的孩子节点,解析出sql语言最外层查询的数据库列信息,将数据库列信息放入临时存储list中,然后break当前的分支返回到步骤s332;如果是数据库表名的节点,则解析表名和对应的别名,分别push到数据结构,然后break当前的分支返回到步骤s332;如果是选择节点,从栈中解析出数据库表的名称,然后解析选择节点的孩子节点,解析出相应的一个或多个数据库列信息,形成一条数据库表和对应数据库列的关系,放入临时存储map数据结构中;如果是其它节点,返回到步骤s331直至执行完递归算法;步骤s334,执行完递归算法后,根据临时存储list和数据结构,解析出最外层的数据库表与数据库列的关系。27.本发明所述步骤s2中,数据查询权限的数据结构包括各个用户名、与每个用户名对应的具有查询权限的数据库、以及与每个用户名对应的数据库中具有查询权限的数据库表,将数据查询权限的数据结构存储至权限配置系统中。数据查询权限的数据结构表如表3所示。28.表3本发明具体流程为:用户在客户端提交权限申请工单并生成数据查询需求,然后将数据查询需求发送至服务端,服务端基于不同的数据查询需求给对应的用户分配元数据查询权限,每个元数据查询权限对应具有查询权限元数据。当用户经客户端再次提交查询请求时,服务端获取数据库中存储引擎的类型,并基于不同存储引擎生成相对应的数据查询需求的sql语言,再通过广度遍历算法遍历抽象语法树,解析出该数据库下sql语言中数据库表和数据库列的关系。最后服务端根据查询权限进行校验,给客户端返回查询结果:如果验证不通过,则给客户端返回无权访问数据的结果;如果验证通过,则在元数据存储系统拉取数据,将验证之后的元数据信息发送给客户端。29.本发明将各个复杂的开源组件和权限验证功能由繁化简,经由统一的元数据存储系统实现数据管理,使具有开源的元数据系统用户开发的数据服务进行交互;再基于各存储引擎和对应的解析规则生成sql语言,规避了常用查询的局限性具有数据查询的广泛性和全面性;最后再结合权限管理,是一种通用的安全的数据输出查询方法。30.最后应说明的是:以上各实施例仅仅为本发明的较优实施例用以说明本发明的技术方案,而非对其限制,当然更不是限制本发明的专利范围;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围;也就是说,但凡在本发明的主体设计思想和精神上作出的毫无实质意义的改动或润色,其所解决的技术问题仍然与本发明一致的,均应当包含在本发明的保护范围之内;另外,将本发明的技术方案直接或间接的运用在其他相关的
技术领域
:,均同理包括在本发明的专利保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1