编者按
本文的阅读对象仅限于:电子数据取证分析人员。可以收藏,也可以拷贝下来,小编觉得还是比较实际的。数据库取证是个巨大的宝库,有很多应用场景,小编会陆续推送给大家!
在电子取证,——尤其在电子数据的分析和检验工作中,大家可能都曾遇到过这样一个问题,不了解数据表结构,不知道数据字典,不清楚业务逻辑,……,可工作还得硬着头皮做。于是,一般的检验人员,首先就会想到下面两个问题:
一、如何快速知道每个数据表中有多少条记录?
(有的案子中,数据表有几百个,一个一个打开统计不现实)
二、如何在所有的表以及所有的数据字段中,查找关键词?
(这里要用到游标的概念)
小编惯常操作的数据库是MSSQL Server,就以此为例了(如果您使用其他的DBMS,可以参考这个思想去修改sql)。
第一个问题的SQL语句参考:(小编为这个操作命名:筛查重仓表)
代码
use mydb -- 填写数据库实例名
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 -- 按照数据表名称排排序
第二个问题相对复杂一些,需要使用游标,代码如下:
代码
use mydb -- 填写数据库实例名
--1.定义需要查找的关键字。使用%%可以进行模糊搜索
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.在表中,用游标遍历所有字段,仅限字符串类型的数据
DECLARE columnCursor CURSOR FOR
SELECT Name FROM SysColumns WHERE ID = Object_Id( @tableName ) and(
xtype = 35 or --text,类型名称,下同
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.在表字段中,对每一行进行模糊搜索,并输出找到的信息。
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;--关闭游标
DEALLOCATE Cursor_Table;--释放游标
有的取证人员可能会说,使用电子取证综合分析软件,在介质中进行关键词查找,不也能搜索到这些命中信息吗?说的没错,但是在查找到的数据中,你很难准确知道这些命中的关键词具体分布在哪个表、哪个字段中。使用上述方法,可以完美解决这个问题。
其实,对于数据库取证而言,小编总结了10个比较常见的场景。我会在后续的文章中陆续推送给大家。
这些场景均来源于十几年来职务犯罪侦查工作中遇到的实际案例,在此,把这些经验奉送给即将和已经转隶到国家监察委的原检察技术弟兄们,祝大家在新的岗位、不辱使命、再立新功!
十种数据库取证场景
1.只需要固定某个明确的涉案数据字段
2.只需要排除若干重复的数据
3.需要在一个数据库中恢复删除的数据库记录
4.需要在多个有业务关联关系的数据库中恢复删除的数据库记录
5.需要在相同数据库不同的历史备份中恢复删除的数据库记录
6.数据库中根本不做不记录,如何恢复这些没记录的数据?
7.数据库中存在不符合正常逻辑的异常现象
8.按照既定顺序搭建系统却无法启动应用,连接后台数据库失败
9.需要展示和分析涉案数据发展变化关系
10.看上去与数据库有关,其实却没有关系
……
请长按选择识别图中的二维码并关注【信息时代的犯罪侦查】公众号,了解犯罪手段、侦查技术、办案心得,做到自我提升、自我救赎!
领取专属 10元无门槛券
私享最新 技术干货