搜索 Sqlite 数据库 - 所有表格和列

20

是否有一个库或开源实用程序可以搜索Sqlite数据库的所有表和列?唯一的输入是Sqlite DB文件的名称。

我正在尝试编写一款取证工具,并希望在SQLite文件中搜索特定字符串。

4个回答

18

只需转储数据库并搜索它。

% sqlite3 文件名 .dump | grep '我的搜索字符串'

您可以使用管道符号将结果传递给 less 命令,然后使用 / 来搜索:

% sqlite3 文件名 .dump | less


这对于Windows也很好。您可以在PowerShell中使用Select-String而不是grep。 - js2010

12
你可以使用"SELECT name FROM sqlite_master WHERE type='table'"来查找数据库中表的名称。从那里开始,很容易选择每个表的所有行。
例如:
import sqlite3
import os

filename = ...
with sqlite3.connect(filename) as conn:
    conn.row_factory = sqlite3.Row
    cursor = conn.cursor()    
    cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
    for tablerow in cursor.fetchall():
        table = tablerow[0]
        cursor.execute("SELECT * FROM {t}".format(t = table))
        for row in cursor:
            for field in row.keys():
                print(table, field, row[field])

太棒了!我还有一个附加问题---假设我正在表格中搜索字符串“sms”,一旦找到,如何在上面的代码片段中打印列名+表名? - ST-User
我已经修改了代码,使用了 sqlite3.Row 行工厂。这使得 cursor 返回类似字典的行。行键是列名。 - unutbu

8

我知道这个问题有点晚了,但我遇到了类似的问题,因为它发生在 Docker 镜像中,我无法访问 Python,所以我是这样解决的:

for X in $(sqlite3 database.db .tables) ; do sqlite3 database.db "SELECT * FROM $X;" | grep >/dev/null 'STRING I WANT' && echo $X; done

这将遍历数据库文件中的所有表格并执行一个全选操作,然后我使用grep命令查找字符串。如果找到该字符串,则打印出对应的表格,然后就可以使用sqlite3工具进一步了解它是如何被使用的。
如果其他人无法使用Python,这可能会很有帮助。

6

@MrWorf的回答对我的sqlite文件(来自Evernote的.exb文件)没有用,但是这种类似的方法可以解决:

  • 使用DB Browser for SQLite打开文件sqlitebrowser mynotes.exb
  • 文件/导出到SQL文件(将创建mynotes.exb.sql)
  • grep '我想要的文本' mynotes.exb.sql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接