CN109033410B - 一种基于正则与字符串切割的sql解析方法 - Google Patents
一种基于正则与字符串切割的sql解析方法 Download PDFInfo
- 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
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数据库的类型也有所不同,包括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语句的类型包括:创建、增加、删除、修改和查找。
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)
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)
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 | 中国银行股份有限公司 | 一种批量数据校验方法、装置和系统 |
-
2018
- 2018-08-03 CN CN201810880217.4A patent/CN109033410B/zh active Active
Patent Citations (6)
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)
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 |