CN109033410B - 一种基于正则与字符串切割的sql解析方法 - Google Patents

一种基于正则与字符串切割的sql解析方法 Download PDF

Info

Publication number
CN109033410B
CN109033410B CN201810880217.4A CN201810880217A CN109033410B CN 109033410 B CN109033410 B CN 109033410B CN 201810880217 A CN201810880217 A CN 201810880217A CN 109033410 B CN109033410 B CN 109033410B
Authority
CN
China
Prior art keywords
sql
regular
character string
cutting
keywords
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
CN201810880217.4A
Other languages
English (en)
Other versions
CN109033410A (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.)
Individual
Original Assignee
Individual
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 Individual filed Critical Individual
Priority to CN201810880217.4A priority Critical patent/CN109033410B/zh
Publication of CN109033410A publication Critical patent/CN109033410A/zh
Application granted granted Critical
Publication of CN109033410B publication Critical patent/CN109033410B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

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

Abstract

本发明公开了一种基于正则与字符串切割的SQL解析方法,涉及SQL数据库技术领域。该方法通过对原SQL语句进行关键字拆分、类型格式验证以及字段解析,可以得到一种通用的SQL语句,支持兼容所有的数据库操作,所以减少了开发者对SQL的使用成本,另外,通过对SQL语句的解析得到Table以及表字段结构,可以针对解析的字段信息创建属于自己的数据库模型(建模),从而可以达到去除IOE等国外数据库的不安全隐患的目的。

Description

一种基于正则与字符串切割的SQL解析方法
技术领域
本发明涉及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*from school where name=“王强”;
步骤1,通过大小写转换将原SQL语句修改为:SELECT*FROM school WHERE name=“王强”;
步骤2,通过正则表达式可以确定上述语句为:SELECT查询语句;
步骤3,通过正则表达式判断上述语法是正确的;在判断的过程中,主要是通过正则表达式进行的,比如,如果原SQL---->CREATE*FROM school WHERE name=“王强”;CREATE后面不能跟FROM,所以,通过校验得知当前语句有字段错误;
步骤4,通过正则表达式对SQL语句:SELECT*FROM school WHERE name=“王强”进行字段拆分,得到:
String action=”SELECT”;
String from=”FROM”;
String table=”school”;
String where=”WHERE”;
String field=”name”;
String connector=“=”;
String fieldValue=”王强”;
步骤5,对SQL语句进行字段,表结构分析:
例如:SQL---->SELECT*FROM school WHERE name=“王强”;
将正则拆分后的数据如下,进行校验:
String action=”SELECT”;
String from=”FROM”;
String table=”school”;
String where=”WHERE”;
String field=”name”;
String connector=“=”;
String fieldValue=”王强”;
通过对后台数据查询,查看table是否有school表,是否包含字段name,以及name字段的值是否允许为空,“王强”是否是指定格式;
步骤6,将上述拆分的字段形成JSON格式返回数据。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:本发明实施例提供的基于正则与字符串切割的SQL解析方法,通过对原SQL语句进行关键字拆分、类型格式验证以及字段解析,可以得到一种通用的SQL语句,支持兼容所有的数据库操作,所以减少了开发者对SQL的使用成本,另外,通过对SQL语句的解析得到Table以及表字段结构,可以针对解析的字段信息创建属于自己的数据库模型(建模),从而可以达到去除IOE等国外数据库的不安全隐患的目的。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

Claims (2)

1.一种基于正则与字符串切割的SQL解析方法,其特征在于,包括如下步骤:
S1,基于正则与字符串切割的方式,构建切割匹配语法,对SQL语句中的关键字进行大小写转换,实现SQL语句中关键字和内容的解析;S1具体为:把一条SQL语句字符串,按字符切割,根据a-z或A-Z组合单词,记录单词的上一个字符和下一个字符,根据字符去判断是否去转换,如果单词组合等于关键字和满足字符转换条件则转换,否则不转换;
S2,截取SQL的关键字,对SQL语句语义进行分析,将SQL语句进行归类;
S3,截取SQL的关键字,基于正则表达式,按照归入的类型对SQL语句的格式进行校验,如果格式正确,则执行后续步骤,否则,返回校验失败信息;
S4,对SQL语句进行字段拆分,得到拆分后的各字段;
S5,基于正则与字符串切割匹配的方式,对各个字段进行类型校验;S5中,所述对各个字段进行类型校验,包括String,num,Date类型的校验;S5中具体为:根据数据库表名查询数据表的结构、类型和索引是否为空;根据SQL语句拆分的各个字段和值,匹配表结构的字段和类型;
S6,校验成功后将上述拆分的字段一次按照顺序返回数据。
2.根据权利要求1所述的基于正则与字符串切割的SQL解析方法,其特征在于,S2中,所述SQL语句的类型包括:创建、增加、删除、修改和查找。
CN201810880217.4A 2018-08-03 2018-08-03 一种基于正则与字符串切割的sql解析方法 Active CN109033410B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810880217.4A CN109033410B (zh) 2018-08-03 2018-08-03 一种基于正则与字符串切割的sql解析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810880217.4A CN109033410B (zh) 2018-08-03 2018-08-03 一种基于正则与字符串切割的sql解析方法

Publications (2)

Publication Number Publication Date
CN109033410A CN109033410A (zh) 2018-12-18
CN109033410B true CN109033410B (zh) 2021-10-29

Family

ID=64648524

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810880217.4A Active CN109033410B (zh) 2018-08-03 2018-08-03 一种基于正则与字符串切割的sql解析方法

Country Status (1)

Country Link
CN (1) CN109033410B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110086827B (zh) * 2019-05-14 2021-11-02 重庆商勤科技有限公司 一种sql注入校验方法、服务器以及系统
CN111126026B (zh) * 2019-12-17 2021-10-08 叮当快药科技集团有限公司 将sql语句解析生成可视化报表的方法和工具
CN112416648A (zh) * 2020-06-03 2021-02-26 上海哔哩哔哩科技有限公司 数据校验方法及装置
CN112632109A (zh) * 2020-12-30 2021-04-09 北京天融信网络安全技术有限公司 信息提取方法、装置、电子设备及可读存储介质
CN112835925B (zh) * 2021-02-02 2024-03-29 北京握奇数据股份有限公司 一种嵌入式芯片sql语句解析方法
CN115062049B (zh) * 2022-07-28 2022-11-18 浙江城云数字科技有限公司 一种数据血缘分析方法及装置
CN115237936B (zh) * 2022-09-14 2024-04-05 北京海致星图科技有限公司 检测sql语句中字段的方法、装置、存储介质和设备
CN117331963B (zh) * 2023-11-28 2024-03-08 恒生电子股份有限公司 数据访问处理方法、装置、电子设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101901222A (zh) * 2009-05-27 2010-12-01 北京启明星辰信息技术股份有限公司 一种sql解析及匹配的方法和系统
CN104252357A (zh) * 2013-11-05 2014-12-31 深圳市华傲数据技术有限公司 一种sql语言解析方法和装置
CN104657123A (zh) * 2013-11-21 2015-05-27 航天信息股份有限公司 一种动态导出文件的方法
CN107169023A (zh) * 2017-04-07 2017-09-15 广东精点数据科技股份有限公司 基于sql语义自动解析的数据血统分析系统及方法
CN107341135A (zh) * 2017-05-24 2017-11-10 中国科学院信息工程研究所 一种面向通用文本格式的解析方法及工具
CN107908725A (zh) * 2017-11-14 2018-04-13 中国银行股份有限公司 一种批量数据校验方法、装置和系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101901222A (zh) * 2009-05-27 2010-12-01 北京启明星辰信息技术股份有限公司 一种sql解析及匹配的方法和系统
CN104252357A (zh) * 2013-11-05 2014-12-31 深圳市华傲数据技术有限公司 一种sql语言解析方法和装置
CN104657123A (zh) * 2013-11-21 2015-05-27 航天信息股份有限公司 一种动态导出文件的方法
CN107169023A (zh) * 2017-04-07 2017-09-15 广东精点数据科技股份有限公司 基于sql语义自动解析的数据血统分析系统及方法
CN107341135A (zh) * 2017-05-24 2017-11-10 中国科学院信息工程研究所 一种面向通用文本格式的解析方法及工具
CN107908725A (zh) * 2017-11-14 2018-04-13 中国银行股份有限公司 一种批量数据校验方法、装置和系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
数据库集群中间件负载均衡模块的设计与实现;崔丹;《中国优秀硕士学位论文全文数据库信息科技辑》;20180315;论文第4.2.1节 *

Also Published As

Publication number Publication date
CN109033410A (zh) 2018-12-18

Similar Documents

Publication Publication Date Title
CN109033410B (zh) 一种基于正则与字符串切割的sql解析方法
US9424294B2 (en) Method for facet searching and search suggestions
CN111291161A (zh) 法律案件知识图谱查询方法、装置、设备及存储介质
CN109614432B (zh) 一种基于语法分析的获取数据血缘关系的系统及方法
US11789945B2 (en) Clause-wise text-to-SQL generation
US20080140696A1 (en) System and method for analyzing data sources to generate metadata
US11580147B2 (en) Conversational database analysis
US10042889B2 (en) Pseudo columns for data retrieval
CN110276071B (zh) 一种文本匹配方法、装置、计算机设备及存储介质
WO2022052639A1 (zh) 数据查询方法及装置
CN104657439A (zh) 用于自然语言精准检索的结构化查询语句生成系统及方法
US9064004B2 (en) Extensible surface for consuming information extraction services
CN110597844B (zh) 异构数据库数据统一访问方法及相关设备
US9171051B2 (en) Data definition language (DDL) expression annotation
CN109388523B (zh) 一种基于二进制日志文件恢复MySQL数据库的方法
CN104657440A (zh) 结构化查询语句生成系统及方法
CN109241080B (zh) 一种fql查询语言的构建使用方法及其系统
RU2544739C1 (ru) Способ преобразования структурированного массива данных
CN113010632A (zh) 智能问答方法、装置、计算机设备和计算机可读介质
Nayak et al. Knowledge graph based automated generation of test cases in software engineering
CN112035508A (zh) 基于sql在线元数据解析的方法及系统、设备
US9053207B2 (en) Adaptive query expression builder for an on-demand data service
CN111695002B (zh) 一种基于xml语句的数据库无关的查询方法
US20120158692A1 (en) Query systems
CN116226170A (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
GR01 Patent grant
GR01 Patent grant