CN104679646B - 一种用于检测sql代码缺陷的方法和装置 - Google Patents

一种用于检测sql代码缺陷的方法和装置 Download PDF

Info

Publication number
CN104679646B
CN104679646B CN201310627037.2A CN201310627037A CN104679646B CN 104679646 B CN104679646 B CN 104679646B CN 201310627037 A CN201310627037 A CN 201310627037A CN 104679646 B CN104679646 B CN 104679646B
Authority
CN
China
Prior art keywords
defect
sql code
detected
rule
determining defects
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
CN201310627037.2A
Other languages
English (en)
Other versions
CN104679646A (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.)
Advanced New Technologies Co Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201310627037.2A priority Critical patent/CN104679646B/zh
Publication of CN104679646A publication Critical patent/CN104679646A/zh
Application granted granted Critical
Publication of CN104679646B publication Critical patent/CN104679646B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种用于检测SQL代码缺陷的方法,包括:分析待检测的SQL代码访问的源表中的数据分布情况,生成统计信息;判断所述统计信息是否含有缺陷判定规则集中的某一项或者多项缺陷判定规则对应的统计特征;若是,则判定所述待检测的SQL代码可能存在缺陷;所述缺陷判定规则,是指用于判定待检测的SQL代码可能存在缺陷的一个或者一系列统计特征;所述缺陷判定规则集,是指一个或者多个所述缺陷判定规则的集合。本申请同时提供一种用于检测SQL代码缺陷的装置。使用本申请提供的方法,能够深入到SQL代码的真实执行路径,发现潜在的SQL代码缺陷。

Description

一种用于检测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代码访问的源表中的数据分布情况。
可选的,所述获取与检测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代码,获取所述待检测的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代码,获取SQL代码涉及的源表范围和SQL代码可能产生的缺陷类型,然后仅在SQL代码涉及的源表中、分析与所述缺陷类型相关的数据分布情况,并且在进行缺陷判定的过程中只选择缺陷判定规则集中与所述缺陷类型相关的缺陷判定规则,不仅使判断结果更有针对性,而且能够有效减少分析统计过程和缺陷判定过程的工作量,达到提高检测效率的目的。
本申请的又一种优选实施方式中,可以灵活地对缺陷判定规则集进行设置,不仅可以采用检测SQL代码缺陷的常规的缺陷判定规则集,还可以根据SQL代码的具体应用类型进行设置,或者根据提供SQL代码的用户需求进行设置,从而能够比较灵活地、有针对性地、及时地发现SQL代码中存在的缺陷。
附图说明
图1为本申请第一实施例提供的用于检测SQL代码缺陷的方法的流程图;
图2为本申请第二实施例提供的用于检测SQL代码缺陷的装置的单元框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本书本申请不受下面公开的具体实施的限制。
在本申请中,分别提供了一种用于检测SQL代码缺陷的方法、以及一种用于检测SQL代码缺陷的装置。在下面的实施例中逐一进行详细说明。
请参考图1,其为本申请的一种用于检测SQL代码缺陷的方法实施例的流程示意图。所述方法包括如下步骤:
步骤S101:解析待检测的SQL代码,获取与检测SQL代码缺陷相关的限制信息。
本申请提供的用于检测SQL代码缺陷的方法,其核心在于,分析待检测的SQL代码访问的源表中的数据分布情况,根据数据分布情况存在的问题,判定待检测SQL代码可能存在缺陷。
数据库中包含大量的数据,如果逐表、逐行地进行分析,会耗费比较多的时间,因此本实施例提供了一种比较优选的实施方案,即:在进行数据分布的分析之前,先对待检测的SQL代码进行解析,获取与检测SQL代码缺陷相关的限制信息,从而使后续的数据分析过程和缺陷判定过程更有针对性,能够有效提高检测SQL代码缺陷的效率。
SQL代码的解析过程,是一个根据SQL语法标准、对SQL代码文本进行分析并确定其语法结构的一种比较复杂的语法分析过程,最终可以构建类似语法分析树、抽象语法树等层次化的数据结构。
一段SQL代码通常由关键字、标识符、各种类型的数值(整型、字符串等)、各种符号(包括运算符号、标点符号)等组成,SQL代码解析过程的重点,就是提取其中的关键字和标识符。
关键字(keyword),也称保留字(reserved word),是指程序代码中规定用途的单词。也就是说,只要在程序代码内部出现该单词,编译程序就认为是某种固定的用途。SQL标准中定义的关键字很多,例如在SQL代码中比较常见的有:select、case、when、cast、from、join、where等。
标识符,也就是标识的符号,指程序中一切自己指定的名称,例如变量名称、常量名称、数组名称、方法名称、参数名称、类名、接口名、对象名等等,具体到SQL代码中,标识符包含源表名称、字段名称等。
在实际实施过程中,可以自己编写针对SQL代码的语法解析模块,也可以使用数据库平台自带的SQL语法解析模块。在本实施例中,采用了数据库平台自带的SQL语法解析模块,对待检测的SQL代码进行解析,并将解析的结果存储在关系型数据库中。
然后,从上述关系型数据库中,获取与检测SQL代码缺陷相关的限制信息。在本实施例中,与检测SQL代码缺陷相关的限制信息,包含两类:
1)待检测SQL代码访问的源表范围,获取该信息后,在后续的分析数据分布情况的步骤中,只需要在待检测SQL代码访问的源表中进行数据分布情况的分析就可以了,其他与待检测SQL代码无关的源表,不用进行分析。
2)待检测SQL代码可能产生的缺陷类型,即:根据SQL语法解析模块输出的SQL关键字和/或标识符,确定所述待检测SQL代码可能产生的缺陷类型,例如:待检测SQL代码中包含Join关键字,那么待检测SQL代码可能产生的缺陷类型就包含:关联丢失缺陷。
在本实施例中,从SQL语法解析模块的输出中获取了以下信息,并确定了待检测SQL代码访问的源表范围和可能产生的缺陷类型:
解析待检测SQL代码获取的限制信息
在后续分析数据分布情况的步骤S102中,只需要针对待检测SQL代码涉及的源表a和源表d中的数据进行分析,并且只需要针对下述5种缺陷类型进行分析:字段空值缺陷、字段重复值缺陷、关联丢失缺陷、条件行数占比缺陷和类型转换缺陷。
本实施例中,待检测SQL代码涉及上述5种缺陷类型,在其他实施方式中,根据待检测SQL代码的不同,其涉及的缺陷类型也会不同,可能包含其他新的缺陷类型。待检SQL代码可能产生的具体的缺陷类型和/或数目,不是本申请的核心,本申请对此不作限定。
另外,在本步骤中,通过解析待检测的SQL代码,获取的待检测SQL代码可能产生的缺陷类型,不仅可以对步骤S102中数据分布情况的分析过程进行限定,而且还可以用于筛选步骤S103中判断待检测SQL代码是否可能存在缺陷所使用的缺陷判定规则,关于这部分说明,请参见步骤S103中的有关描述。
步骤S102:分析待检测的SQL代码访问的源表中的数据分布情况,生成统计信息。
源表中的数据分布情况,包括:源表中的记录数、最大值、最小值、最大长度、最小长度、唯一值个数、空值个数、平均数和中位数,以及字段唯一值的分布频率等,对于这些数据分布情况,可以使用统计学中的统计量或者具体的统计参数来进行统计描述,生成符合需要的统计信息,也可以使用一些直观的图表工具来体现数据的分布特征。上述过程,通常称为Data Profiling(数据剖析)过程,即:获取数据统计信息的过程。
在本实施例中,本步骤根据步骤S101解析待检测的SQL代码获取的限制信息,只分析源表a和源表d中与5种缺陷类型相关的数据分布情况。
1)分析源表a和源表d中每个字段的取值为空值的数目,计算表征该字段的字段空值缺陷的字段空值率,并生成统计信息。
之所以要分析源表中字段取值为空值的数目,是为了审核数据完整性的需要。数据的完整性,是指数据中的记录和信息是否完整、是否存在缺失的情况,数据的完整性是数据质量最基础的保障。数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失这两种情况,两者都会造成数据分析结果的不准确。
审核数据的完整性,首先是记录的完整性,一般使用统计的记录数和唯一值个数。比如网站每天的日志记录数是相对恒定的,如果某天的日志记录数有显著的下降,那很有可能记录缺失了;再如统计访客的地域分布时,一般会包括全国的32个省份直辖市,如果统计的省份唯一值个数少于32,那么很有可能数据也存在缺失。
完整性的另一方面,是指记录中某个字段的数据缺失,可以使用统计信息中的空值的个数进行审核。如果某个字段的信息理论上必然存在,那么这些字段的空值个数的统计就应该是0,这些字段我们可以在设计表结构时,使用非空(NOT NULL)约束来保证数据的完整性;对于某些允许空的字段,如果其字段空值率(某字段一列数据中取空值的个数,占该字段全部数据的比例)通常基本恒定,即:在一定范围内波动,那么如果检测到字段空值率明显增大,就意味着该字段可能出现了信息缺失的现象,而且也从侧面表明,维护相关数据的SQL代码没有对字段取值为空的现象进行必要的、正确的处理,例如:在采集数据的过程中提示用户提供完备的信息、或者对于某些字段设置必要的缺省值等。
在本实施例中,对源表a和源表d中每一列的取值是否为空值进行了统计,即:使用SQL语句,从源表中读取每一条记录,判断其中的每个字段是否为空,如果为空,将该字段对应的空值数目进行累加。在本实施例中,所有字段的取值都不为空,因此,每个字段对应的空值个数为0,每个字段对应的空值率都为0。该统计信息存储在关系型数据库的stat_Null_Rate表中,如下表所示:
stat_Null_Rate表
源表 列名 取值总数 空值个数 字段空值率null_Rate
a loan_cont_no 6805206 0 0%
d loan_cont_no 9545280 0 0%
... ... ... ... ...
在本实施例中,将与各种缺陷类型相关的统计信息分别存储在关系型数据库的不同的表中,在其他实施方式中,这些统计信息也可以写在一个普通的数据文件中,或者是记录在一张数据表格中,只要能够根据需要访问其中的统计信息就可以了。具体采用何种存储方式,不是本申请的核心,本申请对此不作限定。
2)分析源表a和源表d中每个字段的取值重复的数目,计算表征该字段的字段重复值缺陷的字段重复率,并生成统计信息。
在数据库系统中,经常采用一个列或列的组合来唯一地标识表中的每一个记录,这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义PRIMARY KEY约束来创建主键。一个表只能有一个PRIMARY KEY约束,而且PRIMARYKEY约束中的列不能取空值。
主键的存在就代表着表结构的完整性,主键可以用于与其他表的外键关联,以及便于修改和删除记录等操作。主键字段的取值是不允许重复的,其他字段的取值通常是可以重复的。
在本实施例中,待检测的SQL代码中有一条如下所示的关联语句:
a Left Outer Join d On a.loan_cont_no=d.loan_cont_no;
该语句描述的关联操作,通过loan_cont_no字段值相同这一关联条件,将源表a和源表d关联起来。所谓关联,就是指两个数据库及其表之间的数据的相互依赖和影响关系,实际上是保证数据完整性的一种做法。
本实施例中的loan_cont_no字段,不是主键,而是上述关联操作的关联键,理论上说是允许出现重复取值的。但是作为关联键,如果出现重复取值现象往往会导致相关数据库操作的结果集倍增。
一方面,会导致数据倾斜,即:该取值重复的关联键对应的记录明显多于其他键,会导致木桶效应。所谓木桶效应,是指一个水桶无论有多高,它盛水的高度并不取决于桶壁上最高的那块木块,而是取决于桶壁上最低的那块木板。在进行相关的数据库操作或计算时,要等到与该取值重复的关联键的相关操作或计算完成了,整个任务才算完成。
另一方面,关联键出现重复值,还会留下隐患。该隐患是指重复的数据和重复的数据进行关联,会导致结果集呈指数级增长,甚至可能出现超出存储介质的存储容量的严重后果。
基于上述两方面原因可以看出,对于不是主键的字段,如果在SQL代码中没有对其取值出现重复的现象进行必要的、正确地处理,那么取值重复也可能存在潜在的风险,所以要将其作为代码缺陷的一种加以分析统计。
在本实施例中,对源表a和源表d中的所有字段的取值逐一进行分析,统计出各个字段取值重复的数目,并计算表征该缺陷类型的字段重复率,即:一列数据中取值重复的数据个数,占全部数据的比例。例如:在源表a中,loan_cont_no字段共有6805206个值,其中取值不同的数据有6758293个,对应的字段重复率是(6805206-6758293)/6805206=0.69%,同样的道理,在源表d中,loan_cont_no字段共有9545280个值,而且取值都不相同,即:取值相同的数据为0个,对应的字段重复率是0.00%。该统计信息存储在关系型数据库的stat_Dump_Rate表中,如下表所示:
stat_Dump_Rate表
源表 列名 取值总数 取值不同数 字段重复率dump_Rate
a loan_cont_no 6805206 6758293 0.69%
d loan_cont_no 9545280 9545280 0.00%
... ... ... ... ...
3)分析源表a和源表d中每个关联操作涉及的两个源表中不符合关联条件的记录的数目,计算表征该关联的关联丢失缺陷的关联丢失率,并生成统计信息。
所谓关联丢失率,是指两个表按关联键进行匹配,匹配不上的记录占总记录的比例。该参数是与数据的一致性相关的。
数据的一致性,是指数据的记录是否符合规范,是否与前后及其他数据集合保持统一或保持数据逻辑的一致性。数据记录的规范主要是数据编码和格式的问题;数据逻辑的一致性主要是指标统计和计算的一致性。如果需要审核数据逻辑的一致性,可以建立一些有效性规则,数据无法满足有效性规则就无法通过一致性检验。
具体到数据库应用中,外键是保证数据一致性的一种手段。外键也是由一列或者多列构成,它用来建立和强制两个表之间的关联,这种关联是通过将一个表中的组成主键的列或组合列加入到另一个表中形成的,这个列或者组合列就成了第二个表中的外键。通过外键,数据库自身能够保证数据的完整性与一致性。外键就是一种约束,每次执行插入、更新或是删除操作的时候,都要通过这个约束来验证两个通过外键相关联的表中的数据是否一致。例如:更新外键表中的记录时,如果外键字段的值,在主键表中没有,则不能插入;在删除主键表记录时,可以选择将外键记录一起级联删除。
使用外键可以保证数据的一致性,一定程度上体现了产品的严谨,但是外键作为一种约束,每次执行插入、更新或是删除操作的时候,都要通过这个约束来验证相关联的两个表中数据的一致性,在一定程度上会影响性能,因此有的数据库应用不采用外键设计,而是通过在代码中编写相关的逻辑来保证数据的一致性。这种情况下,如果代码中的相关逻辑不够严谨,就可能出现关联丢失的情况,即:两个表按关联键进行匹配,存在匹配不上的记录,说明两个表中的数据出现了不一致的现象,因此针对关联丢失的情况,也应该作为代码缺陷的一种加以分析和统计。
在本实施例中,源表a和源表d通过源表a中的loan_cont_no字段和源表d的loan_cont_no字段关联在一起,通过代码将d表中的loan_cont_no字段逐一读出来,然后与a表中的loan_cont_no字段进行匹配,发现d表中有部分记录的loan_cont_no字段的值在a表loan_cont_no字段中没有与之相同的取值,即不满足关联条件:a.loan_cont_no=d.loan_cont_no,发生了关联丢失的情况,d表中匹配不上的记录数目是128861,d表中总的记录数目是9545280,因此该关联操作的关联丢失率为:128861/9545280=1.35%。该统计信息存储在关系型数据库的stat_Join_Miss_Rate表中,如下表所示:
stat_Join_Miss_Rate表
左表字段 右表字段 关联丢失率miss_Rate
a.loan_cont_no d.loan_cont_no 1.35%
... ... ...
4)分析源表a和源表d中符合每个条件的记录的数目,计算表征该条件的条件行数占比缺陷的条件行数占比,并生成统计特征。
在数据库操作中,如需有条件地从表中选取数据,可将Where子句添加到Select语句中,Where是SQL语法中很常用的一个关键字。理论上,在一个数据表中,满足特定条件的记录可以是多条,也可以是一条,甚至是0条,这些都是有可能的。
但是在某些数据库应用程序中,可能要求表中满足某个条件的数据记录的数目占表中全部记录数的百分比(即:条件行数占比)是一个相对稳定的值,也即:在允许的某个范围内波动,如果超出了允许的波动范围,那就预示着访问或维护该源表的SQL代码可能存在潜在的缺陷。
在本实施例中,待检测SQL代码中有类似这样的Select语句:
select*from a Where a.Acc_Status_Cd In('2','3','4');
该select语句要从源表a中选取Acc_Status_Cd字段的值为'2'、'3'或'4'的记录,具体的'2'、'3'或'4'对应用户帐户的某个特定的状态。根据上面的描述,有必要针对该where字句,分析源表a中符合条件的记录的数目,并计算表征该条件的条件行数占比缺陷的条件行数占比。
在本实施例中,用下列select语句,获取表a中满足上述条件的记录的数目为5670098:
select count(*)as行数from a Where a.Acc_Status_Cd In('2','3','4');
源表a中总共有6805206条记录,因此该Where条件语句的条件行数占比为:5670098/6805206=83.32%。该统计信息存储在关系型数据库的stat_Where_Expr_Rate表中,如下表所示:
stat_Where_Expr_Rate表
源表 条件表达式 条件行数占比expr_Rate
a Acc_Status_Cd In('2','3','4') 83.32%
... ... ...
当然计算出上述条件行数占比并不意味着待检测SQL代码可能存在相关的缺陷,还要通过后续与缺陷判定规则的比对,才能判断待检测的SQL代码是否可能存在相关的代码缺陷。
5)分析源表a和源表d中每个类型转换函数执行成功的次数,计算表征该类型转换函数的类型转换缺陷的转换成功率,并生成统计信息。
SQL代码中的函数调用能否执行成功,直接影响源表中的数据的准确性。
数据的准确性是指,数据中记录的信息和数据是否准确,是否存在异常或者错误的信息。比如字符型数据的乱码现象、字符被截断、异常大或者异常小的数值、不符合有效性要求的数值(如:转化率不是一个介于0到1之间的值)等。对于数值型的数据可以使用最大值和最小值的统计量进行分析判断,或者使用正态分布或者类正态分布进行分析判断,那些占比异常小的数据项很可能存在准确性问题。
具体到数据库应用中,存在因为函数调用引发的数据准确性问题。SQL代码中可以使用函数调用,SQL关键字中也定义了很多函数调用关键字,例如:isnull、cast、substring、left和righ等。同其他开发语言中可能出现的情况一样,SQL代码中的函数调用也不一定总能执行成功,例如,因为SQL代码中提供的参数类型错误、参数越界、或者完成函数功能所需的资源或是其他条件不具备等原因,都有可能导致函数调用不成功。SQL代码中的函数调用能否执行成功,直接影响源表中的数据的准确性。
在本实施例中,待检测的SQL代码中有类似如下所示的类型转换函数调用语句:
Select a.Drawndn_Seqno As Agt_No,a.Data_Dt,
Cast(d.Holder_Id As Bigint)As Cust_Id
from From a Left Outer Join d On a.Loan_Cont_No=d.Loan_Cont_No;
其中Cast(d.Holder_Id As Bigint)是SQL中的类型转换函数调用,用于将源表d中的Holder_Id字段转换成Bigint类型。用该函数执行类型转换成功的次数除以该函数总共的执行次数,就得到了与Cast函数相关的表征类型转换缺陷的转换成功率,在本实施例中,计算得到的Cast函数的转换成功率为91.37%。该统计信息存储在关系型数据库的stat_Function_Succ_Rate表中,如下表所示:
stat_Function_Trans_Rate表
源表 类型转换函数 转换成功率trans_Rate
d Cast(Holder_Id As Bigint) 91.37%
... ... ...
在本实施例中,上述的分析和统计过程,采用了计算表征缺陷类型的统计参数的百分比数值的方式,例如:字段空值率、字段重复率、关联丢失率等。在其他实施方式中,也可以采取统计学中的其他的统计量或图表方式,来对各种类型的缺陷进行统计描述,例如:直方图、正态分布图等,具体采用何种统计量或图表方式,不是本申请的核心,本申请对此不作限定。
在本实施例中,对数据分布情况进行分析统计采用的是传统的SQL方式,在其他实施方式中,也可以采用其他方式,例如:采用大数据处理的框架Map/Reduce等,具体采用何种分析统计方式,不是本申请的核心,本申请对此不作限定。
步骤S103:判断所述统计信息是否含有缺陷判定规则集中的某一项或者多项缺陷判定规则对应的统计特征;若是,则判定所述待检测的SQL代码可能存在所述统计特征对应的SQL代码缺陷。
完成步骤S102的分析过程后,生成了与待检测SQL代码相关的统计信息,这些统计信息表征了待检测SQL代码访问的源表中的数据分布情况,但并不能说明待检测SQL代码可能存在缺陷。要根据这些统计信息判断待检测SQL代码是否可能存在缺陷,还需要将统计信息与缺陷判定规则集中的缺陷判定规则对应的统计特征进行比对,如果统计信息中含有缺陷判定规则集中的某个缺陷判定规则对应的统计特征,就说明待检测SQL代码可能存在缺陷。
进一步的,为了向提供待检测SQL代码的用户提供更为翔实的信息,还可以在缺陷判定规则中包含如下内容:与本缺陷判定规则的统计特征相对应的SQL代码的缺陷类型,从而便于用户快速定位待检测SQL代码存在的问题。
本实施例所述缺陷判定规则,是指用于判定待检测的SQL代码可能存在缺陷的一个或者一系列统计特征;所述缺陷判定规则集,是指一个或者多个所述缺陷判定规则的集合。
本实施例所述的统计特征,是指表征某缺陷类型的统计参数、以及该参数的取值范围,在判定SQL代码是否可能存在缺陷的过程中,如果统计信息中表征某缺陷类型的统计参数的取值,包含在某个缺陷判定规则对应的统计特征所指定的该统计参数的取值范围中,就判定SQL代码可能存在该缺陷判定规则对应的SQL代码缺陷。
例如:表征关联丢失缺陷的统计参数为:关联丢失率,统计信息中记录该统计参数的取值为20%,即:关联丢失率=20%,如果缺陷判定规则集中有这样一条缺陷判定规则:统计特征是关联丢失率>10%,与该统计特征对应的代码缺陷是关联丢失缺陷。那么,因为统计信息中的“关联丢失率=20%”包含在了上述缺陷判定规则的统计特征所指定的“关联丢失率>10%”的取值范围中,也就是说统计信息中含有缺陷判定规则集中的上述缺陷判定规则对应的统计特征,因此可以判定待检测SQL代码可能存在缺陷,并且可以进一步判定其可能存在的代码缺陷是关联丢失缺陷。
在本实施例中,缺陷判定规则集中的缺陷判定规则由两部分内容组成:统计特征和与之对应的SQL代码的缺陷类型。本实施例中的缺陷判定规则集及其包含的缺陷判定规则如下所示:
本实施例采用的缺陷判定规则集
序号 统计特征 代码缺陷类型
缺陷判定规则1 字段空值率>50% 字段空值缺陷
缺陷判定规则2 字段重复率>0% 字段重复缺陷
缺陷判定规则3 关联丢失率>0% 关联丢失缺陷
缺陷判定规则4 条件行数占比<50% 条件行数占比缺陷
缺陷判定规则5 转换成功率<100% 类型转换缺陷
缺陷判定规则6 ... ...
... ... ...
在其他实施方式中,可以对上述缺陷判定规则进一步细化,例如,可以明确针对某个或某几个特定的字段、或者特定的关联操作、或者特定的函数,设置缺陷判定规则,缺陷判定规则采用何种具体形式,细化到何种程度,不是本申请的核心,本申请不作限定。任何可能的变动和修改,只要不偏离本申请的基本原理,都在本申请的保护范围之内。
在本实施例中,缺陷判定规则集中的一个统计特征与一个SQL代码缺陷类型相对应,例如:统计特征“字段空值率>50%”,与SQL代码的字段空值缺陷相对应。在其他的实施方式中,也可能出现下述两种情况:缺陷判定规则集中的一个或多个统计特征对应同一个SQL代码缺陷类型;一个或者多个SQL代码缺陷类型在所述缺陷判定规则集中也可以对应同一个统计特征。也就是说,在缺陷判定规则集中,统计特征与SQL代码缺陷类型之间的对应关系不限于本实施例提供的一一对应关系,也可以是一对多或者是多对一的对应关系,这与具体的待检测SQL代码的内容有关,也与缺陷类型的定义方式有关。
具体到缺陷判定规则集的设置,通常可以使用检测SQL代码缺陷的常规的缺陷判定规则集,也可以兼顾以下两个方面的需求进行设置:
1)待检测SQL代码的具体应用需求;
例如:有的应用对数据的完整性要求很高,不允许字段出现空值的现象,那么这种情况下,就可以将相应的缺陷判定规则中的统计特征设置为:字段空值率>0%,即:只要有空值,就判定SQL代码可能存在缺陷。在本实施例中,根据待检测SQL代码的具体应用需求,设置缺陷判定规则1的统计特征为:字段空值率>50%。
2)提供待检测SQL代码的用户需求;
例如:即使针对同一段待检测的SQL代码,用户在不同的时期根据业务数据量的波动也可能有不同的检测需求,有时用户要求条件行数占比<60%判定待检测的SQL代码可能存在缺陷;有时用户要求条件行数占比<10%判定待检测的SQL代码可能存在缺陷。在本实施例中,用户要求条件行数占比<50%判定待检测的SQL代码可能存在缺陷,因此根据用户需求在缺陷判定规则4中进行了相应的设置。
在本申请提供的用于检测SQL代码缺陷的方法,可以采用检测SQL代码缺陷的常规使用的缺陷判定规则集,也可以根据上述两方面的需求对缺陷判定规则集中的缺陷判定规则进行有针对性的设置,从而可以比较灵活地、有针对性地、及时地发现待检测的SQL代码中可能存在的缺陷。
完成对上述缺陷判定规则集的设置后,就可以根据步骤S102生成的统计信息和所述缺陷判定规则集,来判定待检测SQL代码是否可能存在缺陷。
首先,筛选缺陷判定规则集中的缺陷判定规则。
在步骤S101中,通过解析待检测的SQL代码,确定了待检测SQL代码可能产生的缺陷类型,在本步骤中,选取与所述可能产生的缺陷类型相关的缺陷判定规则。
在本实施例中,根据步骤S101中确定的所述待检测的SQL代码可能产生的5种缺陷类型,选择了缺陷判定规则集中与这5种缺陷类型相关的缺陷判定规则,即:缺陷判定规则1至缺陷判定规则5。在后续的判断待检测SQL代码是否可能存在缺陷时,只需要考虑缺陷判定规则集中的这5条规则即可,其他判断规则可以忽略,从而可以减少进行判断比对的工作量,达到提高检测效率的目的。
然后,针对缺陷判定规则集中的每一项特定的缺陷判定规则,判断步骤S102生成的统计信息中是否含有所述特定的缺陷判定规则对应的统计特征;若是,则判定所述待检测的SQL代码可能存在该特定的缺陷判定规则对应的SQL代码缺陷。
在本实施例中,步骤S102生成的统计信息都存放在关系型数据库的表中,因此,以下判断待检SQL代码是否可能存在缺陷的过程采用SQL语句来实现。
1)针对缺陷判定规则1,从记录字段空值缺陷统计信息的stat_Null_Rate表中选择空值率超过50%的统计信息:
Select*From stat_Null_Rate Where null_Rate>0.5;
因为源表a和源表d中的所有字段的取值都不为空,字段空值率都为0%,因此上述Select语句返回的记录数目为0,从而可以判定待检测的SQL代码不存在字段空值缺陷。
2)针对缺陷判定规则2,从记录字段重复值缺陷统计信息的stat_Dump_Rate表中选择字段重复率超过0%的统计信息:
Select*From stat_Dump_Rate Where dump_Rate>0;
该查询返回结果表明:源表a中的loan_cont_no字段的字段重复率为0.69%,从而可以判定待检测的SQL代码可能存在字段重复值缺陷。
3)针对缺陷判定规则3,从记录关联丢失缺陷统计信息的stat_Join_Miss_Rate表中选择关联丢失率超过0%的统计信息:
Select*From stat_Join_Miss_Rate Where miss_Rate>0;
该查询返回结果表明:左表字段a.loan_cont_no与右表字段d.loan_cont_no之间的关联存在丢失,关联丢失率为1.35%,从而可以判定待检测的SQL代码可能存在关联丢失缺陷。
4)针对缺陷判定规则4,从记录条件行数占比缺陷统计信息的stat_Where_Expr_Rate表中选择条件行数占比小于50%的统计信息:
Select*From stat_Where_Expr_Rate Where expr_Rate<0.5;
该查询返回结果表明:没有符合缺陷判定规则的条件行数占比缺陷,从而可以判定待检测的SQL代码不存在条件行数占比缺陷。
5)针对缺陷判定规则5,从记录类型转换缺陷统计信息的stat_Function_Succ_Rate表中选择类型转换函数执行成功率小于100%的统计信息:
Select*From stat_Function_Trans_Rate Where succ_Rate<1;
该查询返回结果表明:源表d中的Cast(Holder_Id As Bigint)类型转换函数的执行成功率为91.37%,即:源表d中的Holder_Id字段无法全部转换成Bigint类型,从而判定待检测的SQL代码可能存在类型转换缺陷。
随后,根据上述SQL查询过程选出的统计信息,生成待检测SQL代码可能存在缺陷的SQL代码缺陷报告,如下所示:
1)待检测的SQL代码可能存在字段重复缺陷(源表a的loan_cont_no字段存在重复,重复率为0.69%);
2)待检测的SQL代码可能存在关联丢失缺陷(源表a与源表d通过loan_cont_no关联存在丢失,丢失率为1.35%);
3)待检测的SQL代码可能存在类型转换缺陷(源表d的Holder_id字段无法全部转换成bigint,成功率为91.37%)。
最后,将上述SQL代码缺陷报告的内容告知提供待检测SQL代码的用户,提醒用户关注这些缺陷,并进行必要的代码修订工作,通过完善SQL代码的质量,提高数据的质量。
本申请提供的用于检测SQL代码缺陷的方法,不是对SQL代码进行形式上的检查,而是针对SQL代码访问的源表,分析所述源表中的数据分布情况,并生成统计信息,然后将生成的统计信息与缺陷判定规则集进行比对,从而判定SQL代码是否可能存在缺陷。因此,使用本申请提供的方法,能够深入到SQL代码的真实执行路径,发现SQL代码可能存在的潜在缺陷。
在本实施例中,缺陷判定规则中不仅包含统计特征,还包含与统计特征相对应的SQL代码缺陷类型,从而不仅能够判断出SQL代码是否可能存在缺陷,还能够进一步指出可能存在哪种类型的缺陷,在其他实施方式中,缺陷判定规则中可以仅包含统计特征,只要统计信息含有缺陷判定规则集中的某一项或者多项缺陷判定规则对应的统计特征,就可以判定SQL代码可能存在缺陷;在本实施例中,在分析源表中的数据分布情况之前,首先对SQL代码进行解析,获取与检测SQL代码缺陷相关的限定条件,从而能够减少分析统计过程和缺陷判定过程的工作量,在其他实施方式中,可以省略对SQL代码进行解析的步骤,直接对源表中的数据分布情况进行分析;在本实施例中,设置缺陷判定规则集时,兼顾考虑了SQL代码的具体应用类型和提供SQL代码的用户需求,从而能够有针对性地、及时地发现SQL代码中可能存在的缺陷,在其他实施方式中,可以直接采用检测SQL代码缺陷的常规的缺陷判定规则集;上述这些实施方式的变更,都不影响本申请提供的用于检测SQL代码缺陷的方法的核心,因此依然能够实现本申请提供的方法,并且取得同样的有益效果:能够深入到SQL代码的真实执行路径,发现潜在的SQL代码缺陷。
在上述的实施例中,提供了一种用于检测SQL代码缺陷的方法,与之相对应的,本申请还提供一种用于检测SQL代码缺陷的装置。
请参看图2,其为本申请提供的一种用于检测SQL代码缺陷的装置实施例的单元框图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种用于检测SQL代码缺陷的装置,包括:
代码解析单元201,用于解析待检测的SQL代码,获取与检测SQL代码缺陷相关的限制信息;分析统计单元202,用于接收所述代码解析单元201输出的限制信息,按照所述限制信息的限定,分析待检测的SQL代码访问的源表中的数据分布情况,并生成统计信息;判断单元203,用于判断所述分析统计单元202生成的统计信息是否含有缺陷判定规则集中的某一项或者多项缺陷判定规则对应的统计特征,若是,则输出判断待检测SQL代码可能存在缺陷的判断结果;规则设置单元204,用于设置缺陷判定规则集。
所述判断单元203判断所述待检测SQL代码是否可能存在缺陷所采用的缺陷判定规则集中的缺陷判定规则,包含如下内容:与本缺陷判定规则的所述统计特征相对应的SQL代码的缺陷类型。
所述代码解析单元201,具体用于解析待检测的SQL代码,获取所述待检测的SQL代码访问的源表范围。
相应的,所述分析统计单元202,接收所述代码解析单元201输出的源表范围,所述该分析统计单元202分析待检测的SQL代码访问的源表中的数据分布情况,是分析所述待检测的SQL代码访问的、在所述源表范围中的源表中的数据分布情况,并生成统计信息。
所述代码解析单元201,具体用于解析待检测的SQL代码,获取所述待检测的SQL代码包含的关键字和/或标识符,并进而根据该关键字和/或标识符确定该SQL代码可能产生的缺陷类型。
相应的,所述分析统计单元202,接收所述代码解析单元201输出的缺陷类型,所述该分析统计单元202分析待检测的SQL代码访问的源表中的数据分布情况,是分析所述待检测的SQL代码访问的源表中,与所述缺陷类型相关的数据分布情况,并生成统计信息。
所述判断单元203包括:规则选取子单元203-1,用于接收所述代码解析单元输出的缺陷类型,选取缺陷判定规则集中可能与所述缺陷类型相关的缺陷判定规则;缺陷判断子单元203-2,用于读取所述规则选取子单元203-1选取的缺陷判定规则,判断所述统计信息是否含有所述缺陷判定规则对应的统计特征;若是,则输出判断待检测SQL代码可能存在缺陷的判断结果。
所述分析统计单元202,包括以下一个或者多个子单元:
空值率统计子单元202-1,用于分析源表中每个字段的取值为空值的数目,计算表征该字段的字段空值缺陷的字段空值率,并生成统计信息;重复率统计子单元202-2,用于分析源表中每个字段的取值重复的数目,计算表征该字段的字段重复值缺陷的字段重复率,并生成统计信息;关联丢失率统计子单元202-3,用于分析每个关联操作涉及的两个源表中不符合关联条件的记录的数目,计算表征该关联的关联丢失缺陷的关联丢失率,并生成统计信息;条件统计子单元202-4,用于分析源表中符合每个条件的记录的数目,计算表征该条件的条件行数占比缺陷的条件行数占比,并生成统计信息;类型转换统计子单元202-5,用于分析源表中每个类型转换函数执行成功的次数,计算表征该类型转换函数的类型转换缺陷的转换成功率,并生成统计信息。
所述判断单元203,具体用于针对缺陷判定规则集中的每一项特定的缺陷判定规则,判断统计信息中是否含有所述特定的缺陷判定规则对应的统计特征;若是,则判定所述待检测的SQL代码可能存在该特定的缺陷判定规则对应的SQL代码缺陷。
所述规则设置单元204,用于设置缺陷判定规则集;具体可以根据待检测SQL代码的具体应用类型、和/或根据提供待检测SQL代码的用户的需求,设置缺陷判定规则集,也可以采用检测SQL代码缺陷的常规的缺陷判定规则集。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

Claims (12)

1.一种用于检测SQL代码缺陷的方法,其特征在于,包括:
分析待检测的SQL代码访问的源表中的数据分布情况,生成统计信息;
判断所述统计信息是否含有缺陷判定规则集中的某一项或者多项缺陷判定规则对应的统计特征;若是,则判定所述待检测的SQL代码可能存在缺陷;其中,所述统计特征是指表征某缺陷类型的统计参数,以及该参数的取值范围;
所述缺陷判定规则,是指用于判定待检测的SQL代码可能存在缺陷的一个或者一系列统计特征;
所述缺陷判定规则集,是指一个或者多个所述缺陷判定规则的集合。
2.根据权利要求1所述的用于检测SQL代码缺陷的方法,其特征在于,所述缺陷判定规则包含如下内容:与本缺陷判定规则的所述统计特征相对应的SQL代码的缺陷类型。
3.根据权利要求2所述的用于检测SQL代码缺陷的方法,其特征在于,在所述分析待检测的SQL代码访问的源表中的数据分布情况的步骤之前,执行下述步骤:
解析待检测的SQL代码,获取与检测SQL代码缺陷相关的限制信息;
相应的,在所述分析待检测的SQL代码访问的源表中的数据分布情况的步骤中,按照所述限制信息的限定,分析待检测的SQL代码访问的源表中的数据分布情况。
4.根据权利要求3所述的用于检测SQL代码缺陷的方法,其特征在于,所述获取与检测SQL代码缺陷相关的限制信息,具体是指获取所述待检测的SQL代码访问的源表范围;
相应的,所述按照所述限制信息的限定,分析待检测的SQL代码访问的源表中的数据分布情况,是指分析所述待检测的SQL代码访问的、在所述源表范围中的源表中的数据分布情况。
5.根据权利要求3所述的用于检测SQL代码缺陷的方法,其特征在于,所述获取与检测SQL代码缺陷相关的限制信息,具体是指获取所述待检测的SQL代码包含的关键字和/或标识符,并进而根据该关键字和/或标识符确定该SQL代码可能产生的缺陷类型;
相应的,所述按照所述限制信息的限定,分析待检测的SQL代码访问的源表中的数据分布情况,是指分析所述待检测的SQL代码访问的源表中,与所述缺陷类型相关的数据分布情况。
6.根据权利要求5所述的用于检测SQL代码缺陷的方法,其特征在于,所述判断所述统计信息是否含有缺陷判定规则集中的某一项或者多项缺陷判定规则对应的统计特征的步骤包括:
选取缺陷判定规则集中可能与所述缺陷类型相关的缺陷判定规则;
判断所述统计信息是否含有与被选取的缺陷判定规则对应的统计特征。
7.根据权利要求5或6所述的用于检测SQL代码缺陷的方法,其特征在于,所述缺陷类型包括:字段空值缺陷、字段重复值缺陷、关联丢失缺陷、条件行数占比缺陷和/或类型转换缺陷;
相应的,所述分析所述待检测的SQL代码访问的源表中,与所述缺陷类型相关的数据分布情况,包括:
分析源表中每个字段的取值为空值的数目,并计算表征该字段的字段空值缺陷的字段空值率;和/或
分析源表中每个字段的取值重复的数目,并计算表征该字段的字段重复值缺陷的字段重复率;和/或
分析每个关联操作涉及的两个源表中不符合关联条件的记录的数目,并计算表征该关联的关联丢失缺陷的关联丢失率;和/或
分析源表中符合每个条件的记录的数目,并计算表征该条件的条件行数占比缺陷的条件行数占比;和/或
分析源表中每个类型转换函数执行成功的次数,并计算表征该类型转换函数的类型转换缺陷的转换成功率。
8.根据权利要求2所述的用于检测SQL代码缺陷的方法,其特征在于,所述判断所述统计信息是否含有缺陷判定规则集中的某一项或者多项缺陷判定规则对应的统计特征,是指:
针对缺陷判定规则集中的每一项特定的缺陷判定规则,判断统计信息中是否含有所述特定的缺陷判定规则对应的统计特征;若是,则相应的,在所述判定所述待检测的SQL代码可能存在缺陷的步骤中,判定所述待检测的SQL代码可能存在该特定的缺陷判定规则对应的SQL代码缺陷。
9.根据权利要求2所述的用于检测SQL代码缺陷的方法,其特征在于,所述缺陷判定规则集中,一个或多个统计特征可以对应同一个SQL代码的缺陷类型;一个或者多个SQL代码的缺陷类型在所述缺陷判定规则集中也可以对应同一个所述统计特征。
10.根据权利要求1所述的用于检测SQL代码缺陷的方法,其特征在于,所述缺陷判定规则集,采用如下方式设置:
根据待检测SQL代码的具体应用类型设置;和/或,
根据提供待检测SQL代码的用户的需求设置;和/或,
采用检测SQL代码缺陷的常规的缺陷判定规则集。
11.一种用于检测SQL代码缺陷的装置,其特征在于,包括:
分析统计单元,用于分析待检测的SQL代码访问的源表中的数据分布情况,生成统计信息;
判断单元,用于判断所述分析统计单元生成的统计信息是否含有缺陷判定规则集中的某一项或者多项缺陷判定规则对应的统计特征,若是,则输出判断待检测SQL代码可能存在缺陷的判断结果,其中,所述统计特征是指表征某缺陷类型的统计参数,以及该参数的取值范围。
12.根据权利要求11所述的用于检测SQL代码缺陷的装置,其特征在于,所述判断单元判断所述待检测SQL代码是否可能存在缺陷所采用的缺陷判定规则集中的缺陷判定规则,包含如下内容:与本缺陷判定规则的所述统计特征相对应的SQL代码的缺陷类型。
CN201310627037.2A 2013-11-29 2013-11-29 一种用于检测sql代码缺陷的方法和装置 Active CN104679646B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310627037.2A CN104679646B (zh) 2013-11-29 2013-11-29 一种用于检测sql代码缺陷的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310627037.2A CN104679646B (zh) 2013-11-29 2013-11-29 一种用于检测sql代码缺陷的方法和装置

Publications (2)

Publication Number Publication Date
CN104679646A CN104679646A (zh) 2015-06-03
CN104679646B true CN104679646B (zh) 2018-02-06

Family

ID=53314728

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310627037.2A Active CN104679646B (zh) 2013-11-29 2013-11-29 一种用于检测sql代码缺陷的方法和装置

Country Status (1)

Country Link
CN (1) CN104679646B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106442557B (zh) * 2015-08-06 2019-03-05 青岛软控机电工程有限公司 用于复合件接头缺陷检测系统的检测方法和缺陷检测系统
CN106980637B (zh) * 2016-09-28 2019-06-07 平安科技(深圳)有限公司 Sql审核方法和装置
CN107391384A (zh) * 2017-08-14 2017-11-24 中国银行股份有限公司 一种sql语句检测方法及系统
CN109426722B (zh) * 2017-09-01 2021-06-29 深圳市源伞新科技有限公司 Sql注入缺陷检测方法、系统、设备及存储介质
CN108664635B (zh) * 2018-05-15 2020-12-04 上海达梦数据库有限公司 数据库统计信息的获取方法、装置、设备和存储介质
CN109446107B (zh) * 2019-01-23 2019-07-09 长沙软工信息科技有限公司 一种源代码检测方法及装置、电子设备
CN110018958A (zh) * 2019-03-12 2019-07-16 深圳壹账通智能科技有限公司 代码缺陷扫描方法、装置、计算机设备和存储介质
CN110175123A (zh) * 2019-05-22 2019-08-27 中国石油大学(华东) 一种基于符号表达式静态缺陷警报关联识别方法
CN111274148A (zh) * 2020-02-04 2020-06-12 重庆特斯联智慧科技股份有限公司 Sql代码缺陷的检测方法及装置
CN112559354A (zh) * 2020-12-18 2021-03-26 中国平安财产保险股份有限公司 前端代码规范检测方法、装置、计算机设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7716213B2 (en) * 2007-04-26 2010-05-11 International Business Machines Corporation Apparatus, system, and method for efficiently supporting generic SQL data manipulation statements
CN102043720A (zh) * 2011-01-18 2011-05-04 北京世纪高通科技有限公司 利用sql语句自动生成测试数据的方法和装置
CN102053961A (zh) * 2009-10-27 2011-05-11 中兴通讯股份有限公司 Sql语句的检验方法、装置及提高数据库可靠性的系统
CN102073640A (zh) * 2009-11-19 2011-05-25 阿里巴巴集团控股有限公司 Sql语句的检测方法、系统及服务器

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060212438A1 (en) * 2005-03-16 2006-09-21 Ming Sum Sam Ng SQL injection protection by variable normalization

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7716213B2 (en) * 2007-04-26 2010-05-11 International Business Machines Corporation Apparatus, system, and method for efficiently supporting generic SQL data manipulation statements
CN102053961A (zh) * 2009-10-27 2011-05-11 中兴通讯股份有限公司 Sql语句的检验方法、装置及提高数据库可靠性的系统
CN102073640A (zh) * 2009-11-19 2011-05-25 阿里巴巴集团控股有限公司 Sql语句的检测方法、系统及服务器
CN102043720A (zh) * 2011-01-18 2011-05-04 北京世纪高通科技有限公司 利用sql语句自动生成测试数据的方法和装置

Also Published As

Publication number Publication date
CN104679646A (zh) 2015-06-03

Similar Documents

Publication Publication Date Title
CN104679646B (zh) 一种用于检测sql代码缺陷的方法和装置
US20220075670A1 (en) Systems and methods for replacing sensitive data
Stvilia et al. A framework for information quality assessment
EP3591586A1 (en) Data model generation using generative adversarial networks and fully automated machine learning system which generates and optimizes solutions given a dataset and a desired outcome
CN110457294B (zh) 一种数据处理方法和装置
US20230091402A1 (en) Systems and methods for expanding data classification using synthetic data generation in machine learning models
CN112434024B (zh) 面向关系型数据库的数据字典生成方法、装置、设备及介质
CN103150374A (zh) 一种识别微博异常用户的方法和系统
CN110795524B (zh) 主数据映射处理方法、装置、计算机设备及存储介质
Dai et al. Research and application for grey relational analysis in multigranularity based on normality grey number
Xu et al. Novel key indicators selection method of financial fraud prediction model based on machine learning hybrid mode
CN110968564A (zh) 一种数据处理方法及数据状态预测模型的训练方法
CN118153964A (zh) 基于大数据技术的供应商企业风险评估方法及系统
Feng Data Analysis and Prediction Modeling Based on Deep Learning in E‐Commerce
Egghe The influence of transformations on the h‐index and the g‐index
Popović et al. Extraction of temporal networks from term co-occurrences in online textual sources
Goasdoué et al. An Evaluation Framework For Data Quality Tools.
Qiang et al. [Retracted] Relationship Model between Human Resource Management Activities and Performance Based on LMBP Algorithm
Zhu Financial data analysis application via multi-strategy text processing
Winberg et al. A comparison of relational and graph databases for crm systems
CN113987372B (zh) 一种领域业务对象模型的热点数据获取方法、装置及设备
US11916958B2 (en) Phishing detection and mitigation
Song et al. The Utilization Ratio and Interoperability of Corporate‐Level XBRL Classification Standard Elements in China
Darkenbayev BIG DATA PROCESSING ON THE EXAMPLE OF CREDIT SCORING
Feng et al. [Retracted] The Relationship between the Degree of Urban Intelligence and the Performance of Enterprises in the City Based on Artificial Intelligence and Soft Computing

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20191210

Address after: P.O. Box 31119, grand exhibition hall, hibiscus street, 802 West Bay Road, Grand Cayman, Cayman Islands

Patentee after: Innovative advanced technology Co., Ltd

Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, British Cayman Islands

Patentee before: Alibaba Group Holding Co., Ltd.

TR01 Transfer of patent right