了解SQL ServerSQL 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(資料庫管理工具),找到並點擊左上方的【新建查詢】,在彈出的窗口中輸入「查詢歷史備份記錄」命令,查看是否有備份記錄。查詢結果顯示,存在完整備份和事務日誌備份,如下圖。
查詢歷史備份記錄命令SELECTbs.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_dateFROM msdb.dbo.backupmediafamily bmfINNER JOIN msdb.dbo.backupset bsON bmf.media_set_id=bs.media_set_idWHERE 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資料庫刪除數據的相關案例實操,如對文中的操作、描述有任何疑問,或者有相關資料庫案件協助支持也可以直接在微信公眾號後臺給我們留言。