本文的閱讀對象僅限于:電子數據取證分析人員??梢允詹?,也可以拷貝下來(lái),小編覺(jué)得還是比較實(shí)際的。數據庫取證是個(gè)巨大的寶庫,有很多應用場(chǎng)景,小編會(huì )陸續推送給大家!
在電子取證,——尤其在電子數據的分析和檢驗工作中,大家可能都曾遇到過(guò)這樣一個(gè)問(wèn)題,不了解數據表結構,不知道數據字典,不清楚業(yè)務(wù)邏輯,……,可工作還得硬著(zhù)頭皮做。于是,一般的檢驗人員,首先就會(huì )想到下面兩個(gè)問(wèn)題:
一、如何快速知道每個(gè)數據表中有多少條記錄?
(有的案子中,數據表有幾百個(gè),一個(gè)一個(gè)打開(kāi)統計不現實(shí))
二、如何在所有的表以及所有的數據字段中,查找關(guān)鍵詞?
(這里要用到游標的概念)
小編慣常操作的數據庫是MSSQL Server,就以此為例了(如果您使用其他的DBMS,可以參考這個(gè)思想去修改sql)。
第一個(gè)問(wèn)題的SQL語(yǔ)句參考:(小編為這個(gè)操作命名:篩查重倉表)
use mydb -- 填寫(xiě)數據庫實(shí)例名
SELECT a.name, b.rows
FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id
WHERE (a.type = 'u') AND (b.indid IN (0, 1)) -- 這里使用了系統表
ORDER BY a.name,b.rows DESC -- 按照數據表名稱(chēng)排排序
第二個(gè)問(wèn)題相對復雜一些,需要使用游標,代碼如下:
use mydb -- 填寫(xiě)數據庫實(shí)例名
--1.定義需要查找的關(guān)鍵字。使用%%可以進(jìn)行模糊搜索
DECLARE @key_find NVARCHAR(MAX) = '%謝謝李總%';
--2.用游標Cursor_Table,遍歷所有表
DECLARE Cursor_Table CURSOR FOR
SELECT name from sysobjects WHERE xtype = 'u' AND name <> 'dtproperties';
OPEN Cursor_Table;
DECLARE @tableName NVARCHAR(MAX);
FETCH NEXT from Cursor_Table INTO @tableName;
WHILE @@fetch_status = 0
BEGIN
DECLARE @tempSQLText NVARCHAR(MAX) = '';
--3.在表中,用游標遍歷所有字段,僅限字符串類(lèi)型的數據
DECLARE columnCursor CURSOR FOR
SELECT Name FROM SysColumns WHERE ID = Object_Id( @tableName ) and (
xtype = 35 or --text,類(lèi)型名稱(chēng),下同
xtype = 99 or --ntext
xtype = 167 or --varchar
xtype = 175 or --char
xtype = 231 or --nvarchar
xtype = 239 or --nchar
xtype = 241 --xml )
OPEN columnCursor;
DECLARE @columnName NVARCHAR(MAX);
FETCH NEXT from columnCursor INTO @columnName;
WHILE @@fetch_status = 0
BEGIN
--4.在表字段中,對每一行進(jìn)行模糊搜索,并輸出找到的信息。
DECLARE @DynamicSQLText NVARCHAR(MAX) = 'IF ( EXISTS ( SELECT * FROM [' + @tableName + '] WHERE [' + @columnName + '] LIKE ''%' + @key_find + '%'' ) ) BEGIN DECLARE @CurrentTableCount Bigint = ( SELECT COUNT(*) From [' + @tableName + '] ); PRINT ''Find : Table [' + @tableName + '], Column [' + @columnName + '], Row Count:'' + CAST( @CurrentTableCount AS NVARCHAR(MAX) ) + ''.''; END';
EXEC( @DynamicSQLText );
FETCH NEXT from columnCursor INTO @columnName
END
exec(@tempSQLText);
CLOSE columnCursor;
DEALLOCATE columnCursor;
FETCH NEXT from Cursor_Table INTO @tableName;
END
CLOSE Cursor_Table;--關(guān)閉游標
DEALLOCATE Cursor_Table;--釋放游標
有的取證人員可能會(huì )說(shuō),使用電子取證綜合分析軟件,在介質(zhì)中進(jìn)行關(guān)鍵詞查找,不也能搜索到這些命中信息嗎?說(shuō)的沒(méi)錯,但是在查找到的數據中,你很難準確知道這些命中的關(guān)鍵詞具體分布在哪個(gè)表、哪個(gè)字段中。使用上述方法,可以完美解決這個(gè)問(wèn)題。
其實(shí),對于數據庫取證而言,小編總結了10個(gè)比較常見(jiàn)的場(chǎng)景。我會(huì )在后續的文章中陸續推送給大家。
這些場(chǎng)景均來(lái)源于十幾年來(lái)職務(wù)犯罪偵查工作中遇到的實(shí)際案例,在此,把這些經(jīng)驗奉送給即將和已經(jīng)轉隸到國家監察委的原檢察技術(shù)弟兄們,祝大家在新的崗位、不辱使命、再立新功!
1.只需要固定某個(gè)明確的涉案數據字段
2.只需要排除若干重復的數據
3.需要在一個(gè)數據庫中恢復刪除的數據庫記錄
4.需要在多個(gè)有業(yè)務(wù)關(guān)聯(lián)關(guān)系的數據庫中恢復刪除的數據庫記錄
5.需要在相同數據庫不同的歷史備份中恢復刪除的數據庫記錄
6.數據庫中根本不做不記錄,如何恢復這些沒(méi)記錄的數據?
7.數據庫中存在不符合正常邏輯的異?,F象
8.按照既定順序搭建系統卻無(wú)法啟動(dòng)應用,連接后臺數據庫失敗
9.需要展示和分析涉案數據發(fā)展變化關(guān)系
10.看上去與數據庫有關(guān),其實(shí)卻沒(méi)有關(guān)系
……
聯(lián)系客服