是否有可用于搜索Sqlite数据库的所有表和列的库或开源实用程序?唯一的输入是sqlite DB文件的名称。
我正在尝试编写取证工具,并希望在sqlite文件中搜索特定的字符串。
答案 0 :(得分:8)
您可以使用"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])
答案 1 :(得分:1)
只需转储数据库并搜索即可。
% sqlite3 file_name .dump | grep 'my_search_string'
您可以改为通过 less 使用管道,然后使用 / 进行搜索:
% sqlite3 file_name .dump | less
答案 2 :(得分:0)
我知道聚会晚了,但是我遇到了类似的问题,但是由于它在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的人有所帮助。
答案 3 :(得分:0)
@MrWorf的答案不适用于我的sqlite文件(Evernote的.exb文件),但是这种相似的方法有效:
sqlitebrowser mynotes.exb
grep 'STRING I WANT" mynotes.exb.sql