結論から
- SQLite Databaseは、SQLiteエンジン用のテーブル、インデックス、トリガー、ビューを保存するデータベース形式で、必須の拡張子はなく、標準形式には暗号化機能がありません。
- WindowsやmacOSで公式のsqlite3コマンドラインプログラムが利用できる場合は、実際のパスを指定して`sqlite3 "database.sqlite"`を実行します。`.tables`でテーブルを一覧表示し、既知のテーブルをSQLで照会します。存在しないパスを指定すると新しいデータベースが作られるため、先にパスを確認してください。スマートフォンではSQLiteファイルへの対応を明記したアプリを選び、元のファイルではなくコピーを開きます。コピーや移動の際は、メインファイルと関連する-wal・-journalファイルを一緒に扱ってください。開けない場合は、暗号化されているか、SQLite以外の形式である可能性があります。
- 出所不明のSQLiteデータベースは、信頼できない入力として扱い、コピーで作業してください。不正なファイルが未発見の解析処理の欠陥を引き起こす可能性があります。また、悪意あるスキーマが、利用アプリに登録されたSQL関数や仮想テーブルを悪用する場合もあります。アプリを作成する方には、SQLiteは接続後にtrusted_schemaを無効にするなどの対策を推奨しています。標準形式は暗号化されておらず、正常に開けても内容の信頼性は証明されません。
SQLite Databaseファイルの識別・開き方・変換
現行のSQLite 3形式仕様は、2004年6月18日公開のSQLite 3.0.0以降を対象としています。通常は1つのメインファイルに保存され、バイト順の異なるアーキテクチャ間や32ビット・64ビットシステム間で移動できます。先頭100バイトがデータベースヘッダーです。ページサイズは512~65536バイトの範囲の2の累乗です。.sqlite、.sqlite3、.dbは一般的な拡張子ですが、識別にはヘッダーを優先します。
CSVに出力するには、sqlite3で`.headers on`、`.mode csv`、`.once result.csv`を入力し、続けてSELECT文を実行します。保存されるのはクエリ結果で、データベース全体の構造ではありません。再構築用のSQLテキストには`sqlite3 "database.sqlite" .dump > backup.sql`を使い、`sqlite3 "restored.sqlite" < backup.sql`で読み込みます。出力先を誤って上書きしないようにパスを確認してください。
開き方
WindowsやmacOSで公式のsqlite3コマンドラインプログラムが利用できる場合は、実際のパスを指定して`sqlite3 "database.sqlite"`を実行します。`.tables`でテーブルを一覧表示し、既知のテーブルをSQLで照会します。存在しないパスを指定すると新しいデータベースが作られるため、先にパスを確認してください。スマートフォンではSQLiteファイルへの対応を明記したアプリを選び、元のファイルではなくコピーを開きます。コピーや移動の際は、メインファイルと関連する-wal・-journalファイルを一緒に扱ってください。開けない場合は、暗号化されているか、SQLite以外の形式である可能性があります。
WindowsやmacOSで公式のsqlite3コマンドラインプログラムが利用できる場合は、実際のパスを指定して`sqlite3 "database.sqlite"`を実行します。`.tables`でテーブルを一覧表示し、既知のテーブルをSQLで照会します。存在しないパスを指定すると新しいデータベースが作られるため、先にパスを確認してください。スマートフォンではSQLiteファイルへの対応を明記したアプリを選び、元のファイルではなくコピーを開きます。コピーや移動の際は、メインファイルと関連する-wal・-journalファイルを一緒に扱ってください。開けない場合は、暗号化されているか、SQLite以外の形式である可能性があります。
CSVに出力するには、sqlite3で`.headers on`、`.mode csv`、`.once result.csv`を入力し、続けてSELECT文を実行します。保存されるのはクエリ結果で、データベース全体の構造ではありません。再構築用のSQLテキストには`sqlite3 "database.sqlite" .dump > backup.sql`を使い、`sqlite3 "restored.sqlite" < backup.sql`で読み込みます。出力先を誤って上書きしないようにパスを確認してください。
安全チェック
出所不明のSQLiteデータベースは、信頼できない入力として扱い、コピーで作業してください。不正なファイルが未発見の解析処理の欠陥を引き起こす可能性があります。また、悪意あるスキーマが、利用アプリに登録されたSQL関数や仮想テーブルを悪用する場合もあります。アプリを作成する方には、SQLiteは接続後にtrusted_schemaを無効にするなどの対策を推奨しています。標準形式は暗号化されておらず、正常に開けても内容の信頼性は証明されません。
送り主が分からない、拡張子が二重になっている、中身が拡張子と合わない——一つでも当てはまるなら、開く前に確かめてください。
変換するときは
CSVに出力するには、sqlite3で`.headers on`、`.mode csv`、`.once result.csv`を入力し、続けてSELECT文を実行します。保存されるのはクエリ結果で、データベース全体の構造ではありません。再構築用のSQLテキストには`sqlite3 "database.sqlite" .dump > backup.sql`を使い、`sqlite3 "restored.sqlite" < backup.sql`で読み込みます。出力先を誤って上書きしないようにパスを確認してください。
元ファイルではなくコピーを変換し、変換後に画質・メタデータ・レイアウトを元と見比べてください。
よくある質問
SQLiteデータベースファイルとは何に使う形式ですか?
SQLiteのテーブル、インデックス、トリガー、ビューを保存する形式です。通常はメインファイルが1つですが、トランザクション中には復旧に必要な関連ファイルが存在する場合があります。
WindowsでSQLiteファイルを開く方法は?
sqlite3が利用できる状態で`sqlite3 "C:\data\database.sqlite"`を実行し、`.tables`を入力します。存在しないパスでは新規データベースが作られるため、ファイルの場所を確認してください。
MacでSQLiteデータベースを開く方法は?
sqlite3が利用できる場合は、ターミナルで`sqlite3 "/path/database.sqlite"`を実行します。`.tables`で一覧を表示し、SQLで照会します。事前にパスを確認してください。
スマートフォンでSQLiteデータベースを開く方法は?
SQLiteファイルへの対応を明記したアプリを選び、その手順で元のファイルではなくコピーを開きます。コピーや移動の際は、メインファイルと関連する-wal・-journalファイルを一緒に扱ってください。開けない場合は、暗号化されているか、SQLite以外の形式である可能性があります。
SQLiteデータベースが開けない場合は何を確認しますか?
パスとヘッダーを確認し、関連するジャーナルやWALファイルを保管してください。別形式や暗号化拡張を使ったファイルの可能性もあります。開けないだけでは破損と断定できません。
データを共有する場合、SQLiteとCSVのどちらを選ぶべきですか?
クエリ結果の行と列を共有するならCSVを選びます。データベースの構造が必要ならSQLiteを選びます。CSV出力ではインデックス、トリガー、ビューを保持できません。
SQLiteデータベースをCSVに変換するには?
sqlite3で`.headers on`、`.mode csv`、`.once result.csv`を入力し、SELECT文を実行します。出力されるのはそのクエリの結果で、データベース全体ではありません。
SQLiteデータベースをSQLとしてバックアップするには?
`sqlite3 "database.sqlite" .dump > backup.sql`を実行します。再構築には`sqlite3 "restored.sqlite" < backup.sql`を使います。出力をリダイレクトする前にファイル名を確認してください。
出所不明のSQLiteデータベースは安全に開けますか?
一律には保証できません。データベースのコピーで作業してください。不正なファイルが解析処理の欠陥を引き起こしたり、悪意あるスキーマがアプリのSQL関数や仮想テーブルを悪用したりする可能性があります。アプリを作成する方には、SQLiteは接続後にtrusted_schemaを無効にする対策を推奨しています。
データベースの隣にあるSQLiteのWALファイルを削除してもよいですか?
不要なファイルとは限りません。整合性の復旧に必要な情報を含むWALやロールバックジャーナルは、データベースの状態の一部です。無視して扱わないでください。
DBファイルがSQLiteかどうかヘッダーで識別するには?
標準のSQLite 3データベースは、オフセット0から`SQLite format 3`と末尾のNULを合わせた16バイトで始まります。.dbという拡張子だけでは判断できず、ヘッダーも安全性を証明しません。
標準のSQLiteデータベースは暗号化されていますか?
いいえ。標準のSQLite 3形式には暗号化機能がありません。暗号化されたデータベースはSQLite Encryption Extensionなどの拡張に依存し、対応する読み取り環境が必要な場合があります。
関連する形式
参考資料
SQLite — Database File Format · SQLite official format specification
SQLite — Command Line Shell For SQLite · SQLite official usage documentation
SQLite — Defense Against The Dark Arts · SQLite official security documentation
SQLite, Version 3 · Library of Congress digital format description