SQLite でデータベースファイルに書き込みを行おうとしたときに、下記のようなエラーが発生することがあります。
Error: attempt to write a readonly database (DB ファイルに書き込み権限がない?)
Error: unable to open database file (DB ファイルのあるディレクトリに書き込み権限がない?)
このような場合は、データベースファイル自体のパーミッションや、データベースファイルのあるディレクトリのパーミッションを確認します。 もし、下記のように実行してアクセスできれば、パーミッションが問題である可能性が高いです。
$ chmod 777 /your/db/dir
$ chmod 777 /your/db/dir/sample.db
実際には、パーミッションごと緩めてしまうのはセキュリティ上望ましくないので、chgrp
を使ってデータベースにアクセスできるグループを適切に設定してやります。
例えば、Web アプリケーションから SQLite データベースにアクセスしているのであれば、Apache などの HTTP デーモンがどのグループ ID で実行されているのかを調べます(通常は httpd.conf
ファイルで設定されています)。
<IfModule unixd_module>
User daemon
Group daemon
</IfModule>
上記の例では、実効グループ ID が daemon
となるので、データベースファイルの所有ユーザを daemon
に設定してやります。
$ chmod 775 /your/db/dir
$ chmod 775 /your/db/dir/sample.db
$ sudo chgrp /your/db/dir
$ sudo chgrp /your/db/dir/sample.db