0

昇格したプロセスがあり、そのプロセスが作成する SQLite ファイルが他のプロセスから読み取り可能であることを確認したいと考えています。何らかの理由umaskで、私が望むことをしていないようです(プロセスによって作成されたsqliteファイルの権限を設定します)。

先行書き込みログを使用しているため-wal-shmデータベース ファイルに加えてファイルが作成されます。3 つすべてを正しく chmod したい。

SQLiteファイルを作成してから入ることは可能でしょうかchmod

可能なアプローチ:

  1. touchSQLiteがそれらを作成しようとする前に3つのファイルすべてを作成し、次にchmodして、マスクが同じままであることを願っています
  2. ファイルが作成されたときに傍受しchmodます。
  3. プロセスに取り組む方法を考え出しumaskます。
  4. 謎の選択肢その4。

最善の方法は何ですか?

アプローチに関する質問:

  1. これでSQLiteは大丈夫でしょうか?
  2. 3 つのファイルすべてがいつ作成されるか知っていますか? 関数ポインタを指定できるコールバックはありますか? 同じファイルが永遠に存在するwalかどうかを知っていますか? shmそれとも、削除されて再作成されますか?
4

1 に答える 1

1

データベース ファイルは、開く前に触れることができます。(sqlite3コマンドライン ツールを使用して新しいファイルを開き、 and だけを実行するbegin;commit;、SQLite 自体がサイズ 0 のファイルを作成します。)

ファイル操作を傍受したい場合は、独自のVFSを登録できます。

およびファイルは動的に作成さ-wal-shmますが、SQLite はそれらにメイン データベース ファイルと同じパーミッション ビットを付与します。のコメントはrobust_open()次のos_unix.cとおりです。

ファイル作成モード "m" が 0 の場合、SQLite のデフォルトに設定します。デフォルトは、システム umask によって変更された SQLITE_DEFAULT_FILE_PERMISSIONS (通常は 0644) です。m が 0 でない場合、umask を無視してファイル作成モードを正確に m にします。

m パラメーターは、-wal、-journal、および -shm ファイルを作成する場合にのみゼロ以外になります。これらのファイルには、元のデータベースとまったく同じパーミッションを付与し、umask を追加する必要はありません。そのようにして、データベース ファイルが-rw-rw-rwまたは-rw-rw-r-であり、トランザクションがクラッシュしてホット ジャーナルが残っている場合、データベースに書き込むことができるプロセスはホット ジャーナルを回復することもできます。

于 2012-09-27T06:40:02.640 に答える