13

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

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

4

4 回答 4

10

您可以使用它"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])
于 2012-11-22T14:27:26.933 回答
4

我知道聚会迟到了,但我遇到了类似的问题,但由于它位于 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 的人有所帮助。

于 2018-12-20T20:21:00.577 回答
4

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

% sqlite3 file_name .dump | grep 'my_search_string'

您可以改为通过 less 管道,然后使用 / 进行搜索:

% sqlite3 file_name .dump | less

于 2020-12-19T19:10:00.967 回答
4

@MrWorf 的回答不适用于我的 sqlite 文件(来自 Evernote 的 .exb 文件),但这种类似的方法有效:

  • 使用 DB Browser for SQLite 打开文件sqlitebrowser mynotes.exb
  • 文件/导出到 SQL 文件(将创建 mynotes.exb.sql)
  • grep 'STRING I WANT" mynotes.exb.sql
于 2019-12-19T09:52:15.507 回答