了解SQL Server
SQL Server 是Microsoft 公司推出的关系型数据库管理系统,具有使用方便可伸缩性好与相关软件集成程度高等优点,是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,提供了基于事务的企业级信息管理系统方案。
在许多案件取证分析中,取证人员常会遇到SQL Server数据库数据删除的情况,本文将和大家分享一种通过日志备份恢复SQL Server数据库删除数据的恢复方法,希望为您提供一定参考价值!
针对SQL Server数据库数据恢复我们需要了解数据库相关的操作模式,如:数据库的备份方式、数据库文件的作用等,下面将具体介绍数据库的备份及相关知识。
SQL Server数据库的文件介绍
SQL Server的每个数据库一般是以两个文件存放的,一个扩展名为mdf,是数据文件;另一个扩展名为ldf,为日志文件。因此只要定期复制这两个文件,就可以达到备份的效果。
主要数据文件(扩展名.mdf是 primary data file 的缩写)
主要数据文件包含数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。主要数据文件的建议文件扩展名是 .mdf。
次要数据文件 (扩展名.ndf是Secondary data files的缩写)
次要数据文件是可选的,由用户定义并存储用户数据。通过将每个文件放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。另外,如果数据库超过了单个 Windows 文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。
事务日志 (扩展名.ldf是Log data files的缩写)
日志文件保存用于恢复数据库的日志信息。每个数据库必须至少有一个日志文件,存放对该数据库的更新操作(增、删、改)。事务日志的建议文件扩展名是 .ldf。
Ps:本文主要介绍通过「事务日志」还原SQL Server数据库删除数据的相关内容。
SQL Server数据库的备份介绍
SQL Server数据库备份有两种方式,一种是使用数据库管理软件备份功能对数据库备份,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。
使用数据库管理软件备份功能备份
完整备份
差异备份
事务日志备份
文件和文件组备份
备份文件介绍:
SQL Server 数据库备份文件扩展名通常是.bak,也可自定义扩展名。
直接拷贝数据库文件和日志文件
此方式只需要将数据库从运行的服务器种断开或者把服务器停掉,然后将数据库脱机,就可以拷贝数据库和日志文件进行备份了。
备份文件介绍:
此方式为直接拷贝文件备份,所以备份文件一般分两种,一种是扩展名为.mdf的数据库文件,另一个是扩展名为.ldf的日志文件。
SQL Server恢复模式介绍
Microsoft SQL Server提供了三种恢复模式,是数据库的属性。它们决定了哪些数据能被备份下来,是备份和还原策略的必要部分。
简单恢复模式
主要使用于对数据库数据安全要求不太高的数据库,不备份日志,只能还原到故障前最新的备份。所以使用此模式尽量将备份的时间间隔缩短,以避免故障丢失过多的数据。
完整恢复模式
可在最大程度避免出现故障时丢失数据,它包括数据库备份和日志备份,可完整的记录所有日志直到日志被备份时才会截断日志。如果不单独备份日志的情况下,日志的体积将不断增加,所以此模式需要数据库维护人员手动维护或者在维护模式设置自动备份,此模式可恢复到任意时间点。
大容量日志恢复模式
需要备份日志,是完整模式的附加模式。大容量日志恢复模式下,大多数的大容量操作(如如导入数据、批量更新、查询插入数据等操作时)会以最小方式记录下来,故部分事务不会被记录下来,此模式可恢复到任何备份的结尾,但不支持时间点恢复。
恢复模式和备份模式关系
关于数据库的日志备份取证
事务日志取证介绍
由于日志文件能够存放对该数据库的操作(增、删、改等),所以我们可以在有较早数据库完整备份的情况下(删除、破坏等操作之前),根据日志文件记录此期间的所有操作来回滚操作来达到恢复数据的目的。
事务日志还原的前提
事务日志取证的前提,是恢复模式设置为完整恢复模式。完整恢复模式可最大程度避免出现故障时丢失数据,它包括数据库备份和日志备份,可完整的记录所有日志直到日志被备份时才会截断日志。
数据库删除数据恢复思路
思考:
数据删除的情况下,拿到主机镜像,怎样找回数据?
分析:
1、考虑从数据库源文件及日志文件中查找删除记录;
2、数据库文件损坏考虑第三方软件去修复扫描并还原数据;
3、数据库正常工作情况下查询日志操作记录并使用日志恢复取证。
数据库删除数据具体取证案例及操作步骤
案例介绍
在SQL Server数据库中有名为test的数据库,其中有两张数据表,一张表中没有数据,一张表中数据不完整,疑似有被删除的情况。
数据表内容如下↓↓↓
目的
查询是否有做过删除数据操作,如果有,尝试恢复出删除的数据内容。
前提
1、数据库设置了完整恢复模式
2、有一个删除或者数据被破坏的完整备份
Ps:前提1、2满足或者前提1满足的情况下都能尝试恢复数据,前提1不满足则无法恢复。
思路分析
1、查询原有日志文件是否有删除数据记录;
2、查询是否完整恢复模式,是否有自动备份文件;
3、能否通过日志文件或者备份文件找到删除数据内容。
取证步骤
1、开启屏幕录像,将源数据盘进行完整镜像完成数据固定;
2、加载镜像扫描提取源数据库及日志文件;
3、使用工具扫描日志文件中的操作记录恢复取证;
4、步骤3无数据情况下,仿真运行镜像查找备份历史记录找到备份文件;
5、通过备份还原进行具体时间点的恢复取证。
具体案例操作步骤
接下来,我们将介绍两种日志恢复取证的方法。
方法一
通过SysTools SQL Log Analyzer查找进行恢复数据
准备:
SysTools SQL Log Analyzer,test.mdf,test_log.ldf(用于读取和分析SQL Server日志文件(.ldf)事务的SQL LDF查看器工具。将数据库的mdf和ldf文件拷贝出来,用此工具加载查看删除数据。)
步骤如下↓↓↓
01.加载ldf文件
02.扫描日志文件完成
03.发现删除的数据
方法1简单实用,但是,在遇到ldf文件被删除或者ldf被破坏等情况时,方法1就显得不太可行了。
扫描结果如下,共找到0条操作日志。
至此,我们需要第二种方式进行日志恢复取证。
方法二
通过恢复日志(指定时间点恢复)来恢复数据
准备
SQL Server Management Studio,完整备份文件,事务日志备份文件,大致数据删除或者数据破坏时间点。
01.查询是否有自动备份文件(已仿真情况下)
1)打开SQL Server Management Studio(数据库管理工具),找到并点击左上方的【新建查询】,在弹出的窗口中输入「查询历史备份记录」命令,查看是否有备份记录。查询结果显示,存在完整备份和事务日志备份,如下图。
查询历史备份记录命令
SELECT
bs.database_name,
bs.name AS backupset_name,
bs.backup_size,
bmf.physical_device_name,
CASE bs.type
WHEN 'D' THEN '完整备份'
WHEN 'I' THEN '差异备份'
WHEN 'L' THEN '日志备份'
END AS backup_type,
bs.backup_finish_date
FROM msdb.dbo.backupmediafamily bmf
INNER JOIN msdb.dbo.backupset bs
ON bmf.media_set_id=bs.media_set_id
WHERE bs.backup_start_date>DATEADD(DAY,-1,GETDATE())
ORDER BY bs.backup_finish_date
2)根据结果中路径指向,找到备份文件:backup.bak
02.日志备份恢复取证
1)分离原有数据库,拷贝备份,然后进行数据恢复取证。
2)新建test,选择数据库右键还原,选择具体的时间点,点击还原。至此,删除数据被恢复,恢复结束。
还原完成后的数据如下。至此,日志还原取证完成。
注意事项
1、文中所有代码都通过SQL Server Management Studio中「新建查询」后「执行」完成操作;
2、恢复数据的前提一定恢复模式设置为完整模式;
3、日志恢复取证的前提是有一个删除数据前的完整备份文件和日志备份文件;
4、SQL Server客户端备份恢复向下兼容,尽量用同版本程序还原。
“
本文主要介绍通过日志备份还原SQL Server数据库删除数据的相关案例实操,如对文中的操作、描述有任何疑问,或者有相关数据库案件协助支持也可以直接在微信公众号后台给我们留言。