CN107391384A - 一种sql语句检测方法及系统 - Google Patents
一种sql语句检测方法及系统 Download PDFInfo
- Publication number
- CN107391384A CN107391384A CN201710693871.XA CN201710693871A CN107391384A CN 107391384 A CN107391384 A CN 107391384A CN 201710693871 A CN201710693871 A CN 201710693871A CN 107391384 A CN107391384 A CN 107391384A
- Authority
- CN
- China
- Prior art keywords
- sql statement
- detected
- running log
- syntax tree
- generation
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3616—Software analysis for verifying properties of programs using software metrics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种SQL语句检测方法,包括将待检测SQL语句转换为语法树,将所述语法树与规则库中的预设规则进行匹配生成匹配结果,基于所述匹配结果生成检测报告。使用预设的规则与SQL语句转换成的语法树进行匹配,检测SQL语句的规范及性能,并生成检测报告,避免了人工检测SQL语句造成的遗漏或评审不准确,且极大的提高了SQL语句检测的效率,更加精准可靠。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种SQL语句检测方法及系统。
背景技术
SQL语句(Structured Query Language,结构化查询语言)是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
当前,程序中用到的SQL语句会在提交版本前发送到DBA(DatabaseAdministrator,数据库管理员)进行评审,DBA根据企业的数据库开发规范以及自身的经验,对SQL语句的规范和性能进行评估,而后给出修改意见。在这个过程会存在一些问题,比如DBA就要花费很多时间进行人工的审核,可能会出现遗漏的情况,或评审不准确。
发明内容
有鉴于此,本发明提供了一种SQL语句检测方法,使用预设的规则与SQL语句转换成的语法树进行匹配,检测SQL语句的规范及性能,并生成检测报告,避免了人工检测SQL语句造成的遗漏或评审不准确,且极大的提高了SQL语句检测的效率,更加精准可靠。
本发明提供了一种SQL语句检测方法,包括:
将待检测SQL语句转换为语法树;
将所述语法树与规则库中的预设规则进行匹配生成匹配结果;
基于所述匹配结果生成检测报告。
优选地,还包括:
当所述语法树无法与所述规则库中的规则进行匹配时,使用自定义库中的正则表达式与所述语法树进行匹配生成所述匹配结果。
优选地,还包括:
运行待检测软件生成运行日志;
解析所述运行日志生成所述待检测SQL语句。
优选地,所述解析所述运行日志生成所述待检测SQL语句包括:
将所述运行日志分割为至少两个预设大小的分运行日志;
解析每个所述分运行日志生成所述待检测SQL语句。
优选地,所述解析所述运行日志生成所述待检测SQL语句包括:
解析所述运行日志生成待分类SQL语句;
分类所述待分类SQL语句生成所述待检测SQL语句。
一种SQL语句检测系统,包括:
转换模块,所述转换模块用于将待检测SQL语句转换为语法树;
匹配模块,所述匹配模块用于将所述语法树与规则库中的预设规则进行匹配生成匹配结果;
报告生成模块,所述报告生成模块用于基于所述匹配结果生成检测报告。
优选地,所述匹配模块还用于当所述语法树无法与所述规则库中的规则进行匹配时,使用自定义库中的正则表达式与所述语法树进行匹配生成所述匹配结果。
优选地,还包括:
运行模块,所述运行模块用于运行待检测软件生成运行日志;
解析模块,所述解析模块用于解析所述运行日志生成所述待检测SQL语句。
优选地,所述解析模块包括分割单元及解析单元,其中:
所述分割单元用于将所述运行日志分割为至少两个预设大小的分运行日志;
所述解析单元用于解析每个所述分运行日志生成所述待检测SQL语句。
优选地,所述解析模块包括解析单元及分类单元,其中:
所述解析单元用于所述分解单元包括解析所述运行日志生成待分类SQL语句;
所述分类单元用于分类所述待分类SQL语句生成所述待检测SQL语句。
从上述技术方案可以看出,本发明提供了一种SQL语句检测方法,包括将待检测SQL语句转换为语法树,将所述语法树与规则库中的预设规则进行匹配生成匹配结果,基于所述匹配结果生成检测报告。使用预设的规则与SQL语句转换成的语法树进行匹配,检测SQL语句的规范及性能,并生成检测报告,避免了人工检测SQL语句造成的遗漏或评审不准确,且极大的提高了SQL语句检测的效率,更加精准可靠。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明公开的一种SQL语句检测方法实施例1的方法流程图;
图2为本发明公开的一种SQL语句检测方法实施例2的方法流程图;
图3为本发明公开的一种SQL语句检测方法实施例3的方法流程图;
图4为本发明公开的一种SQL语句检测系统实施例1的结构示意图;
图5为本发明公开的一种SQL语句检测系统实施例2的结构示意图;
图6为本发明公开的一种SQL语句检测系统实施例3的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,为本发明公开的一种SQL语句检测方法实施例1的流程图,包括:
S101、将待检测SQL语句转换为语法树;
在进行匹配之前,先进行检查,保证SQL语句的合法性,然后需要先将SQL语句生成对应的语法结构信息lex,即语法树,便于后续的规则匹配与性能评估。
以“查询分数大于60的,按名字排序的前100名学生”的sql太语句为例,生成的lex结构为:
S102、将语法树与规则库中的预设规则进行匹配生成匹配结果;
可以对lex中的元素进行细化,以及对规范中的规则进行归类,然后可以从lex中获取有用的信息,通过函数表达式的计算形成规则,然后与规则库中的预设规则进行匹配,并生成匹配结果。预设规则来源于基准测试结果、线上问题分析结论以及专家经验。规则库可修改和更新。
下面对规则进行描述:
Command类型:lex信息中对应的command字段,常用的取值有SELECT,CREATE_TABLE,CREATE_INDEX,ALTER_TABLE,UPDATE,INSERT,INSERT_SELECT,DELETE等。
Lex节点:根据sql语法检测生成的语法结构,找到获取需要信息的节点位置,从lex节点算起,比如:想要获取数据库名的信息,lex节点则为db,而不是lex[‘db’];想要获取where子句的信息,lex节点为lex[‘where’],而不是lex[‘lex’][‘where’]。对于不考虑lex内容的规则,可不填写
函数表达式:对于节点的规则匹配算法,比如:数据库名的长度不能超过30,则表达式为strlen(node)>30,表达式中使用的函数需要时php支持的,节点的值直接用node表示。对于不需要表达式的时候,可直接填写true或者false。
S103、基于匹配结果生成检测报告;
将匹配的结果写入检测报告,检测报告会对风险进行提醒,并给出修改意见。可将测试结果报告发送给DBA与RD进行质量评估,对于存在问题和性能缺陷的SQL让RD进行修改。
从上述技术方案可以看出,本发明提供了一种SQL语句检测方法,包括将待检测SQL语句转换为语法树,将语法树与规则库中的预设规则进行匹配生成匹配结果,基于匹配结果生成检测报告。使用预设的规则与SQL语句进行匹配,检测SQL语句的规范及性能,并生成检测报告,避免了人工检测SQL语句造成的遗漏或评审不准确,且极大的提高了SQL语句检测的效率。
如图2所示,为本发明公开的一种SQL语句检测方法实施例2的流程图,包括:
S201、将待检测SQL语句转换为语法树;
在进行匹配之前,先进行检查,保证SQL语句的合法性,然后需要先将SQL语句生成对应的语法结构信息lex,即语法树,便于后续的规则匹配与性能评估。
以“查询分数大于60的,按名字排序的前100名学生”的sql太语句为例,生成的lex结构为:
S202、将语法树与规则库中的预设规则进行匹配生成匹配结果;
可以对lex中的元素进行细化,以及对规范中的规则进行归类,然后可以从lex中获取有用的信息,通过函数表达式的计算形成规则,然后与规则库中的预设规则进行匹配,并生成匹配结果。预设规则来源于基准测试结果、线上问题分析结论以及专家经验。规则库可修改和更新。
下面对规则进行描述:
Command类型:lex信息中对应的command字段,常用的取值有SELECT,CREATE_TABLE,CREATE_INDEX,ALTER_TABLE,UPDATE,INSERT,INSERT_SELECT,DELETE等。
Lex节点:根据sql语法检测生成的语法结构,找到获取需要信息的节点位置,从lex节点算起,比如:想要获取数据库名的信息,lex节点则为db,而不是lex[‘db’];想要获取where子句的信息,lex节点为lex[‘where’],而不是lex[‘lex’][‘where’]。对于不考虑lex内容的规则,可不填写
函数表达式:对于节点的规则匹配算法,比如:数据库名的长度不能超过30,则表达式为strlen(node)>30,表达式中使用的函数需要时php支持的,节点的值直接用node表示。对于不需要表达式的时候,可直接填写true或者false。
S203、当语法树无法与规则库中的规则进行匹配时,使用自定义库中的正则表达式与语法树进行匹配生成匹配结果;
当无法通过lex信息获取相关信息时,还可以直接通过正则表达式进行匹配。
下面对自定义正则表达式进行举例说明:
举例1,创建表的时候,表的名称必须以小写字母开头,这样可通过lex简单实现,对应规则信息为:
规则描述:创建表的时候,表的名称必须以小写字母开头
Command:CREATE_TABLE
Lex节点:table
表达式:preg_match(“/^[a-z]/”,node)
举例2:禁止使用enum,set等类型,这个就无法从lex获取相应信息,但是可以直接使用正则表达式,对应的规则信息为:
规则描述:禁止使用enum,set类型
Command:CREATE_TABLE
正则表达式:/[enum|set]/
规则内容是存放在数据库中,对应数据表tbl_rule_match。
S204、基于匹配结果生成检测报告;
将匹配的结果写入检测报告,检测报告会对风险进行提醒,并给出修改意见。可将测试结果报告发送给DBA与RD进行质量评估,对于存在问题和性能缺陷的SQL让RD进行修改。
在本实施例中,提出了使用正则表达式进行匹配的方法,避免了无法提取lex相关信息时,无法进行匹配的问题,扩大了本技术方案的适用范围。
如图3所示,为本发明公开的一种SQL语句检测方法实施例3的流程图,包括:
S301、运行待检测软件生成运行日志;
待检测SQL语句可能由用户直接输入,也可在编写好的软件中,本实施例适用于待SQL检测语句在编写好的软件中的情况。首先需要运行待检测软件,并生成运行日志。
S302、解析运行日志生成待检测SQL语句;
可对运行日志进行解析,从而生成SQL语句。
为进一步优化本方案,解析运行日志生成待检测SQL语句包括:
将运行日志分割为至少两个预设大小的分运行日志;
因为运行日志较大,采用单线程解析非常耗费时间,因此,可将运行日志分割为多个预设大小的分运行日志,预设大小可以100兆。
解析每个分运行日志生成待检测SQL语句;
将分运行日志进行多线程解析,并生成待检测SQL语句。采用分割运行日志,并多线程解析的方式,可有效提高解析的速度。
为进一步优化本方案,解析运行日志生成待检测SQL语句包括:
解析运行日志生成待分类SQL语句,分类待分类SQL语句生成待检测SQL语句,分类SQL语句可便于后续的规则匹配,提高匹配效率,此外,还可统计每个SQL语句出现次数、影响行数和响应时间。
SQL语句的分类及多线程解析可共同进行,也可单独进行。
S303、将待检测SQL语句转换为语法树;
在进行匹配之前,先进行检查,保证SQL语句的合法性,然后需要先将SQL语句生成对应的语法结构信息lex,即语法树,便于后续的规则匹配与性能评估。
以“查询分数大于60的,按名字排序的前100名学生”的sql太语句为例,生成的lex结构为:
S304、将语法树与规则库中的预设规则进行匹配生成匹配结果;
可以对lex中的元素进行细化,以及对规范中的规则进行归类,然后可以从lex中获取有用的信息,通过函数表达式的计算形成规则,然后与规则库中的预设规则进行匹配,并生成匹配结果。预设规则来源于基准测试结果、线上问题分析结论以及专家经验。规则库可修改和更新。
下面对规则进行描述:
Command类型:lex信息中对应的command字段,常用的取值有SELECT,CREATE_TABLE,CREATE_INDEX,ALTER_TABLE,UPDATE,INSERT,INSERT_SELECT,DELETE等。
Lex节点:根据sql语法检测生成的语法结构,找到获取需要信息的节点位置,从lex节点算起,比如:想要获取数据库名的信息,lex节点则为db,而不是lex[‘db’];想要获取where子句的信息,lex节点为lex[‘where’],而不是lex[‘lex’][‘where’]。对于不考虑lex内容的规则,可不填写
函数表达式:对于节点的规则匹配算法,比如:数据库名的长度不能超过30,则表达式为strlen(node)>30,表达式中使用的函数需要时php支持的,节点的值直接用node表示。对于不需要表达式的时候,可直接填写true或者false。
S305、基于匹配结果生成检测报告;
将匹配的结果写入检测报告,检测报告会对风险进行提醒,并给出修改意见。可将测试结果报告发送给DBA与RD进行质量评估,对于存在问题和性能缺陷的SQL让RD进行修改。
如图4所示,为本发明公开的一种SQL语句检测系统实施例1的结构示意图,包括:
转换模块,转换模块用于将待检测SQL语句转换为语法树;
在进行匹配之前,先进行检查,保证SQL语句的合法性,然后需要先将SQL语句生成对应的语法结构信息lex,即语法树,便于后续的规则匹配与性能评估。
以“查询分数大于60的,按名字排序的前100名学生”的sql太语句为例,生成的lex结构为:
匹配模块,匹配模块用于将语法树与规则库中的预设规则进行匹配生成匹配结果;
可以对lex中的元素进行细化,以及对规范中的规则进行归类,然后可以从lex中获取有用的信息,通过函数表达式的计算形成规则,然后与规则库中的预设规则进行匹配,并生成匹配结果。预设规则来源于基准测试结果、线上问题分析结论以及专家经验。规则库可修改和更新。
下面对规则进行描述:
Command类型:lex信息中对应的command字段,常用的取值有SELECT,CREATE_TABLE,CREATE_INDEX,ALTER_TABLE,UPDATE,INSERT,INSERT_SELECT,DELETE等。
Lex节点:根据sql语法检测生成的语法结构,找到获取需要信息的节点位置,从lex节点算起,比如:想要获取数据库名的信息,lex节点则为db,而不是lex[‘db’];想要获取where子句的信息,lex节点为lex[‘where’],而不是lex[‘lex’][‘where’]。对于不考虑lex内容的规则,可不填写
函数表达式:对于节点的规则匹配算法,比如:数据库名的长度不能超过30,则表达式为strlen(node)>30,表达式中使用的函数需要时php支持的,节点的值直接用node表示。对于不需要表达式的时候,可直接填写true或者false。
报告生成模块,报告生成模块用于基于匹配结果生成检测报告;
将匹配的结果写入检测报告,检测报告会对风险进行提醒,并给出修改意见。可将测试结果报告发送给DBA与RD进行质量评估,对于存在问题和性能缺陷的SQL让RD进行修改。
从上述技术方案可以看出,本发明提供了一种SQL语句检测系统,工作原理为将待检测SQL语句转换为语法树,将语法树与规则库中的预设规则进行匹配生成匹配结果,基于匹配结果生成检测报告。使用预设的规则与SQL语句进行匹配,检测SQL语句的规范及性能,并生成检测报告,避免了人工检测SQL语句造成的遗漏或评审不准确,且极大的提高了SQL语句检测的效率。
如图5所示,为本发明公开的一种SQL语句检测系统实施例2的结构示意图,包括:
转换模块,转换模块用于将待检测SQL语句转换为语法树;
在进行匹配之前,先进行检查,保证SQL语句的合法性,然后需要先将SQL语句生成对应的语法结构信息lex,即语法树,便于后续的规则匹配与性能评估。
以“查询分数大于60的,按名字排序的前100名学生”的sql太语句为例,生成的lex结构为:
匹配模块,匹配模块用于将语法树与规则库中的预设规则进行匹配生成匹配结果;
可以对lex中的元素进行细化,以及对规范中的规则进行归类,然后可以从lex中获取有用的信息,通过函数表达式的计算形成规则,然后与规则库中的预设规则进行匹配,并生成匹配结果。预设规则来源于基准测试结果、线上问题分析结论以及专家经验。规则库可修改和更新。
下面对规则进行描述:
Command类型:lex信息中对应的command字段,常用的取值有SELECT,CREATE_TABLE,CREATE_INDEX,ALTER_TABLE,UPDATE,INSERT,INSERT_SELECT,DELETE等。
Lex节点:根据sql语法检测生成的语法结构,找到获取需要信息的节点位置,从lex节点算起,比如:想要获取数据库名的信息,lex节点则为db,而不是lex[‘db’];想要获取where子句的信息,lex节点为lex[‘where’],而不是lex[‘lex’][‘where’]。对于不考虑lex内容的规则,可不填写
函数表达式:对于节点的规则匹配算法,比如:数据库名的长度不能超过30,则表达式为strlen(node)>30,表达式中使用的函数需要时php支持的,节点的值直接用node表示。对于不需要表达式的时候,可直接填写true或者false。
匹配模块还用于当语法树无法与规则库中的规则进行匹配时,使用自定义库中的正则表达式与语法树进行匹配生成匹配结果;
当无法通过lex信息获取相关信息时,还可以直接通过正则表达式进行匹配。
下面对自定义正则表达式进行举例说明:
举例1:创建表的时候,表的名称必须以小写字母开头,这样可通过lex简单实现,对应规则信息为:
规则描述:创建表的时候,表的名称必须以小写字母开头
Command:CREATE_TABLE
Lex节点:table
表达式:preg_match(“/^[a-z]/”,node)
举例2:禁止使用enum,set等类型,这个就无法从lex获取相应信息,但是可以直接使用正则表达式,对应的规则信息为:
规则描述:禁止使用enum,set类型
Command:CREATE_TABLE
正则表达式:/[enum|set]/
规则内容是存放在数据库中,对应数据表tbl_rule_match。
报告生成模块,报告生成模块用于基于匹配结果生成检测报告;
将匹配的结果写入检测报告,检测报告会对风险进行提醒,并给出修改意见。可将测试结果报告发送给DBA与RD进行质量评估,对于存在问题和性能缺陷的SQL让RD进行修改。
在本实施例中,提出了使用正则表达式进行匹配的方法,避免了无法提取lex相关信息时,无法进行匹配的问题,扩大了本技术方案的适用范围。
如图6所示,为本发明公开的一种SQL语句检测系统实施例3的结构示意图,包括:
运行模块,运行模块用于运行待检测软件生成运行日志;
待检测SQL语句可能由用户直接输入,也可在编写好的软件中,本实施例适用于待SQL检测语句在编写好的软件中的情况。首先需要运行待检测软件,并生成运行日志。
解析模块,解析模块用于解析运行日志生成待检测SQL语句;
可对运行日志进行解析,从而生成SQL语句。
为进一步优化本方案,解析模块包括分割单元及解析单元;
分割单元用于将运行日志分割为至少两个预设大小的分运行日志;
因为运行日志较大,采用单线程解析非常耗费时间,因此,可将运行日志分割为多个预设大小的分运行日志,预设大小可以100兆。
解析单元用于解析每个分运行日志生成待检测SQL语句;
将分运行日志进行多线程解析,并生成待检测SQL语句。采用分割运行日志,并多线程解析的方式,可有效提高解析的速度。
为进一步优化本方案,解析模块包括解析单元及分类单元;
解析单元用于分解单元包括解析运行日志生成待分类SQL语句,分类单元用于分类待分类SQL语句生成待检测SQL语句,分类SQL语句可便于后续的规则匹配,提高匹配效率,此外,还可统计每个SQL语句出现次数、影响行数和响应时间。
SQL语句的分类及多线程解析可共同进行,也可单独进行。
转换模块,转换模块用于将待检测SQL语句转换为语法树;
在进行匹配之前,先进行检查,保证SQL语句的合法性,然后需要先将SQL语句生成对应的语法结构信息lex,即语法树,便于后续的规则匹配与性能评估。
以“查询分数大于60的,按名字排序的前100名学生”的sql太语句为例,生成的lex结构为:
匹配模块,匹配模块用于将语法树与规则库中的预设规则进行匹配生成匹配结果;
可以对lex中的元素进行细化,以及对规范中的规则进行归类,然后可以从lex中获取有用的信息,通过函数表达式的计算形成规则,然后与规则库中的预设规则进行匹配,并生成匹配结果。预设规则来源于基准测试结果、线上问题分析结论以及专家经验。规则库可修改和更新。
下面对规则进行描述:
Command类型:lex信息中对应的command字段,常用的取值有SELECT,CREATE_TABLE,CREATE_INDEX,ALTER_TABLE,UPDATE,INSERT,INSERT_SELECT,DELETE等。
Lex节点:根据sql语法检测生成的语法结构,找到获取需要信息的节点位置,从lex节点算起,比如:想要获取数据库名的信息,lex节点则为db,而不是lex[‘db’];想要获取where子句的信息,lex节点为lex[‘where’],而不是lex[‘lex’][‘where’]。对于不考虑lex内容的规则,可不填写
函数表达式:对于节点的规则匹配算法,比如:数据库名的长度不能超过30,则表达式为strlen(node)>30,表达式中使用的函数需要时php支持的,节点的值直接用node表示。对于不需要表达式的时候,可直接填写true或者false。
报告生成模块,报告生成模块用于基于匹配结果生成检测报告;
将匹配的结果写入检测报告,检测报告会对风险进行提醒,并给出修改意见。可将测试结果报告发送给DBA与RD进行质量评估,对于存在问题和性能缺陷的SQL让RD进行修改。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种SQL语句检测方法,其特征在于,包括:
将待检测SQL语句转换为语法树;
将所述语法树与规则库中的预设规则进行匹配生成匹配结果;
基于所述匹配结果生成检测报告。
2.如权利要求1所述的检测方法,其特征在于,还包括:
当所述语法树无法与所述规则库中的规则进行匹配时,使用自定义库中的正则表达式与所述语法树进行匹配生成所述匹配结果。
3.如权利要求1或2所述的检测方法,其特征在于,还包括:
运行待检测软件生成运行日志;
解析所述运行日志生成所述待检测SQL语句。
4.如权利要求3所述的检测方法,其特征在于,所述解析所述运行日志生成所述待检测SQL语句包括:
将所述运行日志分割为至少两个预设大小的分运行日志;
解析每个所述分运行日志生成所述待检测SQL语句。
5.如权利要求3所述的检测方法,其特征在于,所述解析所述运行日志生成所述待检测SQL语句包括:
解析所述运行日志生成待分类SQL语句;
分类所述待分类SQL语句生成所述待检测SQL语句。
6.一种SQL语句检测系统,其特征在于,包括:
转换模块,所述转换模块用于将待检测SQL语句转换为语法树;
匹配模块,所述匹配模块用于将所述语法树与规则库中的预设规则进行匹配生成匹配结果;
报告生成模块,所述报告生成模块用于基于所述匹配结果生成检测报告。
7.如权利要求6所述的检测系统,其特征在于,所述匹配模块还用于当所述语法树无法与所述规则库中的规则进行匹配时,使用自定义库中的正则表达式与所述语法树进行匹配生成所述匹配结果。
8.如权利要求6或7所述的检测系统,其特征在于,还包括:
运行模块,所述运行模块用于运行待检测软件生成运行日志;
解析模块,所述解析模块用于解析所述运行日志生成所述待检测SQL语句。
9.如权利要求8所述的检测系统,其特征在于,所述解析模块包括分割单元及解析单元,其中:
所述分割单元用于将所述运行日志分割为至少两个预设大小的分运行日志;
所述解析单元用于解析每个所述分运行日志生成所述待检测SQL语句。
10.如权利要求8所述的检测系统,其特征在于,所述解析模块包括解析单元及分类单元,其中:
所述解析单元用于所述分解单元包括解析所述运行日志生成待分类SQL语句;
所述分类单元用于分类所述待分类SQL语句生成所述待检测SQL语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710693871.XA CN107391384A (zh) | 2017-08-14 | 2017-08-14 | 一种sql语句检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710693871.XA CN107391384A (zh) | 2017-08-14 | 2017-08-14 | 一种sql语句检测方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107391384A true CN107391384A (zh) | 2017-11-24 |
Family
ID=60356017
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710693871.XA Pending CN107391384A (zh) | 2017-08-14 | 2017-08-14 | 一种sql语句检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107391384A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109062918A (zh) * | 2018-05-31 | 2018-12-21 | 阿里巴巴集团控股有限公司 | 一种sql语句转换的方法及装置 |
CN110164216A (zh) * | 2019-05-23 | 2019-08-23 | 福建工程学院 | 一种sql在线评测系统 |
CN110633290A (zh) * | 2018-06-20 | 2019-12-31 | 苏宁易购集团股份有限公司 | 一种sql语句分析方法及分析装置 |
CN110716912A (zh) * | 2018-07-12 | 2020-01-21 | 马上消费金融股份有限公司 | 一种sql性能检测方法及服务器 |
CN111078538A (zh) * | 2019-11-29 | 2020-04-28 | 杭州安恒信息技术股份有限公司 | 基于jmh的规则自动化测试的方法 |
CN112445812A (zh) * | 2020-11-27 | 2021-03-05 | 中原银行股份有限公司 | 一种结构化查询语句处理方法及装置 |
CN112527794A (zh) * | 2020-12-07 | 2021-03-19 | 广州海量数据库技术有限公司 | 实现数据库中集合数据类型的数据处理方法及系统 |
CN112948415A (zh) * | 2019-12-20 | 2021-06-11 | 深圳市明源云链互联网科技有限公司 | Sql语句检测方法、装置、终端设备及存储介质 |
CN113760945A (zh) * | 2020-08-11 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 一种审核sql语句的方法及装置 |
CN114896269A (zh) * | 2022-05-31 | 2022-08-12 | 北京达佳互联信息技术有限公司 | 结构化查询语句检测方法、装置、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102375826A (zh) * | 2010-08-13 | 2012-03-14 | 中国移动通信集团公司 | Sql脚本解析方法、装置及系统 |
US20140181073A1 (en) * | 2012-12-20 | 2014-06-26 | Business Objects Software Ltd. | Method and system for generating optimal membership-check queries |
CN104123497A (zh) * | 2014-07-04 | 2014-10-29 | 北京神州绿盟信息安全科技股份有限公司 | 一种防御sql注入的方法、装置及系统 |
CN104199831A (zh) * | 2014-07-31 | 2014-12-10 | 深圳市腾讯计算机系统有限公司 | 信息处理方法及装置 |
CN104679646A (zh) * | 2013-11-29 | 2015-06-03 | 阿里巴巴集团控股有限公司 | 一种用于检测sql代码缺陷的方法和装置 |
CN105786710A (zh) * | 2016-03-22 | 2016-07-20 | 中国银行股份有限公司 | 一种程序代码复查方法及引擎 |
-
2017
- 2017-08-14 CN CN201710693871.XA patent/CN107391384A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102375826A (zh) * | 2010-08-13 | 2012-03-14 | 中国移动通信集团公司 | Sql脚本解析方法、装置及系统 |
US20140181073A1 (en) * | 2012-12-20 | 2014-06-26 | Business Objects Software Ltd. | Method and system for generating optimal membership-check queries |
CN104679646A (zh) * | 2013-11-29 | 2015-06-03 | 阿里巴巴集团控股有限公司 | 一种用于检测sql代码缺陷的方法和装置 |
CN104123497A (zh) * | 2014-07-04 | 2014-10-29 | 北京神州绿盟信息安全科技股份有限公司 | 一种防御sql注入的方法、装置及系统 |
CN104199831A (zh) * | 2014-07-31 | 2014-12-10 | 深圳市腾讯计算机系统有限公司 | 信息处理方法及装置 |
CN105786710A (zh) * | 2016-03-22 | 2016-07-20 | 中国银行股份有限公司 | 一种程序代码复查方法及引擎 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109062918A (zh) * | 2018-05-31 | 2018-12-21 | 阿里巴巴集团控股有限公司 | 一种sql语句转换的方法及装置 |
CN110633290A (zh) * | 2018-06-20 | 2019-12-31 | 苏宁易购集团股份有限公司 | 一种sql语句分析方法及分析装置 |
CN110716912A (zh) * | 2018-07-12 | 2020-01-21 | 马上消费金融股份有限公司 | 一种sql性能检测方法及服务器 |
CN110164216A (zh) * | 2019-05-23 | 2019-08-23 | 福建工程学院 | 一种sql在线评测系统 |
CN110164216B (zh) * | 2019-05-23 | 2021-04-23 | 福建工程学院 | 一种sql在线评测系统 |
CN111078538A (zh) * | 2019-11-29 | 2020-04-28 | 杭州安恒信息技术股份有限公司 | 基于jmh的规则自动化测试的方法 |
CN111078538B (zh) * | 2019-11-29 | 2023-06-20 | 杭州安恒信息技术股份有限公司 | 基于jmh的规则自动化测试的方法 |
CN112948415A (zh) * | 2019-12-20 | 2021-06-11 | 深圳市明源云链互联网科技有限公司 | Sql语句检测方法、装置、终端设备及存储介质 |
CN113760945A (zh) * | 2020-08-11 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 一种审核sql语句的方法及装置 |
CN112445812A (zh) * | 2020-11-27 | 2021-03-05 | 中原银行股份有限公司 | 一种结构化查询语句处理方法及装置 |
CN112527794A (zh) * | 2020-12-07 | 2021-03-19 | 广州海量数据库技术有限公司 | 实现数据库中集合数据类型的数据处理方法及系统 |
CN114896269A (zh) * | 2022-05-31 | 2022-08-12 | 北京达佳互联信息技术有限公司 | 结构化查询语句检测方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391384A (zh) | 一种sql语句检测方法及系统 | |
CN108038222B (zh) | 用于信息系统建模和数据访问的实体-属性框架的系统 | |
US8386498B2 (en) | Message descriptions | |
US10129256B2 (en) | Distributed storage and distributed processing query statement reconstruction in accordance with a policy | |
US20150356128A1 (en) | Index key generating device, index key generating method, and search method | |
CN106407302B (zh) | 支持通过简单sql调用中间件数据库特有功能的方法 | |
EP3256962A1 (en) | Finding documents describing solutions to computing issues | |
US10521407B2 (en) | Grouping of database objects | |
CN111078702B (zh) | 一种sql语句分类管理及统一查询方法和装置 | |
WO2001022287A1 (en) | System and method for performing similarity searching | |
US8364714B2 (en) | Servicing query with access path security in relational database management system | |
CN106664224A (zh) | 通信系统的元数据增强型库存管理的方法和系统 | |
US9037552B2 (en) | Methods for analyzing a database and devices thereof | |
CN109840256A (zh) | 一种基于业务实体的查询实现方法 | |
CA2957674A1 (en) | Testing insecure computing environments using random data sets generated from characterizations of real data sets | |
CN109299200A (zh) | 将数据模型转换为数据库的方法、装置及设备 | |
CN108776702A (zh) | 一种数据填报页面自定义可视化配置方法 | |
US20230040635A1 (en) | Graph-based impact analysis of misconfigured or compromised cloud resources | |
CN106844369A (zh) | 对象化sql语句构造方法及装置 | |
US20100153430A1 (en) | Method of and Apparatus for Extraction and Analysis of Macro Operations within Query Language Statement | |
CN109902101A (zh) | 基于SparkSQL的透明分区方法及装置 | |
JP2016192202A (ja) | 照合処理システム、方法、及びプログラム | |
CN104462095B (zh) | 一种查询语句公共部分的提取方法及装置 | |
CN108399251A (zh) | 一种多层数据展现的智能生成器和数据展现方法 | |
CN112463814A (zh) | 一种数据查询方法及装置 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171124 |
|
RJ01 | Rejection of invention patent application after publication |