System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及数据安全领域,具体而言,涉及一种基于功能模块的sql内容替换方法、装置、电子设备和存储介质。
技术介绍
1、sql(structured query language,结构化查询语言)是一种用于管理关系型数据库的编程语言。它允许用户定义、操作和管理数据库中存储的数据。sql提供了一套标准化的命令和语法,用于创建表、插入、更新和删除数据、查询数据以及对数据库进行各种操作。
2、进一步地,在一些场景中,需要对sql语句的内容进行替换,目前现有技术是通过修改sql语句的语法树实现sql语句的修改,然而由于需要修改sql语句的语法树,因此其修改效率低,尤其对由多层嵌套结构组成的语法树进行修改时,其修改效率低下。
技术实现思路
1、本申请实施例的目的在于提供一种基于功能模块的sql内容替换方法、装置、电子设备和存储介质,用以在不修改sql语句的语法树结构这一前提下,替换于sql语句的内容,并得到新的sql语句,从而提高sql语句的修改效率。
2、第一方面,本专利技术提供一种基于功能模块的sql内容替换方法,所述方法包括:
3、接收第一sql语句,并将所述第一sql语句以字符串的形式输入到词法分析器中,以使所述语法分析器输出所述第一sql语句的符号流;
4、基于从左往右的顺序读取所述符号流中的对象,直至所述符号流完全读取,并基于所述语法分析器对所述符号流的语法结构进行分析和生成所述第一sql语句的语法树,其中,当所述语法分析器识别出当前
5、当获取到目标功能模块下的需替换对象时,遍历所述语法树,以得到位置数据队列,其中,所述位置数据队列包括所述目标功能模块下的需替换对象的位置数据;
6、基于所述位置数据队列在所述第一sql语句中,将目标功能模块下的需替换对象替换为需求对象,以得到第二sql语句。
7、本申请的方法在接收到第一sql语句时,能够将所述第一sql语句以字符串的形式输入到词法分析器中,以使所述语法分析器输出所述第一sql语句的符号流,进而能够基于从左往右的顺序读取所述符号流中的对象,直至所述符号流完全读取,并基于所述语法分析器对所述符号流的语法结构进行分析和生成所述第一sql语句的语法树,其中,当所述语法分析器识别出当前对象不属于词法定义的关键字时,将所述当前对象的位置数据存储在所述语法树中,所述当前对象为读取指针指向的对象,所述符号流为词素序列,所述对象为所述词素序列中的用于作为所述语法树节点的词素,进而当获取到目标功能模块下的需替换对象时,遍历所述语法树,以得到位置数据队列,其中,所述位置数据队列包括所述目标功能模块下的需替换对象的位置数据,进而能够基于所述位置数据队列在所述第一sql语句中,将目标功能模块下的需替换对象替换为需求对象,以得到第二sql语句,最终实现在不修改sql语句的语法树结构这一前提下,替换于sql语句的内容,并得到新的sql语句。与现有技术相比,由于本申请修改sql语句不需要修改sql语句的语法树,从而可避免由于需要修改复杂语法树导致的修改效率低下这一问题,即能够提高sql语句的修改效率。
8、在可选的实施方式中,在所述将所述第一sql语句以字符串的形式输入到词法分析器中之后,所述基于从左往右的顺序读取所述符号流中的对象之前,所述方法还包括:
9、过滤所述第一sql语句中的注释类型的字符。
10、本可选的实施方式能够过滤所述第一sql语句中的注释类型的字符,从而避免替换sql语句中的注释类型的字符。
11、在可选的实施方式中,所述语法分析器基于递归下降ll算法对所述符号流进行语法结构分析。
12、本可选的实施方式能够基于递归下降ll算法对所述符号流进行语法结构分析。
13、在可选的实施方式中,所述方法还包括:
14、获取所述当前对象的开始位置和所述当前对象的结束位置,并将所述当前对象的开始位置和所述当前对象的结束位置作为所述当前对象的位置数据。
15、本可选的实施方式通过获取所述当前对象的开始位置和所述当前对象的结束位置,进而能够将所述当前对象的开始位置和所述当前对象的结束位置作为所述当前对象的位置数据。
16、第二方面,本专利技术提供一种基于功能模块的sql内容替换装置,所述装置包括:
17、接收模块,用于接收第一sql语句,并将所述第一sql语句以字符串的形式输入到词法分析器中,以使所述语法分析器输出所述第一sql语句的符号流;
18、读取模块,用于基于从左往右的顺序读取所述符号流中的对象,直至所述符号流完全读取,并基于所述语法分析器对所述符号流的语法结构进行分析和生成所述第一sql语句的语法树,其中,当所述语法分析器识别出当前对象不属于词法定义的关键字时,将所述当前对象的位置数据存储在所述语法树中,所述当前对象为读取指针指向的对象,所述符号流为词素序列,所述对象为所述词素序列中的用于作为所述语法树节点的词素;
19、遍历模块,用于当获取到目标功能模块下的需替换对象时,遍历所述语法树,以得到位置数据队列,其中,所述位置数据队列包括所述目标功能模块下的需替换对象的位置数据;
20、替换模块,用于基于所述位置数据队列在所述第一sql语句中,将目标功能模块下的需替换对象替换为需求对象,以得到第二sql语句。
21、本申请的装置在接收到第一sql语句时,能够将所述第一sql语句以字符串的形式输入到词法分析器中,以使所述语法分析器输出所述第一sql语句的符号流,进而能够基于从左往右的顺序读取所述符号流中的对象,直至所述符号流完全读取,并基于所述语法分析器对所述符号流的语法结构进行分析和生成所述第一sql语句的语法树,其中,当所述语法分析器识别出当前对象不属于词法定义的关键字时,将所述当前对象的位置数据存储在所述语法树中,所述当前对象为读取指针指向的对象,所述符号流为词素序列,所述对象为所述词素序列中的用于作为所述语法树节点的词素,进而当获取到目标功能模块下的需替换对象时,遍历所述语法树,以得到位置数据队列,其中,所述位置数据队列包括所述目标功能模块下的需替换对象的位置数据,进而能够基于所述位置数据队列在所述第一sql语句中,将目标功能模块下的需替换对象替换为需求对象,以得到第二sql语句,最终实现在不修改sql语句的语法树结构这一前提下,替换于sql语句的内容,并得到新的sql语句。与现有技术相比,由于本申请修改sql语句不需要修改sql语句的语法树,从而可避免由于需要修改复杂语法树导致的修改效率低下这一问题,即能够提高sql语句的修改效率。
22、在可选的实施方式中,所述装置还包括:
23、过滤模块,用于在所述将所述第一sql语句以字本文档来自技高网...
【技术保护点】
1.一种基于功能模块的SQL内容替换方法,其特征在于,所述方法包括:
2.如权利要求1所述的方法,其特征在于,在所述将所述第一SQL语句以字符串的形式输入到词法分析器中之后,所述基于从左往右的顺序读取所述符号流中的对象之前,所述方法还包括:
3.如权利要求1所述的方法,其特征在于,所述语法分析器基于递归下降LL算法对所述符号流进行语法结构分析。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
5.一种基于功能模块的SQL内容替换装置,其特征在于,所述装置包括:
6.如权利要求5所述的装置,其特征在于,所述装置还包括:
7.如权利要求5所述的装置,其特征在于,所述语法分析器基于递归下降LL算法对所述符号流进行语法结构分析。
8.如权利要求1所述的装置,其特征在于,所述装置还包括:
9.一种电子设备,其特征在于,包括:
10.一种存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行如权利要求1-4任一项所述的基于功能模块的SQL内容替换方法。
...【技术特征摘要】
1.一种基于功能模块的sql内容替换方法,其特征在于,所述方法包括:
2.如权利要求1所述的方法,其特征在于,在所述将所述第一sql语句以字符串的形式输入到词法分析器中之后,所述基于从左往右的顺序读取所述符号流中的对象之前,所述方法还包括:
3.如权利要求1所述的方法,其特征在于,所述语法分析器基于递归下降ll算法对所述符号流进行语法结构分析。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
5.一种基于功能模块的sql内容替换装置,其...
【专利技术属性】
技术研发人员:高洁,
申请(专利权)人:北京天融信网络安全技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。