您的位置:首页 > 数据库

【电子取证中最另类的关键词搜索】——在数据库中全文搜索

2018-03-07 00:00 471 查看

来源:信息时代的犯罪侦查(ID:besti_xxsddfzzc)
原创:@时不我待

在电子取证,——尤其在电子数据的分析和检验工作中,大家可能都曾遇到过这样一个问题,不了解数据表结构,不知道数据字典,不清楚业务逻辑,……,可工作还得硬着头皮做。于是,一般的检验人员,首先就会想到下面两个问题:
一、如何快速知道每个数据表中有多少条记录?(有的案子中,数据表有几百个,一个一个打开统计不现实)
二、如何在所有的表以及所有的数据字段中,查找关键词?(这里要用到游标的概念)
小编惯常操作的数据库是MSSQL Server,就以此为例了(如果您使用其他的DBMS,可以参考这个思想去修改sql)。
第一个问题的SQL语句参考:(小编为这个操作命名:筛查重仓表)

代码use mydb  -- 填写数据库实例名SELECT a.name, b.rowsFROM 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 --ntextxtype = 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.看上去与数据库有关,其实却没有关系……



推荐阅读:善用搜索功能让取证变的更快捷
【微信搜索的未来】
【几款搜索引擎的高级搜索语法】
一次人肉搜索的社会工程学实践
你知道“人肉搜索行为”的刑事责任有哪些吗?




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: