一种基于正则与字符串切割的SQL解析方法与流程

文档序号:16331180发布日期:2018-12-19 06:12阅读:587来源:国知局
本发明涉及sql数据库
技术领域
:,尤其涉及一种基于正则与字符串切割的sql解析方法。
背景技术
:目前,很多企业都利用现有的sql数据库进行数据存储,然而各个公司的sql数据库的类型也有所不同,包括hivesql、mysql、sqllite、sqlserver、oracle等,而对于不同类型的sql数据库,相同意图的操作对应使用的sql语法也会有所不同,从而大大增加了开发者对sql的使用成本。而由于对sql使用成本的增加,使得程序无法细致地过滤用户输入的数据,因此,随着sql数据层出不穷的注入,现有的sql数据库无法满足日益更进的安全需求,致使非法数据侵入系统,致使企业遭受巨大的财产损失,所以,sql数据安全的问题亟待解决。另外,我国目前使用的sql数据库都是国外提供的,自2013年棱镜门事件之后,我国政府已经意识到政府数据安全的重要性,也加强了政府数据安全方面的工作,去ioe的问题亟待解决。技术实现要素:本发明的目的在于提供一种基于正则与字符串切割的sql解析方法,从而解决现有技术中存在的前述问题。为了实现上述目的,本发明采用的技术方案如下:一种基于正则与字符串切割的sql解析方法,包括如下步骤:s1,基于正则与字符串切割的方式,构建切割匹配语法,对sql语句中的关键字进行大小写转换,实现sql语句中关键字和内容的解析;s2,截取sql的关键字,对sql语句语义进行分析,将sql语句进行归类;s3,截取sql的关键字,基于正则表达式,按照归入的类型对sql语句的格式进行校验,如果格式正确,则执行后续步骤,否则,返回校验失败信息;s4,对sql语句进行字段拆分,得到拆分后的各字段;s5,基于正则与字符串切割匹配的方式,对各个字段进行类型校验;s6,校验成功后将上述拆分的字段一次按照顺序返回数据。优选地,s1具体为:把一条sql语句字符串,按字符切割,根据a-z或a-z组合单词,记录单词的上一个字符和下一个字符,根据字符去判断是否去转换,如果单词组合等于关键字和满足字符转换条件则转换,否则不转换。优选地,s2中,所述sql语句的类型包括:创建、增加、删除、修改和查找。优选地,s5中,所述对各个字段进行类型校验,包括string,num,date类型的校验。优选地,s5中具体为:根据数据库表名查询数据表的结构、类型和索引是否为空;根据sql语句拆分的各个字段和值,匹配表结构的字段和类型。本发明的有益效果是:本发明实施例提供的基于正则与字符串切割的sql解析方法,通过对原sql语句进行关键字拆分、类型格式验证以及字段解析,可以得到一种通用的sql语句,支持兼容所有的数据库操作,所以减少了开发者对sql的使用成本,另外,通过对sql语句的解析得到table以及表字段结构,可以针对解析的字段信息创建属于自己的数据库模型(建模),从而可以达到去除ioe等国外数据库的不安全隐患的目的。附图说明图1是本发明提供的基于正则与字符串切割的sql解析方法流程示意图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。如图1所示,本发明实施例提供了一种基于正则与字符串切割的sql解析方法,包括如下步骤:s1,基于正则与字符串切割的方式,构建切割匹配语法,对sql语句中的关键字进行大小写转换,实现sql语句中关键字和内容的解析;s2,截取sql的关键字,对sql语句语义进行分析,将sql语句进行归类;s3,截取sql的关键字,基于正则表达式,按照归入的类型对sql语句的格式进行校验,如果格式正确,则执行后续步骤,否则,返回校验失败信息;s4,对sql语句进行字段拆分,得到拆分后的各字段;s5,基于正则与字符串切割匹配的方式,对各个字段进行类型校验;s6,校验成功后将上述拆分的字段一次按照顺序返回数据。其中,s1具体为:把一条sql语句字符串,按字符切割,根据a-z或a-z组合单词,记录单词的上一个字符和下一个字符,根据字符去判断是否去转换,如果单词组合等于关键字和满足字符转换条件则转换,否则不转换。s2中,所述sql语句的类型包括:创建、增加、删除、修改和查找。s5中,所述对各个字段进行类型校验,包括string,num,date类型的校验。s5具体为:根据数据库表名查询数据表的结构、类型和索引是否为空;根据sql语句拆分的各个字段和值,匹配表结构的字段和类型。具体实施例:采用本发明提供的基于正则与字符串切割的sql解析方法,对以下的原sql语句进行解析可以采用如下步骤:原sql语句---->select*fromschoolwherename=“王强”;步骤1,通过大小写转换将原sql语句修改为:select*fromschoolwherename=“王强”;步骤2,通过正则表达式可以确定上述语句为:select查询语句;步骤3,通过正则表达式判断上述语法是正确的;在判断的过程中,主要是通过正则表达式进行的,比如,如果原sql---->create*fromschoolwherename=“王强”;create后面不能跟from,所以,通过校验得知当前语句有字段错误;步骤4,通过正则表达式对sql语句:select*fromschoolwherename=“王强”进行字段拆分,得到:stringaction=”select”;stringfrom=”from”;stringtable=”school”;stringwhere=”where”;stringfield=”name”;stringconnector=“=”;stringfieldvalue=”王强”;步骤5,对sql语句进行字段,表结构分析:例如:sql---->select*fromschoolwherename=“王强”;将正则拆分后的数据如下,进行校验:stringaction=”select”;stringfrom=”from”;stringtable=”school”;stringwhere=”where”;stringfield=”name”;stringconnector=“=”;stringfieldvalue=”王强”;通过对后台数据查询,查看table是否有school表,是否包含字段name,以及name字段的值是否允许为空,“王强”是否是指定格式;步骤6,将上述拆分的字段形成json格式返回数据。通过采用本发明公开的上述技术方案,得到了如下有益的效果:本发明实施例提供的基于正则与字符串切割的sql解析方法,通过对原sql语句进行关键字拆分、类型格式验证以及字段解析,可以得到一种通用的sql语句,支持兼容所有的数据库操作,所以减少了开发者对sql的使用成本,另外,通过对sql语句的解析得到table以及表字段结构,可以针对解析的字段信息创建属于自己的数据库模型(建模),从而可以达到去除ioe等国外数据库的不安全隐患的目的。以上所述仅是本发明的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1