一种解析和还原Caché数据库通讯协议中SQL命令的方法技术

技术编号:16270015 阅读:26 留言:0更新日期:2017-09-22 21:41
本发明专利技术提供了一种解析和还原Caché数据库通讯协议中SQL命令的方法。该方法采用旁路获取网络中客户端向Caché数据库服务器发送的通信协议数据包,读取通讯协议数据包第1至第4个字节的值并赋给变量MsgLength中;跳过8个字节,读取第13、14个字节的值并赋给变量MsgType,判断所述MsgType的值,根据判断结果进行过滤和解析,再根据过滤和解析结果还原出客户端完整的SQL命令。本发明专利技术不需要对应用系统进行任何的配置改动和变更,对应用系统的正常运行没有任何影响,可以给用户、应用系统提供商及时了解系统运行状态提供有力的支持,同时可以为Caché数据库细粒度审计、精准化行为回溯、全方位风险控制功能和安全审计功能提供理论基础。

【技术实现步骤摘要】
一种解析和还原Caché数据库通讯协议中SQL命令的方法
本专利技术涉及计算机应用
,尤其涉及一种解析和还原Caché数据库通讯协议中SQL命令的方法。
技术介绍
Caché数据库是美国Intersystems公司产品,新一代超高性能数据库。适合大型应用,且因其速度快、灵活性、接口容易、升级扩容方便等优势,适用于各类应用环境,其市场占有率逐年提升。Caché数据库在国外已有广泛的应用,美国和欧洲医疗系统占有70%的市场份额,国内的医疗和金融企业已经开始投入使用Caché数据库。对于数据库管理来说,保护数据不受内部和外部侵害是一项重要工作。尤其是在Caché客户机较多时,访问量和数据传输量都较大,客户机与服务器之间的通讯过程几乎是一个黑匣子,在应用系统发生异常时,很难在系统层面对Caché数据库的访问使用情况进行全面的分析。Caché客户端对于Caché的操作直接关系到数据库的安全,所以对用户数据库业务进行在线审计、行为回溯和风险控制有着十分重要的意义。
技术实现思路
本专利技术提供了一种解析和还原Caché数据库通讯协议中SQL命令的方法,通过对使用TCP/IP协议传输的Caché数据库通讯协议51版本数据包进行旁路监听和解析,处理之后就得到每位用户的SQL操作命令。为了实现上述目的,本专利技术采取了如下技术方案。一种解析和还原Caché数据库通讯协议中SQL命令的方法,其特征在于,包括:采用旁路获取网络中客户端向Caché数据库服务器发送的通信协议数据包;将获取到的所述通信协议数据包的数据部分进行过滤和解析;根据所述的过滤和解析结果还原出客户端完整的SQL命令。所述的将获取到的所述通信协议数据包的数据部分进行过滤和解析,包括:步骤1:读取Caché数据库通讯协议数据包第1至第4个字节的值并赋给变量MsgLength中;步骤2:跳过8个字节,读取第13、14个字节的值并赋给变量MsgType,判断所述MsgType的值,若所述MsgType的值是0x440x51,则所述通信协议数据包为select语句,进行M1模块处理,若所述MsgType的值不是0x440x51,则执行步骤3;步骤3:若所述MsgType的值是0x440x55,则所述通信协议数据包为除select语句外的sql语句,进行M2模块处理,若MsgType的值不是0x440x55,则所述通信协议数据包不是sql语句数据包,结束流程。所述的M1模块处理步骤为:(11)读取Caché数据包data部分第4个字节的值并赋给变量sqlLength中;(12)定义指针sqlstart指向Caché数据包data部分第6个字节,sqlend=sqlstart+sqlLength-2;(13)读取指针sqlstart到指针sqlend指向的字符串为select语句并保存;(14)根据*(sqlend+1)的值情况执行以下步骤:若*(sqlend+1)的值是0x02,则该数据包包含的select语句没有参数,执行步骤(118);若*(sqlend+1)的值不是0x02,则执行步骤(15);(15)定义指针parapos指向指针(sqlend+3)指向的位置,并读取*(parapos)的值并赋给变量paracount;(16)跳过[6*(paracount-1)+11]个字节,定义变量skip=12;(17)定义指针parastart指向[parapos+6*(paracount-1)+skip];(18)定义变量i=1;(19)读取*(parastart)的值为paralength;(110)读取指针parastart到指针(parastart+paralength)指向的字符串为buffer(i);(111)定义指针paradis指向字符串buffer(i)第2个字节;(112)若*(paradis)的值为0x01,则执行步骤(113),若*(paradis)的值不是0x01,则执行步骤(114);(113)读取指针paradis到指针(paradis+paralength-2)指向的字符串为para(i);(114)读取指针paradis到指针(paradis+paralength-2)指向的字符串并转换为二进制数并记为para(i);(115)若i=paracount,则执行步骤(118),否则,执行步骤(116);(116)将变量i的值加1;(117)parastart=parastart+paralength,并重复执行步骤(19);(118)输出select语句和参数para(i),1<=i<=paracount。所述的M2模块处理步骤为:(21)读取Caché数据包data部分第4个字节的值并赋给变量sqlLength中;(22)定义指针sqlstart指向Caché数据包data部分第6个字节,sqlend=sqlstart+sqlLength-2;(23)读取指针sqlstart到指针sqlend指向的字符串为select语句并保存;(24)根据*(sqlend+1)的值情况执行以下步骤:若*(sqlend+1)的值是0x02,则该数据包包含的sql语句为create语句或drop语句,执行步骤(25);若*(sqlend+1)的值不是0x02,则该数据包包含的sql语句为insert、update或delete语句,进行M3模块处理;(25)保存并输出create或drop语句。所述的M3模块处理步骤为:(31)定义指针parapos指向指针(sqlend+3)指向的位置,并读取*(parapos)的值并赋给变量paracount;(32)跳过[6*(paracount-1)+3]个字节;(33)若指针[parapos+6*(paracount-1)+4]指向的字节的值为0x02,则该数据包包含的sql语句为update或delete语句,执行步骤(34);若指针[parapos+6*(paracount-1)+4]指向的字节的值不是0x02,则该数据包包含的sql语句为insert语句,执行步骤(35);(34)定义变量skip=12;(35)定义变量skip=13;(36)定义指针parastart指向[parapos+6*(paracount-1)+4+skip];(37)定义变量i=1;(38)读取*(parastart)的值为paralength;(39)读取指针parastart到指针(parastart+paralength)指向的字符串为buffer(i);(310)定义指针paradis指向字符串buffer(i)第2个字节;(311)若*(paradis)的值为0x01,则执行步骤(312),若*(paradis)的值不是0x01,则执行步骤(313);(312)读取指针paradis到指针(paradis+paralength-2)指向的字符串为para(i);(313)读取指针paradis到指针(paradis+paralength-2)指向的字符串并转换为二进制数并记为para(i);(314)若i=paracount,则执行步骤(317),否则,执行步骤(315);(315)将变量i的值加本文档来自技高网...
一种解析和还原Caché数据库通讯协议中SQL命令的方法

【技术保护点】
一种解析和还原Caché数据库通讯协议中SQL命令的方法,其特征在于,包括:采用旁路获取网络中客户端向Caché数据库服务器发送的通信协议数据包;将获取到的所述通信协议数据包的数据部分进行过滤和解析;根据所述的过滤和解析结果还原出客户端完整的SQL命令。

【技术特征摘要】
1.一种解析和还原Caché数据库通讯协议中SQL命令的方法,其特征在于,包括:采用旁路获取网络中客户端向Caché数据库服务器发送的通信协议数据包;将获取到的所述通信协议数据包的数据部分进行过滤和解析;根据所述的过滤和解析结果还原出客户端完整的SQL命令。2.根据权利要求1所述的方法,其特征在于,所述的将获取到的所述通信协议数据包的数据部分进行过滤和解析,包括:步骤1:读取Caché数据库通讯协议数据包第1至第4个字节的值并赋给变量MsgLength中;步骤2:跳过8个字节,读取第13、14个字节的值并赋给变量MsgType,判断所述MsgType的值,若所述MsgType的值是0x440x51,则所述通信协议数据包为select语句,进行M1模块处理,若所述MsgType的值不是0x440x51,则执行步骤3;步骤3:若所述MsgType的值是0x440x55,则所述通信协议数据包为除select语句外的sql语句,进行M2模块处理,若MsgType的值不是0x440x55,则所述通信协议数据包不是sql语句数据包,结束流程。3.根据权利要求2所述的方法,其特征在于,所述的M1模块处理步骤为:(11)读取Caché数据包data部分第4个字节的值并赋给变量sqlLength中;(12)定义指针sqlstart指向Caché数据包data部分第6个字节,sqlend=sqlstart+sqlLength-2;(13)读取指针sqlstart到指针sqlend指向的字符串为select语句并保存;(14)根据*(sqlend+1)的值情况执行以下步骤:若*(sqlend+1)的值是0x02,则该数据包包含的select语句没有参数,执行步骤(118);若*(sqlend+1)的值不是0x02,则执行步骤(15);(15)定义指针parapos指向指针(sqlend+3)指向的位置,并读取*(parapos)的值并赋给变量paracount;(16)跳过[6*(paracount-1)+11]个字节,定义变量skip=12;(17)定义指针parastart指向[parapos+6*(paracount-1)+skip];(18)定义变量i=1;(19)读取*(parastart)的值为paralength;(110)读取指针parastart到指针(parastart+paralength)指向的字符串为buffer(i);(111)定义指针paradis指向字符串buffer(i)第2个字节;(112)若*(paradis)的值为0x01,则执行步骤(113),若*(paradis)的值不是0x01,则执行步骤(114);(113)读取指针paradis到指针(paradis+paralength-2)指向的字符串为para(i);(114)读取指针paradis到指针(paradis+paralength-2)指向的字符串并转换为二进制数并记为para(i);(115)若i=paracount,则执行步骤(118),否则,执行步骤(116);(116)将变量i的值加1;(117)parastart=parastart+paralength,并重复执行步骤(19);(118)输出select语句和参数para(i),1<=i<=paracount。4.根...

【专利技术属性】
技术研发人员:黎琳常晓林李振寰韩臻刘吉强
申请(专利权)人:北京交通大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1