Sqliteデータベースのすべてのテーブルと列を検索するために利用できるライブラリまたはオープンソースユーティリティはありますか?唯一の入力は、sqliteDBファイルの名前です。
フォレンジックツールを作成しようとしていますが、sqliteファイルで特定の文字列を検索したいと思います。
"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])
これはパーティーに遅れていることは知っていますが、同様の問題がありましたが、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を使用できない他の人に役立つかもしれないと考えました。
@MrWorfの答えは私のsqliteファイル(Evernoteの.exbファイル)では機能しませんでしたが、この同様の方法は機能しました:
sqlitebrowser mynotes.exb
grep 'STRING I WANT" mynotes.exb.sql
dbをダンプして検索するだけです。
% sqlite3 file_name .dump | grep 'my_search_string'
代わりに、より少ないパイプを使用して、/を使用して検索することができます。
% sqlite3 file_name .dump | less