CN105045817B - 基于事务日志的SQL Server数据库取证分析系统及方法 - Google Patents
基于事务日志的SQL Server数据库取证分析系统及方法 Download PDFInfo
- Publication number
- CN105045817B CN105045817B CN201510362128.7A CN201510362128A CN105045817B CN 105045817 B CN105045817 B CN 105045817B CN 201510362128 A CN201510362128 A CN 201510362128A CN 105045817 B CN105045817 B CN 105045817B
- Authority
- CN
- China
- Prior art keywords
- data
- byte
- binary
- length
- tables
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2358—Change logging, detection, and notification
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种SQL Server数据库取证分析系统,通过提取和存储连接SQL Server数据库后的管理员权限,提取SQL Server数据库事务日志中关于操作的二进制记录信息,然后结合数据表结构和数据类型信息解析插入和删除操作的具体日志数据,结合数据库中原始数据和特定的高效算法解析出更新操作的日志数据,最后具体实现对SQL Server数据库各种用户操作的数据、时间、操作人员的解析和保存。本发明为SQL Server数据库取证提供一种切实可行、高效的方案。
Description
技术领域
本发明涉及的是一种计算机取证领域的分析系统及方法,具体是一种基于事务日志的SQL Server数据库取证分析系统及方法。
背景技术
SQL Server数据库是由美国微软(Microsoft)公司推出的一种关系型数据库系统。SQL Server数据库是一个可扩展的、高性能的、为分布式客户机/服务器计算所涉及的数据库管理系统,实现了与微软的操作系统——Windows NT的有机结合,提供了基于事务的企业级信息管理系统方案。
SQL Server数据库中的“事务”是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,分别为原子性、一致性、隔离性和持久性属性。只有满足这四个属性,才能成为一个事务。其中,原子性指事务必须是原子工作单元;一致性指事务在完成时必须是所有数据保持一致状态;隔离性指由并发事务所做的修改必须与任何其他并发事务所做的修改隔离;持久性指事务完成之后对系统的影响是永久性的。
事务日志是SQL Server数据库专门用于记录对应数据库上的事务行为和对数据库修改的日志文件。SQL Server数据库系统每建立一个数据库文件,就会同时生成一个默认以“.ldf”为扩展名的事务日志文件。SQL Server对于日志文件的管理,是将逻辑上的一个ldf文件划分为多个逻辑上的虚拟日志文件(Virtual Log Files,简称VLFS)。VLFS的个数和大小无法通过配置进行设定,而是由SQL Server进行管理。当数据库进行“Create”(创建)或“Alter”(转变)操作时,SQL Server通过ldf文件的大小来决定VLFS的大小数量。在日志文件增长时,SQL Server也会重新规划VLFS的数量。
事务日志记录多种类型的操作,包括:(1)每个事物的开始和结束;(2)每次数据修改(插入、更新或删除),包括系统存储过程或数据定义语言(DDL)语句对包括系统表在内的任何表所做的更改;(3)每次分配或释放数据库的区和页;(4)创建或删除表或索引。
目前,对于SQL Server数据库事务日志的解析是SQL Server数据库取证分析的重要领域和热门方向。但由于事务日志文件格式的不公开,这一方向成果较少。
经过对现有技术的检索发现,美国微软公司有专门用于监控和跟踪数据库的工具——SQL Server Profiler,但是这款工具需要实时开启和跟踪数据库,占用和消耗很大的系统资源。同时,Profiler只能记录执行的SQL命令,并没有具体解析数据的变动。另外,美国Lumigent 公司的商业软件——Log Explorer能对2005年之前版本的SQL Server进行取证分析,但是它不支持SQL Server 2008版本或者更新的版本,无法对新版本进行取证分析。同时,Log Explorer在解析MODIFY(更新)操作时,会因为其算法缺陷导致解析错误。
发明内容
本发明针对现有技术存在的上述不足,提出一种基于事务日志的SQL Server数据库取证分析系统,以解析事务日志的方法达到在可接受时间和空间范围内查询和认证数据库插入、删除和修改操作的目的。其意义在于为数据库取证提供一种切实可行的方案。本发明通过解析SQL Server 2008版本的事务日志,分析得到其记录的插入和删除操作的信息,并提出了修改操作的解析算法,能够准确、高效地进行数据库取证。
本发明通过以下技术方案实现:
本发明涉及一种基于事务日志的SQL Server数据库取证系统,包括:数据库登录模块、数据表信息提取模块、事务日志提取模块、插入操作分析模块、删除操作分析模块、修改操作分析模块。
所述的数据库登录模块包括:输入单元和获取权限单元,其中:输入单元负责输入在登录SQL Server数据库时所需的用户名和密码;获取权限模块负责提取和存储连接SQLServer数据库后的管理员权限,以保证事务日志提取模块的正常运行。
所述的数据表信息提取模块负责在以管理员权限登录SQL Server数据库后,选择待分析的数据库中的数据表,以精确分析范围,减少不必要的分析运行开销,提高分析速率。同时,分析并提取待分析数据表的属性结构和类型,以保证插入操作分析模块、删除操作分析模块和修改操作分析模块的运行。
所述的事务日志提取模块负责在明确待分析的数据表之后,从计算机内存中提取出对应的事务日志的二进制码,作为插入操作分析模块、删除操作分析模块和修改操作分析模块的数据源。
所述的插入操作分析模块负责分析事务日志提取模块所提取的事务日志中插入操作信息,并结合数据表信息提取模块提供的数据表属性结构和类型,分析出所插入的具体数据、操作人员、操作时间。
所述的删除操作分析模块负责分析事务日志提取模块所提取的事务日志中删除操作信息,并结合数据表信息提取模块提供的数据表树形结构和类型,分析出所删除的具体数据、操作人员、操作时间。
所述的修改操作分析模块包括修改信息提取单元、数据库数据提取单元和修改数据分析单元。其中,修改信息提取单元负责初步提取出事务日志中关于修改操作的记录;数据库数据 提取单元负责在数据库中查找并提取出修改操作对应的数据记录;修改数据分析单元负责综合修改信息提取单元和数据库数据提取单元,以分析出修改操作前后具体的数据变动情况。
本发明涉及上述系统的SQL Server数据库取证分析方法,通过提取SQL Server数据库事务日志中关于操作的二进制记录信息,然后结合数据表结构和数据类型信息解析插入和删除操作的具体日志数据,结合数据库中原始数据和特定的高效算法解析出更新操作的日志数据,最后具体实现对SQL Server数据库各种用户操作的数据、时间、操作人员的解析和保存。
附图说明
图1为本发明系统结构示意图。
图2为SQL Server事务日志中原始日志(Row Data)的数据格式。
具体实施方式
下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
实施例1
本实施例涉及的基于事务日志的SQL Server取证分析系统是在X86架构的Windows操作系统平台上实现的。
本实施例涉及的基于事务日志的SQL Server取证分析系统是针对SQL Server2008版本以及之后更新的版本,不适用于SQL Server 2005版本以及之前的老版本。
本实施例的对象主机的配置如下表所示:
实施的过程包括:数据库连接、数据库表格信息提取、事务日志提取、插入操作分析、删除操作分析、修改操作分析。
本实施例测试步骤具体如下:
第一步、连接和登陆SQL Server数据库,具体包括以下步骤:
1.1)打开并输入用户名和密码,需要此账户具有管理员权限;
1.2)通过微软提出的应用程序接口——ADO实现连接和登陆关系型数据库SQLServer。
第二步、选择数据库和数据表,并进行表格信息提取,具体包括以下步骤:
2.1)选择待分析的数据库;
2.2)从2.1)所选择的数据库中选择待分析的数据表;
2.3)分析2.2)所选择的数据表的基本信息,具体步骤如下:
2.3.1)根据2.2)所选择的数据表的表名,查找该数据表有多少列属性(即列数据);
2.3.2)根据2.3.1)所查询到的列属性,分别查询到其对应的数据类型,如普通32位整数(int)或者ASCII字符串类型(char)等等。
第三步、通过DBCC命令获取2.2)所选择数据表的事务日志数据,具体包括以下步骤:
3.1)通过DBCC命令获取当前数据库所有存有的事务日志数据;
3.2)筛选出所有与2.2)相关的记录;
第四步、根据图2进行插入操作分析,具体包括以下步骤:
4.1)从3.2)中筛选出待分析的插入操作日志记录,如果不存在,结束插入操作分析并转至第五步删除操作分析;
4.2)提取出4.1)日志记录中“Row Data”属性字段数据,该数据为二进制数据;
4.3)提取4.2)二进制数据第一字节数据,如果数值为1,则转4.4);如果数值为0,则转至4.5);
4.4)当4.3)中结果为1,说明数据表中属性全为长度固定的数据类型,具体分析步骤如下:
4.4.1)提取4.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在4.2)数据流中的结束位置,记为数值X;
4.4.2)提取4.2)二进制数据第5字节至第X字节二进制码;
4.4.3)根据2.3)的数据表格信息将4.4.2)的二进制码分为2.3.1)中数据列数相同的份数,每一份的长度大小与2.3.2)中每列数据类型大小一一对应;
4.4.4)将4.4.3)中每一份二进制码按字节逆序排列,并按照2.3.2)中的数据类型具体解析其含义,转至4.6);
4.5)当4.3)中结果为0,说明数据表中属性含有长度可变的数据类型数据,具体分析步骤如下:
4.5.1)提取4.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在4.2)数据流中的结束位置,记为数值Y;
4.5.2)提取4.2)二进制数据第5字节至第Y字节二进制码:
4.5.3)根据2.3)的数据表格信息将4.5.2)的二进制码分为2.3.1)中长度固定数据类型数据列数相同的份数,每一份的长度大小与2.3.2)中每列长度固定数据类型数据的长度一一对应;
4.5.4)将4.5.3)中每一份二进制码逆序排列,并按照2.3.2)中的长度固定的数据类型 格式具体解析其含义;
4.5.5)提取4.2)二进制数据第Y+1字节至第Y+2字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表的总列数,应与2.3.1)的数据列数一致,记为数值Z;
4.5.6)计算Z除以8的数值,并向上取整,记为数值R;
4.5.7)提取4.2)二进制数据第Y+3+R字节至第Y+4+R字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表中长度可变数据类型数据的个数,记为数值P;
4.5.8)提取4.2)二进制数据第Y+5+R字节至第Y+4+R+P*2字节数据,且以2字节为单位划分为等长度的P个数据块,将每一块的两个字节逆序排列并转换成十进制整数,所得数值为相应长度可变数据类型数据的长度;
4.5.9)提取4.2)二进制数据第Y+5+R+P*2至数据最后,并按4.5.8)中P个整数为长度划分为P个数据块,每个数据块对应于数据表中长度可变数据类型数据,按照其具体数据类型格式解释其含义;
4.6)提取4.1)日志记录中操作者、操作时间等信息,并结合以上操作得到事务日志中的插入操作分析总结果。转至4.1)。
第五步、根据图2进行删除操作分析,具体包括以下步骤:
5.1)从3.2)中筛选出待分析的删除操作日志记录,如果不存在,结束删除操作分析并转至第六步修改操作分析;
5.2)提取出5.1)日志记录中“Row Data”属性字段数据,该数据为二进制数据;
5.3)提取5.2)二进制数据第一字节数据,如果数值为1,则转5.4);如果数值为0,则转至5.5);
5.4)当5.3)中结果为1,说明数据表中属性全为长度固定的数据类型,具体分析步骤如下:
5.4.1)提取5.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在5.2)数据流中的结束位置,记为数值Q;
5.4.2)提取5.2)二进制数据第5字节至第Q字节二进制码;
5.4.3)根据2.3)的数据表格信息将5.4.2)的二进制码分为2.3.1)中数据列数相同的份数,每一份的长度大小与2.3.2)中每列数据类型大小一一对应;
5.4.4)将5.4.3)中每一份二进制码按字节逆序排列,并按照2.3.2)中的数据类型具体解析其含义,转至5.6);
5.5)当5.3)中结果为0,说明数据表中属性含有长度可变的数据类型数据,具体分析步骤如下:
5.5.1)提取5.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在5.2)数据流中的结束位置,记为数值A;
5.5.2)提取5.2)二进制数据第5字节至第A字节二进制码:
5.5.3)根据2.3)的数据表格信息将5.5.2)的二进制码分为2.3.1)中长度固定数据类型数据列数相同的份数,每一份的长度大小与2.3.2)中每列长度固定数据类型数据的长度一一对应;
5.5.4)将5.5.3)中每一份二进制码逆序排列,并按照2.3.2)中的长度固定的数据类型格式具体解析其含义;
5.5.5)提取5.2)二进制数据第A+1字节至第A+2字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表的总列数,应与2.3.1)的数据列数一致,记为数值B;
5.5.6)计算B除以8的数值,并向上取整,记为数值C;
5.5.7)提取5.2)二进制数据第A+3+C字节至第A+4+C字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表中长度可变数据类型数据的个数,记为数值D;
5.5.8)提取5.2)二进制数据第A+5+C字节至第A+4+C+D*2字节数据,且以2字节为单位划分为等长度的D个数据块,将每一块的两个字节逆序排列并转换成十进制整数,所得数值为相应长度可变数据类型数据的长度;
5.5.9)提取5.2)二进制数据第A+5+C+D*2至数据最后,并按5.5.8)中D个整数为长度划分为D个数据块,每个数据块对应于数据表中长度可变数据类型数据,按照其具体数据类型格式解释其含义;
5.6)提取5.1)日志记录中操作者、操作时间等信息,并结合以上操作得到事务日志中的删除操作分析总结果。转至5.1)。
第六步、根据图2进行修改操作分析,具体包括以下步骤:
6.1)从3.2)中筛选出待分析的修改操作日志记录,并按时间顺序从后向前排列,如果不存在,则结束实施例所有操作;
6.2)如果得到的修改操作日志记录是由删除操作和插入操作组成的,则进行5.1)至5.6)操作和4.1)至4.6)操作,得到删除数据和新插入数据,转6.14);如果得到的修改操作日志记录仅有一条含有MOFIFY标志的日志组成,转6.3);
6.3)提取出6.1)日志记录中“Row Data”属性字段数据,该数据为二进制数据;
6.4)提取6.3)二进制数据中第25字节至第30字节数据,并按字节逆序排列,得到页码编号(Page ID),其中前两个字节表示文件数(Filenum),后四个字节表示页数(Pagenum);
6.5)提取6.3)二进制数据第31字节至第32字节数据,并按字节逆序排列,得到槽编 码(Slot ID);
6.6)提取6.3)二进制数据第65字节至66字节数据,并按字节逆序排列,转换成十进制整数,得到原数据表中被修改数据的长度,记为F,找出大于F并且能被4整除的最小正整数,记为G;
6.7)提取6.3)二进制数据第73字节至第72+F字节数据,得到原数据表中被修改部分的原始数据(二进制形式);
6.8)提取6.3)二进制数据第73+G字节至第72+G+F字节数据,得到原数据表中被修改部分的现存数据(二进制形式);
6.9)使用数据库“DBCC PAGE”命令,根据6.4)中的Filenum和Pagenum,在数据库中找出数据表中数据行的完整数据,即为修改之后的数据;
6.10)在6.9)得到的数据中,找到6.8)中数据的位置,如果不在,则转至6.12);如果存在,将其替换为6.7)中的数据,得到被修改数据在修改之前的完整数据;
6.11)将6.9)和6.10)得到的二进制数据分别进行4.1)至4.6)操作,得到具体的数据表数据,转至6.14);
6.12)在6.9)步骤中对应的数据表数据被修改了不只一次,需要继续筛选6.1)中与此条修改日志记录对象编号(Object ID)一致且时间节点最近的下一条修改日志记录,如果没有,出错,结束实施例修改操作分析;否则,缓存当前修改日志至缓存区,转至6.2)先分析下一条修改日志记录;
6.13)将修改都在数据库中恢复,检查缓存区有没有待分析修改日志,如果有则转至6.2)分析该修改日志;
6。14)提取出6.1)日志记录中操作者、操作时间属性字段数据,得到完整的修改日志数据信息。转至6.1)。
本实施例针对插入操作、删除操作、修改操作,分别测试了10,000、20,000、50,
000、100,000条数据,测试时间结果如下表所示:
10,000条 | 20,000条 | 50,000条 | 100,000条 | |
插入日志 | 5,585ms | 12,109ms | 27,341ms | 59,754ms |
删除日志 | 5,643ms | 12,034ms | 27,818ms | 59,319ms |
修改日志 | 7,726ms | 19,823ms | 41,383ms | 115,528ms |
结果表明,对于插入日志和删除日志,分析所需时间与待分析的日志数量成正比,即分析算法的时间复杂度是线性的。而对于修改日志,分析所需时间却是无规律的,因为对于同一条数据库数据,无法预先判断其被修改了多少次,导致进行的修改日志分析次数不确定。同时,如果最初的修改日志缺失,将引发连环错误。总体而言,实施例的效率比人工效率有着质的提 高。
Claims (2)
1.一种基于事务日志的SQL Server数据库取证系统,其特征是,包括:数据库登录模块、数据表信息提取模块、事务日志提取模块、插入操作分析模块、删除操作分析模块和修改操作分析模块;
所述的数据库登录模块,用于提取和存储连接SQL Server数据库后的管理员权限,具体包括以下步骤:
1.1)打开并输入用户名和密码,需要此账户具有管理员权限;
1.2)通过微软提出的应用程序接口ADO实现连接和登陆关系型数据库SQL Server;
所述的数据表信息提取模块,选择待分析的数据库中的数据表,分析并提取待分析数据表的属性结构和类型,具体包括以下步骤:
2.1)选择待分析的数据库;
2.2)从所选择的数据库中选择待分析的数据表;
2.3)分析所选择的数据表的基本信息;
所述的事务日志提取模块,用于提取SQL Server数据库事务日志中关于操作的二进制记录信息,具体包括以下步骤:
3.1)通过DBCC命令获取当前数据库所有存有的事务日志数据;
3.2)筛选出所有与待分析的数据表相关的记录;
所述的插入操作分析模块,用于分析所述的事务日志提取模块所提取的事务日志中插入操作信息,并结合数据表结构和数据类型信息解析插入操作的具体日志数据,具体包括以下步骤:
4.1)从步骤3.2)中筛选出待分析的插入操作日志记录,然后,进入步骤4.2);如果不存在,结束插入操作分析并转至第五步删除操作分析;
4.2)提取出插入操作日志记录中“Row Data”属性字段数据,该数据为二进制数据;
4.3)提取该二进制数据的第一字节数据,如果数值为1,则说明数据表中属性全为长度固定的数据类型;如果数值为0,则说明数据表中属性含有长度可变的数据类型数据;
4.4)提取步骤4.1)日志记录中操作者、操作时间信息,并结合以上操作得到事务日志中的插入操作分析总结果,具体包括以下步骤:
当步骤4.3)中结果为1,说明数据表中属性全为长度固定的数据类型,具体分析步骤如下:
①提取步骤4.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在4.2)数据流中的结束位置,记为数值X;
②提取4.2)二进制数据第5字节至第X字节二进制码;
③根据2.3)的数据表格信息将②的二进制码分为2.3.1)中数据列数相同的份数,每一份的长度大小与2.3.2)中每列数据类型大小一一对应;
④将③中每一份二进制码按字节逆序排列,并按照2.3.2)中的数据类型具体解析其含义;
当4.3)中结果为0,说明数据表中属性含有长度可变的数据类型数据,具体分析步骤如下:
①提取4.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在4.2)数据流中的结束位置,记为数值Y;
②提取4.2)二进制数据第5字节至第Y字节二进制码;
③根据2.3)的数据表格信息将②的二进制码分为2.3.1)中长度固定数据类型数据列数相同的份数,每一份的长度大小与2.3.2)中每列长度固定数据类型数据的长度一一对应;
④将③中每一份二进制码逆序排列,并按照2.3.2)中的长度固定的数据类型格式具体解析其含义;
⑤提取4.2)二进制数据第Y+1字节至第Y+2字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表的总列数,应与2.3.1)的数据列数一致,记为数值Z;
⑥计算Z除以8的数值,并向上取整,记为数值R;
⑦提取4.2)二进制数据第Y+3+R字节至第Y+4+R字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表中长度可变数据类型数据的个数,记为数值P;
⑧提取4.2)二进制数据第Y+5+R字节至第Y+4+R+P*2字节数据,且以2字节为单位划分为等长度的P个数据块,将每一块的两个字节逆序排列并转换成十进制整数,所得数值为相应长度可变数据类型数据的长度;
⑨提取4.2)二进制数据第Y+5+R+P*2至数据最后,并按⑧中P个整数为长度划分为P个数据块,每个数据块对应于数据表中长度可变数据类型数据,按照其具体数据类型格式解释其含义;
4.5)提取4.1)日志记录中操作者、操作时间等信息,并结合以上操作得到事务日志中的插入操作分析总结果;
所述的删除操作分析模块,用于分析所述的事务日志提取模块所提取的事务日志中删除操作信息,并结合数据表结构和数据类型信息解析删除操作的具体日志数据,具体包括以下步骤:
5.1)从步骤3.2)中筛选出待分析的删除操作日志记录,然后,进入步骤5.2);如果不存在,结束删除操作分析并转至第六步修改操作分析;
5.2)提取出删除日志记录中“Row Data”属性字段数据,该数据为二进制数据;
5.3)提取该二进制数据的第一字节数据,如果数值为1,则说明数据表中属性全为长度固定的数据类型;如果数值为0,则说明数据表中属性含有长度可变的数据类型数据;
5.4)提取步骤5.1)日志记录中操作者、操作时间信息,并结合以上操作得到事务日志中的删除操作分析总结果,具体包括以下步骤:
当5.3)中结果为1,说明数据表中属性全为长度固定的数据类型,具体分析步骤如下:
①提取5.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在5.2)数据流中的结束位置,记为数值Q;
②提取5.2)二进制数据第5字节至第Q字节二进制码;
③根据2.3)的数据表格信息将②的二进制码分为2.3.1)中数据列数相同的份数,每一份的长度大小与2.3.2)中每列数据类型大小一一对应;
④将③中每一份二进制码按字节逆序排列,并按照2.3.2)中的数据类型具体解析其含义;
当5.3)中结果为0,说明数据表中属性含有长度可变的数据类型数据,具体分析步骤如下:
①提取5.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在5.2)数据流中的结束位置,记为数值A;
②提取5.2)二进制数据第5字节至第A字节二进制码:
③根据2.3)的数据表格信息将②的二进制码分为2.3.1)中长度固定数据类型数据列数相同的份数,每一份的长度大小与2.3.2)中每列长度固定数据类型数据的长度一一对应;
④将③中每一份二进制码逆序排列,并按照2.3.2)中的长度固定的数据类型格式具体解析其含义;
⑤提取5.2)二进制数据第A+1字节至第A+2字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表的总列数,应与2.3.1)的数据列数一致,记为数值B;
⑥计算B除以8的数值,并向上取整,记为数值C;
⑦提取5.2)二进制数据第A+3+C字节至第A+4+C字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表中长度可变数据类型数据的个数,记为数值D;
⑧提取5.2)二进制数据第A+5+C字节至第A+4+C+D*2字节数据,且以2字节为单位划分为等长度的D个数据块,将每一块的两个字节逆序排列并转换成十进制整数,所得数值为相应长度可变数据类型数据的长度;
⑨提取5.2)二进制数据第A+5+C+D*2至数据最后,并按⑧中D个整数为长度划分为D个数据块,每个数据块对应于数据表中长度可变数据类型数据,按照其具体数据类型格式解释其含义;
所述的修改操作分析模块,用于分析所述的事务日志提取模块所提取的事务日志中修改操作信息,并结合数据表结构和数据类型信息解析修改操作的具体日志数据,具体包括以下步骤:
6.1)从步骤3.2)中筛选出待分析的修改操作日志记录,并按时间顺序从后向前排列,然后,进入步骤6.2);如果不存在,则结束所有操作;
6.2)如果得到的修改操作日志记录是由删除操作和插入操作组成的,则进行5.1)至5.4)操作和4.1)至4.4)操作,得到删除数据和新插入数据,转6.14);如果得到的修改操作日志记录仅有一条含有MOFIFY标志的日志组成,转6.3);
6.3)提取出6.1)日志记录中“Row Data”属性字段数据,该数据为二进制数据;
6.4)提取该二进制数据中第25字节至第30字节数据,并按字节逆序排列,得到页码编号Page ID,其中前两个字节表示文件数Filenum,后四个字节表示文件数Pagenum;
6.5)提取该二进制数据中第31字节至第32字节数据,并按字节逆序排列,得到槽编码Slot ID;
6.6)提取该二进制数据中第65字节至66字节数据,并按字节逆序排列,转换成十进制整数,得到原数据表中被修改数据的长度,记为F,找出大于F并且能被4整除的最小正整数,记为G;
6.7)提取该二进制数据中第73字节至第72+F字节数据,得到原数据表中被修改部分的原始数据;
6.8)提取该二进制数据中第73+G字节至第72+G+F字节数据,得到原数据表中被修改部分的现存数据;
6.9)使用数据库“DBCC PAGE”命令,根据步骤6.4)中的文件数Filenum和文件数Pagenum,在数据库中找出数据表中数据行的完整数据,即为修改之后的数据;
6.10)在步骤6.9)得到的数据中,找到步骤6.8)中数据的位置,如果不在,则转至步骤6.12);如果存在,将其替换为步骤6.7)中的数据,得到被修改数据在修改之前的完整数据;
6.11)将步骤6.9)和步骤6.10)得到的二进制数据分别进行步骤4.1)至步骤4.5)操作,得到具体的数据表数据,转至步骤6.14);
6.12)继续筛选步骤6.1)中与此条修改日志记录对象编号Object ID一致且时间节点最近的下一条修改日志记录,如果没有,出错,结束修改操作分析;否则,缓存当前修改日志至缓存区,转至步骤6.2)分析下一条修改日志记录;
6.13)将修改都在数据库中恢复,检查缓存区有没有待分析修改日志,如果有则转至步骤6.2)分析该修改日志;
6.14)提取出步骤6.1)日志记录中操作者、操作时间属性字段数据,得到完整的修改日志数据信息;
所述的数据库登录模块包括:输入单元和获取权限单元;
所述的输入单元负责输入在登录SQL Server数据库时所需的用户名和密码;
所述的获取权限模块负责提取和存储连接SQL Server数据库后的管理员权限,以保证事务日志提取模块的正常运行;
所述的修改操作分析模块包括修改信息提取单元、数据库数据提取单元和修改数据分析单元;
所述的修改信息提取单元负责初步提取出事务日志中关于修改操作的记录;
所述的数据库数据提取单元负责在数据库中查找并提取出修改操作对应的数据记录;
所述的修改数据分析单元负责综合修改信息提取单元和数据库数据提取单元,以分析出修改操作前后具体的数据变动情况。
2.一种利用权利要求1所述的基于事务日志的SQL Server数据库取证系统的取证分析方法,其特征在于,通过提取和存储连接SQL Server数据库后的管理员权限,提取SQLServer数据库事务日志中关于操作的二进制记录信息,然后结合数据表结构和数据类型信息解析插入和删除操作的具体日志数据,结合数据库中原始数据和特定的算法解析出更新操作的日志数据,最后具体实现对SQL Server数据库各种用户操作的数据、时间、操作人员的解析和保存,具体包括以下步骤:
第一步、连接和登陆SQL Server数据库,具体包括以下步骤:
1.1)打开并输入用户名和密码,需要此账户具有管理员权限;
1.2)通过微软提出的应用程序接口ADO实现连接和登陆关系型数据库SQL Server;
第二步、选择数据库和数据表,并进行表格信息提取,具体包括以下步骤:
2.1)选择待分析的数据库;
2.2)从所选择的数据库中选择待分析的数据表;
2.3)分析所选择的数据表的基本信息;
第三步、获取所选择数据表的事务日志数据,具体包括以下步骤:
3.1)通过DBCC命令获取当前数据库所有存有的事务日志数据;
3.2)筛选出所有与待分析的数据表相关的记录;
第四步、进行插入操作分析,具体包括以下步骤:
4.1)从步骤3.2)中筛选出待分析的插入操作日志记录,然后,进入步骤4.2);如果不存在,结束插入操作分析并转至第五步删除操作分析;
4.2)提取出插入操作日志记录中“Row Data”属性字段数据,该数据为二进制数据;
4.3)提取该二进制数据的第一字节数据,如果数值为1,则说明数据表中属性全为长度固定的数据类型;如果数值为0,则说明数据表中属性含有长度可变的数据类型数据;
4.4)提取步骤4.1)日志记录中操作者、操作时间信息,并结合以上操作得到事务日志中的插入操作分析总结果,具体包括以下步骤:
当步骤4.3)中结果为1,说明数据表中属性全为长度固定的数据类型,具体分析步骤如下:
①提取步骤4.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在4.2)数据流中的结束位置,记为数值X;
②提取4.2)二进制数据第5字节至第X字节二进制码;
③根据2.3)的数据表格信息将②的二进制码分为2.3.1)中数据列数相同的份数,每一份的长度大小与2.3.2)中每列数据类型大小一一对应;
④将③中每一份二进制码按字节逆序排列,并按照2.3.2)中的数据类型具体解析其含义;
当4.3)中结果为0,说明数据表中属性含有长度可变的数据类型数据,具体分析步骤如下:
①提取4.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在4.2)数据流中的结束位置,记为数值Y;
②提取4.2)二进制数据第5字节至第Y字节二进制码;
③根据2.3)的数据表格信息将②的二进制码分为2.3.1)中长度固定数据类型数据列数相同的份数,每一份的长度大小与2.3.2)中每列长度固定数据类型数据的长度一一对应;
④将③中每一份二进制码逆序排列,并按照2.3.2)中的长度固定的数据类型格式具体解析其含义;
⑤提取4.2)二进制数据第Y+1字节至第Y+2字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表的总列数,应与2.3.1)的数据列数一致,记为数值Z;
⑥计算Z除以8的数值,并向上取整,记为数值R;
⑦提取4.2)二进制数据第Y+3+R字节至第Y+4+R字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表中长度可变数据类型数据的个数,记为数值P;
⑧提取4.2)二进制数据第Y+5+R字节至第Y+4+R+P*2字节数据,且以2字节为单位划分为等长度的P个数据块,将每一块的两个字节逆序排列并转换成十进制整数,所得数值为相应长度可变数据类型数据的长度;
⑨提取4.2)二进制数据第Y+5+R+P*2至数据最后,并按⑧中P个整数为长度划分为P个数据块,每个数据块对应于数据表中长度可变数据类型数据,按照其具体数据类型格式解释其含义;
4.5)提取4.1)日志记录中操作者、操作时间等信息,并结合以上操作得到事务日志中的插入操作分析总结果;
第五步、进行删除操作分析,具体包括以下步骤:
5.1)从步骤3.2)中筛选出待分析的删除操作日志记录,然后,进入步骤5.2);如果不存在,结束删除操作分析并转至第六步修改操作分析;
5.2)提取出删除日志记录中“Row Data”属性字段数据,该数据为二进制数据;
5.3)提取该二进制数据的第一字节数据,如果数值为1,则说明数据表中属性全为长度固定的数据类型;如果数值为0,则说明数据表中属性含有长度可变的数据类型数据;
5.4)提取步骤5.1)日志记录中操作者、操作时间信息,并结合以上操作得到事务日志中的删除操作分析总结果,具体包括以下步骤:
当5.3)中结果为1,说明数据表中属性全为长度固定的数据类型,具体分析步骤如下:
①提取5.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在5.2)数据流中的结束位置,记为数值Q;
②提取5.2)二进制数据第5字节至第Q字节二进制码;
③根据2.3)的数据表格信息将②的二进制码分为2.3.1)中数据列数相同的份数,每一份的长度大小与2.3.2)中每列数据类型大小一一对应;
④将③中每一份二进制码按字节逆序排列,并按照2.3.2)中的数据类型具体解析其含义;
当5.3)中结果为0,说明数据表中属性含有长度可变的数据类型数据,具体分析步骤如下:
①提取5.2)二进制数据第3字节至第4字节二进制码,并调换两字节的顺序,将其转换成十进制整数,表示固定字段数据在5.2)数据流中的结束位置,记为数值A;
②提取5.2)二进制数据第5字节至第A字节二进制码:
③根据2.3)的数据表格信息将②的二进制码分为2.3.1)中长度固定数据类型数据列数相同的份数,每一份的长度大小与2.3.2)中每列长度固定数据类型数据的长度一一对应;
④将③中每一份二进制码逆序排列,并按照2.3.2)中的长度固定的数据类型格式具体解析其含义;
⑤提取5.2)二进制数据第A+1字节至第A+2字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表的总列数,应与2.3.1)的数据列数一致,记为数值B;
⑥计算B除以8的数值,并向上取整,记为数值C;
⑦提取5.2)二进制数据第A+3+C字节至第A+4+C字节数据,并将两字节调换顺序,将其转换成十进制整数,表示数据表中长度可变数据类型数据的个数,记为数值D;
⑧提取5.2)二进制数据第A+5+C字节至第A+4+C+D*2字节数据,且以2字节为单位划分为等长度的D个数据块,将每一块的两个字节逆序排列并转换成十进制整数,所得数值为相应长度可变数据类型数据的长度;
⑨提取5.2)二进制数据第A+5+C+D*2至数据最后,并按⑧中D个整数为长度划分为D个数据块,每个数据块对应于数据表中长度可变数据类型数据,按照其具体数据类型格式解释其含义;
第六步、进行修改操作分析,具体包括以下步骤:
6.1)从步骤3.2)中筛选出待分析的修改操作日志记录,并按时间顺序从后向前排列,然后,进入步骤6.2);如果不存在,则结束所有操作;
6.2)如果得到的修改操作日志记录是由删除操作和插入操作组成的,则进行5.1)至5.4)操作和4.1)至4.4)操作,得到删除数据和新插入数据,转6.14);如果得到的修改操作日志记录仅有一条含有MOFIFY标志的日志组成,转6.3);
6.3)提取出6.1)日志记录中“Row Data”属性字段数据,该数据为二进制数据;
6.4)提取该二进制数据中第25字节至第30字节数据,并按字节逆序排列,得到页码编号Page ID,其中前两个字节表示文件数Filenum,后四个字节表示文件数Pagenum;
6.5)提取该二进制数据中第31字节至第32字节数据,并按字节逆序排列,得到槽编码Slot ID;
6.6)提取该二进制数据中第65字节至66字节数据,并按字节逆序排列,转换成十进制整数,得到原数据表中被修改数据的长度,记为F,找出大于F并且能被4整除的最小正整数,记为G;
6.7)提取该二进制数据中第73字节至第72+F字节数据,得到原数据表中被修改部分的原始数据;
6.8)提取该二进制数据中第73+G字节至第72+G+F字节数据,得到原数据表中被修改部分的现存数据;
6.9)使用数据库“DBCC PAGE”命令,根据步骤6.4)中的文件数Filenum和文件数Pagenum,在数据库中找出数据表中数据行的完整数据,即为修改之后的数据;
6.10)在步骤6.9)得到的数据中,找到步骤6.8)中数据的位置,如果不在,则转至步骤6.12);如果存在,将其替换为步骤6.7)中的数据,得到被修改数据在修改之前的完整数据;
6.11)将步骤6.9)和步骤6.10)得到的二进制数据分别进行步骤4.1)至步骤4.5)操作,得到具体的数据表数据,转至步骤6.14);
6.12)继续筛选步骤6.1)中与此条修改日志记录对象编号Object ID一致且时间节点最近的下一条修改日志记录,如果没有,出错,结束修改操作分析;否则,缓存当前修改日志至缓存区,转至步骤6.2)分析下一条修改日志记录;
6.13)将修改都在数据库中恢复,检查缓存区有没有待分析修改日志,如果有则转至步骤6.2)分析该修改日志;
6.14)提取出步骤6.1)日志记录中操作者、操作时间属性字段数据,得到完整的修改日志数据信息;
所述的步骤2.3)分析所选择的数据表的基本信息,具体步骤如下:
2.3.1)根据2.2)所选择的数据表的表名,查找该数据表有多少列属性,即列数据;
2.3.2)根据2.3.1)所查询到的列属性,分别查询到其对应的数据类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510362128.7A CN105045817B (zh) | 2015-06-26 | 2015-06-26 | 基于事务日志的SQL Server数据库取证分析系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510362128.7A CN105045817B (zh) | 2015-06-26 | 2015-06-26 | 基于事务日志的SQL Server数据库取证分析系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105045817A CN105045817A (zh) | 2015-11-11 |
CN105045817B true CN105045817B (zh) | 2019-08-02 |
Family
ID=54452364
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510362128.7A Active CN105045817B (zh) | 2015-06-26 | 2015-06-26 | 基于事务日志的SQL Server数据库取证分析系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105045817B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106897173A (zh) * | 2017-03-01 | 2017-06-27 | 四川艾特赢泰智能科技有限责任公司 | 一种查找和恢复SQL server数据库中被修改记录的方法 |
CN106897174B (zh) * | 2017-03-01 | 2021-01-01 | 四川艾特赢泰智能科技有限责任公司 | 一种针对mysql数据库的碎片恢复方法 |
CN110515985A (zh) * | 2019-08-15 | 2019-11-29 | 中国平安财产保险股份有限公司 | 数据表征方法、装置、设备及计算机存储介质 |
CN112825069B (zh) * | 2019-11-21 | 2024-05-24 | 阿里巴巴集团控股有限公司 | 数据库数据的分析方法、设备、系统及存储介质 |
CN112114519B (zh) * | 2020-09-07 | 2022-04-05 | 淮南万泰电子股份有限公司 | 一种高压组合变频器控制系统 |
CN112765250B (zh) * | 2021-01-18 | 2024-05-28 | 北京睿企信息科技有限公司 | 一种支持json数据转化为关系型数据库的方法和装置 |
CN117708094A (zh) * | 2023-12-26 | 2024-03-15 | 行吟信息科技(武汉)有限公司 | 数据处理方法、装置、电子设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101075256A (zh) * | 2007-06-08 | 2007-11-21 | 北京神舟航天软件技术有限公司 | 数据库实时审计分析系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8458805B2 (en) * | 2003-06-23 | 2013-06-04 | Architecture Technology Corporation | Digital forensic analysis using empirical privilege profiling (EPP) for filtering collected data |
-
2015
- 2015-06-26 CN CN201510362128.7A patent/CN105045817B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101075256A (zh) * | 2007-06-08 | 2007-11-21 | 北京神舟航天软件技术有限公司 | 数据库实时审计分析系统及方法 |
Non-Patent Citations (2)
Title |
---|
SQL Server数据库的证据收集与分析;董贤会;《中国优秀硕士学位论文全文数据库》;20140215;第23-51页 |
基于日志分析的MySQL数据库取证算法;谭森 等;《信息安全与通信保密》;20150331(第3期);第81-84页 |
Also Published As
Publication number | Publication date |
---|---|
CN105045817A (zh) | 2015-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105045817B (zh) | 基于事务日志的SQL Server数据库取证分析系统及方法 | |
CN105608088B (zh) | 一种基于配置文件的数据库自动创建与数据动态记录方法 | |
CN105094707B (zh) | 一种数据存储、读取方法及装置 | |
CN104268428B (zh) | 一种用于指标计算的可视化配置方法 | |
CN103186639B (zh) | 数据生成方法及系统 | |
CN102024046B (zh) | 数据重复性校验方法和装置及系统 | |
CN104331285A (zh) | 一种代码自动生成方法及系统 | |
CN104376091A (zh) | 对SQLite中删除的数据进行恢复的方法及装置 | |
CN109766085B (zh) | 一种处理枚举类型代码的方法及装置 | |
CN103077192B (zh) | 一种数据处理方法及其系统 | |
CN108255837A (zh) | 一种sql解析器及方法 | |
CN106294128B (zh) | 一种导出报表数据的自动化测试方法及装置 | |
CN109376153A (zh) | 一种基于NiFi的数据写入图数据库的系统及方法 | |
CN107392560A (zh) | 一种基于互联网的Excel表格数据发布采集方法及系统 | |
CN111563131A (zh) | 数据库实体关系生成方法、装置、计算机设备和存储介质 | |
CN109902070B (zh) | 一种面向WiFi日志数据的解析存储搜索方法 | |
CN109901978A (zh) | 一种Hadoop日志无损压缩方法和系统 | |
CN107766519B (zh) | 一种可视化配置数据结构的方法 | |
WO2011074942A1 (en) | System and method of converting data from a multiple table structure into an edoc format | |
CN102707938A (zh) | 表形式软件规格制作支援方法及装置 | |
CN105426542B (zh) | 一种SQLite空闲页上被删数据表的记录分析方法和装置 | |
CN110704635A (zh) | 一种知识图谱中三元组数据的转换方法及装置 | |
CN112989364A (zh) | 用于数据仿真的方法、设备和计算机程序产品 | |
CN110515926A (zh) | 基于分词和语义依存分析的异构数据源海量数据梳理方法 | |
CN110222169A (zh) | 一种可视化数据处理解析系统及其处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 200063 No. 1347 Guangfu West Road, Shanghai, Putuo District Patentee after: ACADEMY OF FORENSIC SCIENCE Address before: 200063 No. 1347 Guangfu West Road, Shanghai, Putuo District Patentee before: INSTITUTE OF FORENSIC SCIENCE, MINISTRY OF JUSTICE PRC |
|
CP01 | Change in the name or title of a patent holder |