首页 / 专利库 / 银行与财务事项 / 别名映射 / 用于控制数据查询的方法和装置

用于控制数据查询的方法和装置

阅读:116发布:2020-05-21

专利汇可以提供用于控制数据查询的方法和装置专利检索,专利查询,专利分析的服务。并且本 申请 实施例 公开了用于控制数据查询的方法和装置。该方法的一具体实施方式包括:基于待执行的结构化查询语言SQL语句,确定目标字段和分别与目标字段对应的目标函数集合、目标数据表;获取目标数据表预先关联的字段描述信息,其中,字段描述信息用于描述目标数据表中的字段的使用方式;基于字段描述信息,对目标字段和目标函数集合进行分析,确定是否允许查询SQL语句所指向的数据。该实施方式有效利用了字段描述信息,实现了对字段的使用方式的控制,因此可以确保数据的安全性。,下面是用于控制数据查询的方法和装置专利的具体信息内容。

1.一种用于控制数据查询的方法,包括:
基于待执行的结构化查询语言SQL语句,确定目标字段和分别与所述目标字段对应的目标函数集合、目标数据表;
获取所述目标数据表预先关联的字段描述信息,其中,所述字段描述信息用于描述所述目标数据表中的字段的使用方式;
基于所述字段描述信息,对所述目标字段和所述目标函数集合进行分析,确定是否允许查询所述SQL语句所指向的数据。
2.根据权利要求1所述的方法,其中,所述字段描述信息还用于描述所述目标数据表中的字段的类别;以及
所述基于所述字段描述信息,对所述目标字段和所述目标函数集合进行分析,确定是否允许查询所述SQL语句所指向的数据,包括:
基于所述字段描述信息,确定所述目标字段是否归属于目标类别;
响应于确定所述目标字段归属于所述目标类别,基于所述目标函数集合,确定是否允许查询所述数据。
3.根据权利要求2所述的方法,其中,所述基于所述目标函数集合,确定是否允许查询所述数据,包括:
确定所述目标函数集合是否为空集合;
响应于确定所述目标函数集合是空集合,确定不允许查询所述数据。
4.根据权利要求3所述的方法,其中,所述基于所述目标函数集合,确定是否允许查询所述数据,还包括:
响应于确定所述目标函数集合不是空集合,基于所述字段描述信息,确定所述目标函数集合中的目标函数是否均是允许作用于所述目标字段的函数;
响应于确定所述目标函数集合中的目标函数不均是允许作用于所述目标字段的函数,确定不允许查询所述数据。
5.根据权利要求1-4之一所述的方法,其中,所述基于待执行的结构化查询语言SQL语句,确定目标字段和分别与所述目标字段对应的目标函数集合、目标数据表,包括:
对所述SQL语句进行词法分析和语法分析,生成抽象语法树;
对所述抽象语法树进行分析,生成至少一个查询对象,其中,所述至少一个查询对象包括与所述SQL语句所对应的每层查询相对应的查询对象,查询对象包括第一属性和第二属性,第一属性用于表征数据表的表别名到数据表的语法部分的映射关系,第二属性用于表征查询内容的查询别名到查询内容的语法部分的映射关系;
对所述至少一个查询对象进行分析,确定所述目标字段、所述目标函数集合和所述目标数据表。
6.根据权利要求5所述的方法,其中,所述对所述至少一个查询对象进行分析,确定所述目标字段、所述目标函数集合和所述目标数据表,包括:
按由内到外的查询次序,依次对所述SQL语句所对应的每层查询执行以下分析操作:确定该层查询是否包括子查询;若否,则对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表,其中,字段信息包括字段名称、分别与所述字段名称对应的函数信息和数据表信息;
对于所述SQL语句所对应的最外层查询所关联的字段信息列表中的字段信息,将该字段信息中的字段名称所指示的字段确定为目标字段,将该字段信息中的数据表信息所指示的数据表确定为与该目标字段对应的目标数据表,以及基于该字段信息中的函数信息生成与该目标字段对应的目标函数集合。
7.根据权利要求6所述的方法,其中,所述分析操作的步骤还包括:
响应于确定该层查询包括子查询,基于该子查询所关联的字段信息列表,对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表。
8.根据权利要求5所述的方法,其中,在所述对所述抽象语法树进行分析,生成至少一个查询对象之后,所述方法还包括:
对于所述至少一个查询对象中的查询对象,对该查询对象中的第一属性的属性值进行数据表信息提取,基于提取出的数据表信息获取字段描述信息,生成用于表征该数据表信息所指示的数据表与该字段描述信息之间的对应关系的对应关系信息。
9.根据权利要求8所述的方法,其中,所述获取所述目标数据表预先关联字段描述信息,包括:
从所生成的对应关系信息中查找出用于表征目标数据表与其所关联的字段描述信息之间的对应关系的对应关系信息;
从查找到的对应关系信息中获取目标数据表所关联的字段描述信息。
10.根据权利要求1所述的方法,其中,所述方法还包括:
响应于确定不允许查询所述数据,执行提醒操作。
11.一种用于控制数据查询的装置,包括:
第一确定单元,被配置成基于待执行的结构化查询语言SQL语句,确定目标字段和分别与所述目标字段对应的目标函数集合、目标数据表;
获取单元,被配置成获取所述目标数据表预先关联的字段描述信息,其中,所述字段描述信息用于描述所述目标数据表中的字段的使用方式;
第二确定单元,被配置成基于所述字段描述信息,对所述目标字段和所述目标函数集合进行分析,确定是否允许查询所述SQL语句所指向的数据。
12.根据权利要求11所述的装置,其中,所述字段描述信息还用于描述所述目标数据表中的字段的类别;以及
所述第二确定单元包括:
第一确定子单元,被配置成基于所述字段描述信息,确定所述目标字段是否归属于目标类别;
第二确定子单元,被配置成响应于确定所述目标字段归属于所述目标类别,基于所述目标函数集合,确定是否允许查询所述数据。
13.根据权利要求12所述的装置,其中,所述第二确定子单元进一步被配置成:
确定所述目标函数集合是否为空集合;
响应于确定所述目标函数集合是空集合,确定不允许查询所述数据。
14.根据权利要求13所述的装置,其中,所述第二确定子单元还进一步被配置成:
响应于确定所述目标函数集合不是空集合,基于所述字段描述信息,确定所述目标函数集合中的目标函数是否均是允许作用于所述目标字段的函数;
响应于确定所述目标函数集合中的目标函数不均是允许作用于所述目标字段的函数,确定不允许查询所述数据。
15.根据权利要求11-14之一所述的装置,其中,所述第一确定单元包括:
第一生成子单元,被配置成对所述SQL语句进行词法分析和语法分析,生成抽象语法树;
第二生成子单元,被配置成对所述抽象语法树进行分析,生成至少一个查询对象,其中,所述至少一个查询对象包括与所述SQL语句所对应的每层查询相对应的查询对象,查询对象包括第一属性和第二属性,第一属性用于表征数据表的表别名到数据表的语法部分的映射关系,第二属性用于表征查询内容的查询别名到查询内容的语法部分的映射关系;
确定子单元,被配置成对所述至少一个查询对象进行分析,确定所述目标字段、所述目标函数集合和所述目标数据表。
16.根据权利要求15所述的装置,其中,所述确定子单元包括:
分析模,被配置成按由内到外的查询次序,依次对所述SQL语句所对应的每层查询执行以下分析操作:确定该层查询是否包括子查询;若否,则对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表,其中,字段信息包括字段名称、分别与所述字段名称对应的函数信息和数据表信息;
确定模块,被配置成对于所述SQL语句所对应的最外层查询所关联的字段信息列表中的字段信息,将该字段信息中的字段名称所指示的字段确定为目标字段,将该字段信息中的数据表信息所指示的数据表确定为与该目标字段对应的目标数据表,以及基于该字段信息中的函数信息生成与该目标字段对应的目标函数集合。
17.根据权利要求16所述的装置,其中,所述分析模块进一步被配置成:
响应于确定该层查询包括子查询,基于该子查询所关联的字段信息列表,对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表。
18.根据权利要求15所述的装置,其中,所述装置还包括:
生成单元,被配置成对于所述至少一个查询对象中的查询对象,对该查询对象中的第一属性的属性值进行数据表信息提取,基于提取出的数据表信息获取字段描述信息,生成用于表征该数据表信息所指示的数据表与该字段描述信息之间的对应关系的对应关系信息。
19.根据权利要求18所述的装置,其中,所述获取单元进一步被配置成:
从所生成的对应关系信息中查找出用于表征目标数据表与其所关联的字段描述信息之间的对应关系的对应关系信息;
从查找到的对应关系信息中获取目标数据表所关联的字段描述信息。
20.根据权利要求11所述的装置,其中,所述装置还包括:
提醒单元,被配置成响应于确定不允许查询所述数据,执行提醒操作。
21.一种电子设备,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-10中任一所述的方法。
22.一种计算机可读介质,其上存储有计算机程序,其中,所述程序被处理器执行时实现如权利要求1-10中任一所述的方法。

说明书全文

用于控制数据查询的方法和装置

技术领域

[0001] 本申请实施例涉及计算机技术领域,具体涉及用于控制数据查询的方法和装置。

背景技术

[0002] 目前,对数据的访问控制一般设有两种权限,即能访问和不能访问。如果某数据不能访问,则对该数据的任何计算都是拒绝的。如果某数据能访问,则对该数据的任何计算都是允许的。例如,不允许某个分析人员访问员工表的工资字段,则该分析人员便无法进行计算平均工资等操作。如果允许某个分析人员访问员工表的工资字段,则该分析人员便能看到每个员工的工资,存在工资数据泄露的危险。发明内容
[0003] 本申请实施例提出了用于控制数据查询的方法和装置。
[0004] 第一方面,本申请实施例提供了一种用于控制数据查询的方法,该方法包括:基于待执行的结构化查询语言SQL语句,确定目标字段和分别与目标字段对应的目标函数集合、目标数据表;获取目标数据表预先关联的字段描述信息,其中,字段描述信息用于描述目标数据表中的字段的使用方式;基于字段描述信息,对目标字段和目标函数集合进行分析,确定是否允许查询SQL语句所指向的数据。
[0005] 在一些实施例中,字段描述信息还用于描述目标数据表中的字段的类别;以及基于字段描述信息,对目标字段和目标函数集合进行分析,确定是否允许查询SQL语句所指向的数据,包括:基于字段描述信息,确定目标字段是否归属于目标类别;响应于确定目标字段归属于目标类别,基于目标函数集合,确定是否允许查询上述数据。
[0006] 在一些实施例中,基于目标函数集合,确定是否允许查询上述数据,包括:确定目标函数集合是否为空集合;响应于确定目标函数集合是空集合,确定不允许查询上述数据。
[0007] 在一些实施例中,基于目标函数集合,确定是否允许查询上述数据,还包括:响应于确定目标函数集合不是空集合,基于字段描述信息,确定目标函数集合中的目标函数是否均是允许作用于目标字段的函数;响应于确定目标函数集合中的目标函数不均是允许作用于目标字段的函数,确定不允许查询上述数据。
[0008] 在一些实施例中,基于待执行的结构化查询语言SQL语句,确定目标字段和与目标字段分别对应的目标函数集合、目标数据表,包括:对SQL语句进行词法分析和语法分析,生成抽象语法树;对抽象语法树进行分析,生成至少一个查询对象,其中,至少一个查询对象包括与SQL语句所对应的每层查询相对应的查询对象,查询对象包括第一属性和第二属性,第一属性用于表征数据表的表别名到数据表的语法部分的映射关系,第二属性用于表征查询内容的查询别名到查询内容的语法部分的映射关系;对至少一个查询对象进行分析,确定目标字段、目标函数集合和目标数据表。
[0009] 在一些实施例中,对至少一个查询对象进行分析,确定目标字段、目标函数集合和目标数据表,包括:按由内到外的查询次序,依次对SQL语句所对应的每层查询执行以下分析操作:确定该层查询是否包括子查询;若否,则对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表,其中,字段信息包括字段名称、分别与字段名称对应的函数信息和数据表信息;对于SQL语句所对应的最外层查询所关联的字段信息列表中的字段信息,将该字段信息中的字段名称所指示的字段确定为目标字段,将该字段信息中的数据表信息所指示的数据表确定为与该目标字段对应的目标数据表,以及基于该字段信息中的函数信息生成与该目标字段对应的目标函数集合。
[0010] 在一些实施例中,分析操作的步骤还包括:响应于确定该层查询包括子查询,基于该子查询所关联的字段信息列表,对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表。
[0011] 在一些实施例中,在对抽象语法树进行分析,生成至少一个查询对象之后,上述方法还包括:对于至少一个查询对象中的查询对象,对该查询对象中的第一属性的属性值进行数据表信息提取,基于提取出的数据表信息获取字段描述信息,生成用于表征该数据表信息所指示的数据表与该字段描述信息之间的对应关系的对应关系信息。
[0012] 在一些实施例中,获取目标数据表预先关联字段描述信息,包括:从所生成的对应关系信息中查找出用于表征目标数据表与其所关联的字段描述信息之间的对应关系的对应关系信息;从查找到的对应关系信息中获取目标数据表所关联的字段描述信息。
[0013] 在一些实施例中,上述方法还包括:响应于确定不允许查询上述数据,执行提醒操作。
[0014] 第二方面,本申请实施例提供了一种用于控制数据查询的装置,该装置包括:第一确定单元,被配置成基于待执行的结构化查询语言SQL语句,确定目标字段和分别与目标字段对应的目标函数集合、目标数据表;获取单元,被配置成获取目标数据表预先关联的字段描述信息,其中,字段描述信息用于描述目标数据表中的字段的使用方式;第二确定单元,被配置成基于字段描述信息,对目标字段和目标函数集合进行分析,确定是否允许查询SQL语句所指向的数据。
[0015] 在一些实施例中,字段描述信息还用于描述目标数据表中的字段的类别;以及第二确定单元包括:第一确定子单元,被配置成基于字段描述信息,确定目标字段是否归属于目标类别;第二确定子单元,被配置成响应于确定目标字段归属于目标类别,基于目标函数集合,确定是否允许查询上述数据。
[0016] 在一些实施例中,第二确定子单元进一步被配置成:确定目标函数集合是否为空集合;响应于确定目标函数集合是空集合,确定不允许查询上述数据。
[0017] 在一些实施例中,第二确定子单元还进一步被配置成:响应于确定目标函数集合不是空集合,基于字段描述信息,确定目标函数集合中的目标函数是否均是允许作用于目标字段的函数;响应于确定目标函数集合中的目标函数不均是允许作用于目标字段的函数,确定不允许查询上述数据。
[0018] 在一些实施例中,第一确定单元包括:第一生成子单元,被配置成对SQL语句进行词法分析和语法分析,生成抽象语法树;第二生成子单元,被配置成对抽象语法树进行分析,生成至少一个查询对象,其中,至少一个查询对象包括与SQL语句所对应的每层查询相对应的查询对象,查询对象包括第一属性和第二属性,第一属性用于表征数据表的表别名到数据表的语法部分的映射关系,第二属性用于表征查询内容的查询别名到查询内容的语法部分的映射关系;确定子单元,被配置成对至少一个查询对象进行分析,确定目标字段、目标函数集合和目标数据表。
[0019] 在一些实施例中,确定子单元包括:分析模,被配置成按由内到外的查询次序,依次对SQL语句所对应的每层查询执行以下分析操作:确定该层查询是否包括子查询;若否,则对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表,其中,字段信息包括字段名称、分别与字段名称对应的函数信息和数据表信息;确定模块,被配置成对于SQL语句所对应的最外层查询所关联的字段信息列表中的字段信息,将该字段信息中的字段名称所指示的字段确定为目标字段,将该字段信息中的数据表信息所指示的数据表确定为与该目标字段对应的目标数据表,以及基于该字段信息中的函数信息生成与该目标字段对应的目标函数集合。
[0020] 在一些实施例中,分析模块进一步被配置成:响应于确定该层查询包括子查询,基于该子查询所关联的字段信息列表,对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表。
[0021] 在一些实施例中,上述装置还包括:生成单元,被配置成对于至少一个查询对象中的查询对象,对该查询对象中的第一属性的属性值进行数据表信息提取,基于提取出的数据表信息获取字段描述信息,生成用于表征该数据表信息所指示的数据表与该字段描述信息之间的对应关系的对应关系信息。
[0022] 在一些实施例中,获取单元进一步被配置成:从所生成的对应关系信息中查找出用于表征目标数据表与其所关联的字段描述信息之间的对应关系的对应关系信息;从查找到的对应关系信息中获取目标数据表所关联的字段描述信息。
[0023] 在一些实施例中,上述装置还包括:提醒单元,被配置成响应于确定不允许查询上述数据,执行提醒操作。
[0024] 第三方面,本申请实施例提供了一种电子设备,该电子设备包括:一个或多个处理器;存储装置,其上存储有一个或多个程序;当该一个或多个程序被该一个或多个处理器执行,使得该一个或多个处理器实现如第一方面中任一实现方式描述的方法。
[0025] 第四方面,本申请实施例提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面中任一实现方式描述的方法。
[0026] 本申请实施例提供的用于控制数据查询的方法和装置,基于待执行的SQL(Structured Query Language,结构化查询语言)语句确定目标字段和分别与目标字段对应的目标函数集合、目标数据表,而后获取目标数据表预先关联的字段描述信息,以便基于字段描述信息,对目标字段和目标函数集合进行分析,确定是否允许查询该SQL语句所指向的数据。从而有效利用了字段描述信息,实现了对字段的使用方式的控制,因此可以确保数据的安全性。附图说明
[0027] 通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
[0028] 图1是本申请的一个实施例可以应用于其中的示例性系统架构图;
[0029] 图2是根据本申请的用于控制数据查询的方法的一个实施例的流程图
[0030] 图3是根据本申请的用于控制数据查询的方法的一个应用场景的示意图;
[0031] 图4是根据本申请的用于控制数据查询的方法的又一个实施例的流程图;
[0032] 图5是根据本申请的用于控制数据查询的装置的一个实施例的结构示意图;
[0033] 图6是适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。

具体实施方式

[0034] 下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
[0035] 需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
[0036] 图1示出了可以应用本申请的用于控制数据查询的方法或用于控制数据查询的装置的实施例的示例性系统架构100。
[0037] 如图1所示,系统架构100可以包括请求端101、102、103,网络104和服务器105。网络104用以在请求端101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
[0038] 请求端101、102、103可以是终端设备,也可以是服务器。请求端101、102、103可以通过网络104与服务器105交互,以接收或发送消息等。当请求端101、102、103是终端设备时,请求端101、102、103上可以安装有各种通讯客户端应用,例如网页浏览器应用,数据查询类应用等等。
[0039] 需要说明的是,当请求端101、102、103是终端设备时,其可以是硬件,也可以是软件。当作为终端设备的请求端101、102、103为硬件时,可以是各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。当作为终端设备的请求端101、102、103为软件时,可以安装在上述所列举的电子设备中。其可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块。在此不做具体限定。
[0040] 服务器105可以是提供各种服务的服务器,例如用于控制数据查询的服务器。服务器105可以接收请求端101、102、103发送的包括SQL语句的数据查询请求,并对该数据查询请求进行分析等处理,以控制对该数据查询请求所请求的数据的查询。
[0041] 实践中,服务器可以是硬件,也可以是软件。当服务器为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块。在此不做具体限定。
[0042] 需要指出的是,本申请实施例所提供的用于控制数据查询的方法一般由服务器105执行,相应地,用于控制数据查询的装置一般设置于服务器105中。
[0043] 应该理解,图1中的请求端、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的请求端、网络和服务器。
[0044] 继续参考图2,示出了根据本申请的用于控制数据查询的方法的一个实施例的流程200。该用于控制数据查询的方法的流程200,包括以下步骤:
[0045] 步骤201,基于待执行的SQL语句,确定目标字段和分别与目标字段对应的目标函数集合、目标数据表。
[0046] 在本实施例中,用于控制数据查询的方法的执行主体(例如图1所示的服务器105)可以基于待执行的SQL语句,确定目标字段和分别与目标字段对应的目标函数集合、目标数据表。其中,该SQL语句例如可以是上述执行主体接收到的数据查询请求中的SQL语句。该数据查询请求可以是上述执行主体所连接的终端设备或服务器发送的。
[0047] 上述SQL语句可以是SELECT语句。目标字段可以是上述SQL语句所指向的数据所关联的字段。目标函数集合可以是空集合,也可以不是空集合。若目标函数集合不是空集合,则目标函数集合中的目标函数可以是上述SQL语句中的作用于目标字段的函数。应该理解,目标函数可以用其函数名称表示。另外,目标数据表可以是目标字段所归属的数据表。
[0048] 实践中,SELECT语句可以包括SELECT子句和FROM子句。SELECT子句限定了查询内容。FROM子句限定了查询内容的来源。在SELECT子句中,一般会存在字段名称或字段别名。还有可能存在与该字段名称相关联的数据表名称、函数名称等。在FROM子句中,一般会存在数据表名称。还有可能存在与该数据表名称对应的数据库名称。因此,上述执行主体可以通过对上述SQL语句中的SELECT子句和FROM子句进行分析,确定目标字段和分别与目标字段对应的目标函数集合、目标数据表。
[0049] 作为示例,假设上述SQL语句如下所示:
[0050] SELECT sum(salary)FROM sql_parser.employee。
[0051] 其中,sum可以为求和函数的函数名称。salary可以为工资字段的字段名称。employee可以为salary字段所在的数据表的数据表名称。sql_parser可以为employee数据表所归属的数据库的数据库名称。
[0052] 上述执行主体对上述SQL语句中的SLECT子句和FROM子句进行分析后,可以确定salary字段为目标字段,sql_parser数据库中的employee数据表为与该目标字段对应的目标数据表,以及将sum函数确定为目标函数,生成与该目标字段对应的、包括sum函数的目标函数集合。
[0053] 步骤202,获取目标数据表预先关联的字段描述信息。
[0054] 在本实施例中,上述执行主体在执行完步骤201后,可以获取目标数据表预先关联的字段描述信息。其中,该字段描述信息可以用于描述目标数据表中的字段的使用方式。该使用方式可以是允许的使用方式,也可以是禁止的使用方式,在此不做具体限定。使用方式可以用函数名或其它字符表示。
[0055] 作为示例,假设employee数据表包括id字段、name字段和salary字段,与employee数据表对应的字段描述信息的内容可以如表1所示:
[0056]字段名称 允许使用方式
id all
name all
salary avg,sum
[0057] 表1
[0058] 其中,“允许使用方式”列中的“all”可以代表全部,可以表示允许对其所对应的字段执行任何操作。“avg”可以是求平均值函数的函数名称。
[0059] 从表1可以看出,允许对id字段、name字段执行任何操作。而对于salary字段,则只允许使用avg、sum函数对salary字段执行相应的操作。
[0060] 在本实施例中,上述执行主体可以基于目标数据表的数据表名称和其所归属的数据库的数据库名称,来获取字段描述信息。例如,字段描述信息可以存储在用于管理元数据的服务器中。该服务器上可以创建有以该数据库名称命名的文件夹,该文件夹可以包括以该数据表名称命名的子文件夹。该子文件夹内存放有字段描述信息。上述执行主体可以根据该数据库名称和该数据表名称定位到该子文件夹,从该子文件夹内获取字段描述信息。
[0061] 步骤203,基于字段描述信息,对目标字段和目标函数集合进行分析,确定是否允许查询SQL语句所指向的数据。
[0062] 在本实施例中,上述执行主体可以基于获取到的字段描述信息,对目标字段和其所对应的目标函数集合进行分析,确定是否允许查询上述SQL语句所指向的数据。
[0063] 例如,对于在步骤201中确定的各个目标字段中的每个目标字段所对应的目标函数集合,上述执行主体可以基于该目标字段所归属的目标数据表所关联的字段描述信息,确定该目标函数集合中的各个目标函数是否均是允许作用于该目标字段的函数;若否,则上述执行主体可以确定不允许查询上述SQL语句所指向的数据。若上述执行主体确定该各个目标字段分别对应的目标函数集合中的目标函数均是允许作用于相应目标字段的函数,则上述执行主体可以确定允许查询上述SQL语句所指向的数据。
[0064] 在本实施例的一些可选的实现方式中,上述SQL语句还可以关联数据库名称。该数据库名称例如可以包含在上述数据查询请求中。该数据库名称可以是上述SQL语句所指向的数据的来源数据库的名称。若上述SQL语句中的FROM子句中的数据表名称没有对应的数据库名称,则上述执行主体可以确定该数据表名称所指示的数据表归属于上述SQL语句所关联的数据库名称所指示的数据库。
[0065] 在本实施例的一些可选的实现方式中,字段描述信息还可以用于描述目标数据表中的字段的类别。其中,类别例如可以包括隐私字段、非隐私字段等。上述执行主体可以基于获取到的字段描述信息,确定目标字段是否归属于目标类别。例如,上述执行主体可以先在字段描述信息中查找出目标字段的字段名称所在的记录,而后确定该记录中的类别名称是否为目标类别的类别名称,若是,则上述执行主体可以确定目标字段归属于目标类别。上述执行主体可以响应于确定目标字段归属于目标类别,基于目标函数集合,确定是否允许查询上述SQL语句所指向的数据。其中,目标类别可以是用于表征其下的字段是隐私字段的类别。
[0066] 需要说明的是,通过控制归属于目标类别的字段的使用方式,可以防止归属于目标类别的字段下的数据被泄露,可以确保数据的安全性。
[0067] 在本实施例的一些可选的实现方式中,上述执行主体可以通过执行以下确定步骤以基于目标函数集合确定是否允许查询上述SQL语句所指向的数据:确定目标函数集合是否为空集合;响应于确定目标函数集合是空集合,确定不允许查询该数据。
[0068] 在本实施例的一些可选的实现方式中,上述执行主体还可以响应于确定目标函数集合不是空集合,基于获取到的字段描述信息,确定目标函数集合中的目标函数是否均是允许作用于对应目标字段的函数。而后上述执行主体可以响应于确定目标函数集合中的目标函数不均是允许作用于对应目标字段的函数,确定不允许查询上述SQL语句所指向的数据。针对该实现方式的解释说明,可参看图4所示实施例的步骤407的相关说明,在此不再赘述。
[0069] 在本实施例的一些可选的实现方式中,上述执行主体可以对上述SQL语句进行词法分析和语法分析,生成抽象语法树。而后,上述执行主体可以对该抽象语法树进行分析,生成至少一个查询对象。然后,上述执行主体可以对该至少一个查询对象进行分析,确定目标字段、分别与目标字段对应的目标函数集合、目标数据表。其中,查询对象可以包括第一属性和第二属性。第一属性可以用于表征数据表的表别名到数据表的语法部分的映射关系。第二属性可以用于表征查询内容的查询别名到查询内容的语法部分的映射关系。针对该实现方式的解释说明可参看图4所示实施例中的步骤401-403的相关说明,在此不再赘述。
[0070] 在本实施例的一些可选的实现方式中,上述执行主体可以采用以下分析方法,对上述至少一个查询对象进行分析,确定目标字段、分别与目标字段对应的目标函数集合、目标数据表:
[0071] 首先,上述执行主体可以按由内到外的查询次序,依次对上述SQL语句所对应的每层查询执行以下分析操作:确定该层查询是否包括子查询;若否,则对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表。其中,字段信息可以包括字段名称、分别与该字段名称对应的函数信息和数据表信息。
[0072] 而后,对于上述SQL语句所对应的最外层查询所关联的字段信息列表中的字段信息,上述执行主体可以将该字段信息中的字段名称所指示的字段确定为目标字段,将该字段信息中的数据表信息所指示的数据表确定为与该目标字段对应的目标数据表,以及基于该字段信息中的函数信息生成与该目标字段对应的目标函数集合。
[0073] 需要说明的是,针对上述分析方法的解释说明,可参看图4所示实施例的步骤403的相关说明,在此不再赘述。
[0074] 在本实施例的一些可选的实现方式中,上述分析操作的步骤还可以包括:响应于确定该层查询包括子查询,基于该子查询所关联的字段信息列表,对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表。针对该实现方式的解释说明,可参看图4所示实施例的步骤403的相关说明,在此不再赘述。
[0075] 在本实施例的一些可选的实现方式中,上述执行主体在生成上述至少一个查询对象之后,还可以执行以下生成操作:对于上述至少一个查询对象中的查询对象,对该查询对象中的第一属性的属性值进行数据表信息提取,基于提取出的数据表信息获取字段描述信息,生成用于表征该数据表信息所指示的数据表与该字段描述信息之间的对应关系的对应关系信息。针对该生成操作的解释说明,可参看图4所示实施例的步骤404的相关说明,在此不再赘述。
[0076] 在本实施例的一些可选的实现方式中,上述执行主体可以通过执行以下获取操作来获取目标数据表预先关联的字段描述信息:从以上所生成的对应关系信息中查找出用于表征目标数据表与其所关联的字段描述信息之间的对应关系的对应关系信息;从查找到的对应关系信息中获取目标数据表所关联的字段描述信息。针对该获取操作的解释说明,可参看图4所示实施例的步骤404的相关说明,在此不再赘述。
[0077] 在本实施例的一些可选的实现方式中,上述执行主体可以响应于确定允许查询上述SQL语句所指向的数据,执行上述SQL语句以获取该数据,以及返回该数据。或者,上述执行主体可以响应于确定允许查询上述SQL语句所指向的数据,生成用于指示允许查询该数据的提示信息,以及返回该提示信息。
[0078] 继续参见图3,图3是根据本实施例的用于控制数据查询的方法的应用场景的一个示意图。在图3的应用场景中,当用户想查看sql_parser数据库中的employee数据表中的salary字段的最大值时,可以通过终端设备301向服务器302发送包括以下SQL语句的数据查询请求:SELECT max(salary)FROM sql_parser.employee。其中,max为获取最大值函数的函数名称。服务器302在接收到上述数据查询请求后,可以对上述SQL语句进行分析,确定出上述SQL语句所指向的数据所关联的salary字段,该salary字段所归属的employee数据表,以及生成与salary字段对应的包括max函数的函数集合。而后,服务器302可以基于数据库名称sql_parser和数据表名称employee,获取employee数据表预先关联的字段描述信息,其中,该字段描述信息的内容如上述表1所示。然后,服务器302可以基于该字段描述信息,判断出上述函数集合中的max函数不是允许作用于salary字段的函数,因而服务器302可以确定不允许查询上述SQL语句所指向的数据。最后,服务器302可以生成告警信息,将告警信息返回给终端设备301,以提醒查询内容不被允许。
[0079] 本申请的上述实施例提供的方法,基于待执行的SQL语句确定目标字段和分别与目标字段对应的目标函数集合、目标数据表,而后获取目标数据表预先关联的字段描述信息,以便基于字段描述信息,对目标字段和目标函数集合进行分析,确定是否允许查询上述SQL语句所指向的数据。从而有效利用了字段描述信息,实现了对字段的使用方式的控制,因此可以确保数据的安全性。
[0080] 进一步参考图4,其示出了用于控制数据查询的方法的又一个实施例的流程400。该用于控制数据查询的方法的流程400,包括以下步骤:
[0081] 步骤401,对待执行的SQL语句进行词法分析和语法分析,生成抽象语法树。
[0082] 在本实施例中,用于控制数据查询的方法的执行主体(例如图1所示的服务器105)可以对待执行的SQL语句进行词法分析和语法分析,生成抽象语法树。需要指出的是,该SQL语句可以关联数据库名称。该SQL语句和该数据库名称可以包含在上述执行主体接收到的数据查询请求中。该数据查询请求可以是上述执行主体所连接的终端设备或服务器发送的。
[0083] 实践中,上述执行主体可以利用ANTLR(Another Tool for  Language Recognition)对上述SQL语句进行词法分析和语法分析,生成抽象语法树。
[0084] 需要说明的是,ANTLR是指可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。ANTLR为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的框架。ANTLR允许用户定义识别字符流的词法规则和用于解释Token流的语法分析规则。然后,ANTLR将根据用户提供的语法文件自动生成相应的词法/语法分析器。用户可以利用它们将输入的文本进行编译,并转换成其它形式,例如抽象语法树(Abstract Syntax Tree,AST)。
[0085] 在计算机科学中,抽象语法树或者语法树(syntax tree),可以是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。树上的每个节点可以表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。
[0086] 对于基于SELECT语句生成的抽象语法树,该抽象语法树的根节点可以为TOK_QUERY节点。该根节点的子节点可以包括TOK_FROM节点和TOK_INSERT节点。若该SELECT语句嵌套有子查询语句,则该抽象语法树中的、以该TOK_FROM节点为根节点的子树中还可以包括TOK_SUBQUERY节点。该TOK_SUBQUERY节点的第一个子节点是一个TOK_QUERY节点。该TOK_SUBQUERY节点的第二个子节点可以是该子查询语句的子查询别名。
[0087] 步骤402,对抽象语法树进行分析,生成至少一个查询对象。
[0088] 在本实施例中,上述执行主体可以对在步骤401中生成的抽象语法树进行分析,生成至少一个查询对象。其中,该至少一个查询对象可以包括与上述SQL语句所对应的每层查询相对应的查询对象。查询对象可以包括第一属性和第二属性。第一属性可以用于表征数据表的表别名到数据表的语法部分的映射关系。第二属性可以用于表征查询内容的查询别名到查询内容的语法部分的映射关系。
[0089] 需要强调的是,对于上述SQL语句所关联的数据表,若上述SQL语句中只有该数据表的数据表名称,则该数据表的表别名可以用该数据表名称表示。另外,对于上述SQL语句中的查询内容,该查询内容可以包括至少一个查询项。对于该至少一个查询项中的任意一个查询项,若该查询项是字段名称,则与该查询项对应的查询别名可以用字段名称表示;若该查询项是表达式,则与该查询项对应的查询别名可以用表达式表示;若该查询项有对应的字段别名,则与该查询项对应的查询别名可以用字段别名表示。
[0090] 以如下FROM子句为例:FROM sql_parser.employee。employee数据表的表别名可以用“employee”表示。employee数据表的语法部分可以是抽象语法树中的与sql_parser.employee相对应的语法部分。
[0091] 以如下SELECT子句为例:SELECT dept_id,sum(salary)as sum_salary。其中,dept_id可以代表员工编号。该SELECT子句包括两个查询项。即dept_id和sum(salary)as sum_salary。dept_id和salary均为字段名称。sum_salary为字段别名。与查询项dept_id对应的查询别名可以为“dept_id”。与查询项sum(salary)as sum_salary对应的查询别名可以为“sum_salary”。
[0092] 在本实施例中,上述执行主体可以采用以下生成方法生成与上述SQL语句所对应的最外层查询相对应的查询对象:
[0093] 首先,上述执行主体可以先为该最外层查询生成所包括的第一属性和第二属性的属性值均为空的查询对象。
[0094] 而后,上述执行主体可以在所生成的抽象语法树中的TOK_FROM部分查找出所有不在TOK_SUBQUERY节点下的TOK_TABREF节点。其中,该TOK_FROM部分可以是以该抽象语法树的根节点的第一个子节点(TOK_FROM节点)为根节点的子树。TOK_TABREF节点的子节点可以包括TOK_TABNAME节点。TOK_TABNAME节点可以包括一个或两个子节点。若TOK_TABNAME包括一个子节点,那么该子节点可以是数据表名称。若TOK_TABNAME包括两个子节点,那么TOK_TABNAME的第一个子节点可以是数据库名称,第二个子节点可以是数据表名称。对于查找出的TOK_TABREF节点,上述执行主体可以将其下的语法部分中的数据表名称作为表别名,将该表别名作为关键字,将该语法部分作为值,对应存储至最外层查询所对应的查询对象中的第一属性。
[0095] 然后,上述执行主体可以在所生成的抽象语法树中的INSERT部分查找出TOK_SELECT节点。其中,该INSERT部分可以是以所生成的抽象语法树的根节点的第二个子节点(TOK_INSERT节点)为根节点的子树。TOK_SELECT节点的子节点可以包括TOK_SELEXPR节点。TOK_SELEXPR节点可以包括一个子节点,也可以包括两个子节点。若TOK_SELEXPR节点包括两个子节点,则TOK_SELEXPR的第一子节点可以代表查询内容,第二个子节点可以代表查询内容的查询别名。这里,TOK_SELEXPR节点的第一个子节点可以为以“.”、“TOK_TABLE_OR_COL”、“TOK_FUNCTION”或“TOK_ALLCOLREF”等命名的节点。其中,“TOK_ALLCOLREF”可以对应“SELECT*”中的“*”。
[0096] 实践中,若TOK_SELEXPR节点的第一个子节点为以“.”命名的节点,则可以表明查询有限定。例如,“SELECT dept.salary”,其中,dept可以为表别名或子查询别名。“SELECT dept.salary”限定了从别名为dept的数据表或子查询中获取salary字段下的数据。若TOK_SELEXPR节点的第一个子节点为TOK_TABLE_OR_COL节点,则可以表明查询是字段。若TOK_SELEXPR节点的第一个子节点为TOK_FUNCTION节点,则可以表明查询内容包括函数。若TOK_SELEXPR节点的第一个子节点为TOK_ALLCOLREF节点,则可以表明将所有数据表的内容和/或子查询的所有查询结果作为本层的查询结果,或者将限定数据表的内容和/或限定子查询的所有查询结果作为本层的查询结果。
[0097] 对于归属于查找出的TOK_SELECT节点的每个TOK_SELEXPR语法部分,上述执行主体可以从该TOK_SELEXPR语法部分中提取出查询别名,将该查询别名作为关键字,将该TOK_SELEXPR语法部分作为值,对应存储至最外层查询所对应的查询对象中的第二属性。
[0098] 需要说明的是,由于子查询语句也是一条完整的SELECT语句,因此,若上述SQL语句嵌套有子查询语句,则上述执行主体可以采用与上述生成方法类似的方法,生成与上述SQL语句所对应的子查询相对应的查询对象。另外,上述SQL语句中可以存在与该子查询语句对应的子查询别名。上述执行主体可以将该子查询别名和其所指向的子查询所对应的查询对象关联存储。
[0099] 需要指出的是,若上述SQL语句内嵌套有子查询语句,则上述执行主体可以基于上述SQL语句中的各条SELECT语句之间的嵌套关系,为所生成的各个查询对象设定相应的嵌套关系。
[0100] 步骤403,对所生成的查询对象进行分析,确定目标字段和分别与目标字段对应的目标函数集合、目标数据表。
[0101] 在本实施例中,上述执行主体在生成上述至少一个查询对象后,可以对所生成的查询对象进行分析,以确定目标字段和分别与目标字段对应的目标函数集合、目标数据表。
[0102] 作为示例,上述执行主体可以按由内到外的查询次序,依次对上述SQL语句所对应的每层查询执行以下分析操作:
[0103] 步骤A,上述执行主体可以确定该层查询是否包括子查询。作为示例,若上述执行主体针对上述SQL语句生成的查询对象的数目为1,则上述执行主体可以确定该层查询不包括子查询。若上述执行主体针对上述SQL语句生成的查询对象的数目大于1,则上述执行主体可以基于以上所生成的各个查询对象之间的嵌套关系,确定该层查询是否包括子查询。例如,上述执行主体可以确定该各个查询对象中是否存在归属于该层查询所对应的查询对象的查询对象。若存在,则上述执行主体可以确定该层查询包括子查询;否则,上述执行主体可以确定该层查询不包括子查询。这里,若上述执行主体确定该层查询不包括子查询,则上述执行主体可以执行步骤B;否则,上述执行主体可以执行步骤C。
[0104] 步骤B,若上述执行主体确定该层查询不包括子查询,则上述执行主体可以对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表。其中,字段信息可以包括字段名称、分别与该字段名称对应的函数信息和数据表信息。除此之外,字段信息还可以包括相应的查询别名。需要指出的是,若上述SQL语句中存在作用于该字段名称所指示的字段的函数,则该函数信息可以包括该函数的函数名称。若上述SQL语句中不存在作用于该字段名称所指示的字段的函数,则该函数信息可以用于指示上述SQL语句中不存在作用于该字段名称所指示的字段的函数,该函数信息例如可以用空集合表示。该数据表信息所指示的数据表是该字段名称所指示的字段所归属的数据表。该数据表信息例如可以包括该数据表的数据表名称和该数据表所归属的数据库的数据库名称。
[0105] 步骤C,若上述执行主体确定该层查询包括子查询,则上述执行主体可以获取该子查询所关联的字段信息列表,基于该字段信息列表,对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表。
[0106] 实践中,上述执行主体可以通过调用预设的字段信息获取方法来确定该层查询的查询内容所关联的字段的字段信息。上述执行主体本地可以预设两种字段信息获取方法。第一种字段信息获取方法的参数为字段别名。该字段信息获取方法可以返回所有数据表、子查询用到的与该字段别名相关联的字段的字段信息。第二种字段信息获取方法有两个参数。其中,第一个参数为表别名或子查询别名。第二个参数为字段别名。第二种字段信息获取方法可以返回特定的数据表或子查询用到的与字段别名相关联的字段的字段信息。应该理解,在没有设定字段别名时,字段别名可以用字段名称表示。
[0107] 需要指出的是,若该层查询所对应的查询对象中的第二属性包括目标属性值(所包括的TOK_SLECXPR语法部分的第一个子节点为TOK_FUNCTION节点的属性值),则上述执行主体可以递归调用预设的第一分析方法对目标属性值进行分析。其中,第一分析方法的参数可以包括节点名称、函数集合、字段信息列表等。
[0108] 以“SELECT func1(func2(column1),column2)”为例说明调用过程。其中,func1、func2为函数名称。column1、column2为字段名称。刚开始传入第一分析方法的节点名称为func1,函数集合和字段信息列表的内容皆为空。
[0109] 第一,初始化新的函数集合A,将传入的函数集合的内容放进函数集合A。由于传入的函数集合为空集合,因此,这时函数集合A的内容也为空。
[0110] 第二,判断节点类型。如果判断结果是函数,则可以将节点名称添加到函数集合A。这里,由于传入的节点名称是函数名称func1,所以可以判断出节点类型是函数。因此,可以将func1添加到函数集合A。
[0111] 第三,对下一个子节点调用第一分析方法。参数为下一个子节点的节点名称,函数集合A和上述字段信息列表。如果没有下一个子节点,则返回。这里,由于func1的下一个子节点为func2,因此可以调用第一分析方法。
[0112] 第四,初始化新的函数集合B,把传入的函数集合的内容(func1)放进函数集合B。
[0113] 第五,判断节点类型。如果判断结果是函数,可以将节点名称添加到函数集合B。这里,由于传入的节点名称是函数名称func2,所以可以判断出节点类型是函数。因此,可以将func2添加到函数集合B。
[0114] 第六,对下一个子节点调用第一分析方法。参数为下一个子节点的节点名称,函数集合B和上述字段信息列表。如果没有下一个子节点,则返回。这里,由于func2的下一个子节点为column1,因此可以调用第一分析方法。
[0115] 第七,初始化新的函数集合C。将传入的函数集合的内容(func1、func2)放进函数集合C,这时,函数集合C有两个元素。
[0116] 第八,判断节点类型。此时的判断结果是字段,可以调用预设的字段信息获取方法,获取该字段的字段信息。其中,该字段信息可以包括该字段的字段名称、该字段所归属的数据表的数据表信息、表示为空集合的函数信息等等。可以将函数集合C的内容添加到该空集合中,以表明func1和func2均作用于column1。而后将字段信息写入传入的字段信息列表。
[0117] 第九,由于column1没有下一个子节点,而func2只有column1一个子节点,因此需要返回到第三步,对func1的另一个子节点column2调用第一分析方法。这时,参数为column2、函数集合A和当前的字段信息列表。
[0118] 第十,初始化新的函数集合D,将传入的函数集合的内容(func1)放进函数集合D。这时,函数集合D有一个元素。
[0119] 第十一,判断节点类型。这里,判断结果是字段,可以调用预设的字段信息获取方法,获取该字段的字段信息。还可以将函数集合D的内容添加到该字段信息中的用于表示函数信息的空集合中,以表明func1作用于column2。而后可以将字段信息写入传入的字段信息列表。
[0120] 第十二,由于column2没有下一个子节点,而func1也没有未分析的子节点,因此可以返回。这时,字段信息列表中有两条字段信息,并且正确标识了作用于字段column1、column2的函数。
[0121] 在本实施例中,上述执行主体在对上述SQL语句所对应的各层查询执行以上分析操作后,上述执行主体便可以得到与上述SQL语句所对应的最外层查询相对应的字段信息列表。对于该字段信息列表中的字段信息,上述执行主体可以将该字段信息中的字段名称所指示的字段确定为目标字段,将该字段信息中的数据表信息所指示的数据表确定为与该目标字段对应的目标数据表,以及基于该字段信息中的函数信息确定与该目标字段对应的目标函数集合。例如,若该函数信息是用集合表示的信息,则上述执行主体可以将该函数信息确定为与该目标字段对应的目标函数集合。
[0122] 步骤404,获取目标数据表预先关联的字段描述信息。
[0123] 在本实施例中,上述执行主体可以获取目标数据表预先关联的字段描述信息。其中,该字段描述信息可以用于描述目标数据表中的字段的类别和使用方式。类别例如可以包括隐私字段、非隐私字段等。使用方式可以是允许的使用方式,也可以是禁止的使用方式,在此不做具体限定。
[0124] 需要说明的是,上述执行主体在执行完步骤402后,可以对所生成的每个查询对象中的第一属性的属性值进行数据表信息提取。其中,提取出的数据表信息可以包括数据表名称和与该数据表名称对应的数据库名称。而后,上述执行主体可以基于提取出的数据表信息,获取字段描述信息。例如,字段描述信息存储在用于管理元数据的服务器中,上述执行主体可以从该服务器中获取字段描述信息。然后,上述执行主体可以生成用于表征该数据表信息所指示的数据表与该字段描述信息之间的对应关系的对应关系信息。其中,对应关系信息可以是以数据表的表别名为关键字,以数据表所关联的字段描述信息为值的信息。这样,上述执行主体可以基于目标数据表的数据表名称和其所归属的数据库的数据库名称,从所生成的对应关系信息中查找用于表征目标数据表与其所关联的字段描述信息之间的对应关系的对应关系信息。然后从查找到的对应关系信息中获取目标数据表所关联的字段描述信息。
[0125] 步骤405,基于字段描述信息,确定目标字段是否归属于目标类别。
[0126] 在本实施例中,上述执行主体可以基于获取到的字段描述信息,确定目标字段是否归属于目标类别。例如,上述执行主体可以先在字段描述信息中查找出目标字段的字段名称所在的记录,而后确定该记录中的类别名称是否为目标类别的类别名称,若是,则上述执行主体可以确定目标字段归属于目标类别。
[0127] 步骤406,响应于确定目标字段归属于目标类别,确定目标函数集合是否为空集合。
[0128] 在本实施例中,上述执行主体可以响应于确定目标字段属于目标类别,确定与目标字段相对应的目标函数集合是否为空集合。若为空集合,则上述执行主体可以执行步骤408;否则,上述执行主体可以执行步骤407。
[0129] 步骤407,响应于确定目标函数集合不是空集合,基于字段描述信息,确定目标函数集合中的目标函数是否均是允许作用于目标字段的函数。
[0130] 在本实施例中,上述执行主体可以响应于确定目标字段所对应的目标函数集合不是空集合,基于获取到的字段描述信息,确定该目标函数集合中的目标函数是否均是允许作用于该目标字段的函数。例如,上述执行主体可以从获取到的字段描述信息中查找出目标字段所对应的记录,然后确定目标字段所对应的目标函数集合中的各个目标函数的函数名称是否均存在于该记录中;若是,则上述执行主体可以确定该目标函数集合中的各个目标函数均是允许作用于该目标字段的函数;否则,上述执行主体可以确定该目标函数集合中的各个目标函数不均是允许作用于该目标字段的函数,以及执行步骤408。
[0131] 步骤408,确定不允许查询SQL语句所指向的数据。
[0132] 在本实施例中,上述执行主体可以响应于确定目标字段所对应的目标函数集合为空集合,或者该目标函数集合中的目标函数不均是允许作用于该目标字段的函数,确定不允许查询上述SQL语句所指向的数据。
[0133] 从图4中可以看出,与图2对应的实施例相比,本实施例中的用于控制数据查询的方法的流程400突出了对SQL语句进行词法分析和语法分析生成抽象语法树、基于抽象语法树生成至少一个查询对象、以及基于所生成的查询对象确定目标字段和分别与目标字段对应的目标函数集合和目标数据表的步骤;目标函数集合为空集合时的处理步骤;以及目标函数集合不是空集合时的处理步骤。由此,本实施例描述的方案可以实现信息(例如目标字段、目标字段所对应的目标函数集合和目标数据表、是否允许查询数据查询请求所请求的数据等信息)确定方法的多样性,可以进一步提高确定结果的准确度,进而可以进一步确保归属于目标类别的字段下的数据的安全性,防止该数据被泄露。
[0134] 在本申请的各实施例提供的用于控制数据查询的方法的一种可选的实现方式中,该方法的执行主体(例如图1所示的服务器105)可以响应于确定不允许查询待执行的SQL语句所指向的数据,执行提醒操作。例如,上述执行主体可以生成告警信息,以及返回该告警信息,以提醒查询内容不被允许。其中,该告警信息例如可以是文本、语音或动画等形式的信息,在此不做具体限定。
[0135] 进一步参考图5,作为对上述各图所示方法的实现,本申请提供了一种用于控制数据查询的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
[0136] 如图5所示,本实施例的用于控制数据查询的装置500包括:第一确定单元501被配置成基于待执行的SQL语句,确定目标字段和分别与目标字段对应的目标函数集合、目标数据表;获取单元502被配置成获取目标数据表预先关联的字段描述信息,其中,字段描述信息可以用于描述目标数据表中的字段的使用方式;第二确定单元503被配置成基于字段描述信息,对目标字段和目标函数集合进行分析,确定是否允许查询SQL语句所指向的数据。
[0137] 在本实施例中,用于控制数据查询的装置500中:第一确定单元501、获取单元502和第二确定单元503的具体处理及其所带来的技术效果可参考图2对应实施例中的步骤201、步骤202和步骤203的相关说明,在此不再赘述。
[0138] 在本实施例的一些可选的实现方式中,字段描述信息还可以用于描述目标数据表中的字段的类别;以及第二确定单元503可以包括:第一确定子单元(图中未示出),被配置成基于字段描述信息,确定目标字段是否归属于目标类别;第二确定子单元(图中未示出),被配置成响应于确定目标字段归属于目标类别,基于目标函数集合,确定是否允许查询上述数据。
[0139] 在本实施例的一些可选的实现方式中,第二确定子单元可以进一步被配置成:确定目标函数集合是否为空集合;响应于确定目标函数集合是空集合,确定不允许查询上述数据。
[0140] 在本实施例的一些可选的实现方式中,第二确定子单元还可以进一步被配置成:响应于确定目标函数集合不是空集合,基于字段描述信息,确定目标函数集合中的目标函数是否均是允许作用于目标字段的函数;响应于确定目标函数集合中的目标函数不均是允许作用于目标字段的函数,确定不允许查询上述数据。
[0141] 在本实施例的一些可选的实现方式中,第一确定单元501可以包括:第一生成子单元(图中未示出),被配置成对SQL语句进行词法分析和语法分析,生成抽象语法树;第二生成子单元(图中未示出),被配置成对抽象语法树进行分析,生成至少一个查询对象,其中,该至少一个查询对象可以包括与SQL语句所对应的每层查询相对应的查询对象,查询对象可以包括第一属性和第二属性,第一属性可以用于表征数据表的表别名到数据表的语法部分的映射关系,第二属性可以用于表征查询内容的查询别名到查询内容的语法部分的映射关系;确定子单元(图中未示出),被配置成对至少一个查询对象进行分析,确定目标字段、目标函数集合和目标数据表。
[0142] 在本实施例的一些可选的实现方式中,确定子单元可以包括:分析模块(图中未示出),被配置成按由内到外的查询次序,依次对SQL语句所对应的每层查询执行以下分析操作:确定该层查询是否包括子查询;若否,则对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表,其中,字段信息可以包括字段名称、分别与字段名称对应的函数信息和数据表信息;确定模块(图中未示出),被配置成对于SQL语句所对应的最外层查询所关联的字段信息列表中的字段信息,将该字段信息中的字段名称所指示的字段确定为目标字段,将该字段信息中的数据表信息所指示的数据表确定为与该目标字段对应的目标数据表,以及基于该字段信息中的函数信息生成与该目标字段对应的目标函数集合。
[0143] 在本实施例的一些可选的实现方式中,分析模块可以进一步被配置成:响应于确定该层查询包括子查询,基于该子查询所关联的字段信息列表,对该层查询所对应的查询对象中的第一属性和第二属性的属性值进行分析,确定该层查询的查询内容所关联的字段的字段信息,生成与该层查询相关联的字段信息列表。
[0144] 在本实施例的一些可选的实现方式中,上述装置500还可以包括:生成单元(图中未示出),被配置成对于至少一个查询对象中的查询对象,对该查询对象中的第一属性的属性值进行数据表信息提取,基于提取出的数据表信息获取字段描述信息,生成用于表征该数据表信息所指示的数据表与该字段描述信息之间的对应关系的对应关系信息。
[0145] 在本实施例的一些可选的实现方式中,获取单元502可以进一步被配置成:从所生成的对应关系信息中查找出用于表征目标数据表与其所关联的字段描述信息之间的对应关系的对应关系信息;从查找到的对应关系信息中获取目标数据表所关联的字段描述信息。
[0146] 在本实施例的一些可选的实现方式中,上述装置500还可以包括:提醒单元(图中未示出),被配置成响应于确定不允许查询上述数据,执行提醒操作。
[0147] 本申请的上述实施例提供的装置,基于待执行的SQL语句确定目标字段和分别与目标字段对应的目标函数集合、目标数据表,而后获取目标数据表预先关联的字段描述信息,以便基于字段描述信息,对目标字段和目标函数集合进行分析,确定是否允许查询上述SQL语句所指向的数据。从而有效利用了字段描述信息,实现了对字段的使用方式的控制,因此可以确保数据的安全性。
[0148] 下面参考图6,其示出了适于用来实现本申请实施例的电子设备(例如图1所示的服务器105)的计算机系统600的结构示意图。图6示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
[0149] 如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
[0150] 以下部件连接至I/O接口605:包括键盘鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
[0151] 特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的系统中限定的上述功能。
[0152] 需要说明的是,本申请所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
[0153] 可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或信息存储端上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0154] 附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0155] 描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括第一确定单元、获取单元和第二确定单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一确定单元还可以被描述为“基于待执行的SQL语句确定目标字段和分别与目标字段对应的目标函数集合、目标数据表的单元”。
[0156] 作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备:基于待执行的SQL语句,确定目标字段和分别与目标字段对应的目标函数集合、目标数据表;获取目标数据表预先关联的字段描述信息,其中,字段描述信息可以用于描述目标数据表中的字段的使用方式;基于字段描述信息,对目标字段和目标函数集合进行分析,确定是否允许查询SQL语句所指向的数据。
[0157] 以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈