База данных SQLite: только для чтения

У меня есть firebase database SQLite, которую я использую для веб-сайта. Проблема в том, что когда я пытаюсь PDOException это, я получаю PDOException

 SQLSTATE[HY000]: General error: 8 attempt to write a readonly database 

Я SSH’d на сервер и проверил разрешения, и у базы данных есть разрешения

 -rw-rw-r-- 

Я не знаком с разрешениями nix, но я уверен, что это означает

  • Не каталог
  • У владельца есть права на чтение / запись (это я, согласно ls -l )
  • У группы есть права на чтение / запись
  • У всех остальных есть разрешения на чтение

Я также смотрел везде, где я знал, что использовал программу sqlite3 , и не нашел ничего подходящего.

Поскольку я не знал, с какими разрешениями PDO пытается открыть базу данных, я сделал

 chmod o+w supplies.db 

Теперь я получаю другое PDOException :

 SQLSTATE[HY000]: General error: 14 unable to open database file 

Но он ТОЛЬКО возникает, когда я пытаюсь выполнить запрос INSERT после открытия базы данных.

Любые идеи о том, что происходит?

Проблема, как оказалось, заключается в том, что драйвер PDO SQLite требует, чтобы если вы собираетесь выполнять операцию записи ( INSERT , UPDATE , DELETE , DROP и т. Д.), То в папке, в которой находится firebase database, должны быть права на запись, так как а также фактический файл базы данных.

Я нашел эту информацию в комментарии в самой нижней части страницы руководства драйвера PDO SQLite .

Это может произойти, когда владелец самого файла SQLite не совпадает с пользователем, выполняющим скрипт. Подобные ошибки могут возникать, если не удается записать весь путь к каталогу (т.е. каждый каталог по пути).

Кому принадлежит файл SQLite? Вы?

Кто сценарий работает как? Апач или никто?

Для меня проблема была SELinux, а не разрешениями. Ошибка «только для чтения» исчезла, как только я отключил принудительное исполнение, следуя предложению, сделанному Стивом В. в комментарии к принятому ответу.

 echo 0 >/selinux/enforce 

После выполнения этой команды все работало по назначению (CentOS 6.3).

Конкретная проблема, с которой я столкнулся, была во время настройки Graphite. Я проверил три раза, что пользователь Apache принадлежит и может написать как мой графит.db, так и его родительский каталог. Но до тех пор, пока я не «зафиксировал» SELinux, все, что у меня получилось, было трассировкой стека: DatabaseError: попытка написать базу данных только для чтения

Это может быть вызвано SELinux. Если вы не хотите полностью отключать SELinux, вам необходимо установить fcontext db directory в httpd_sys_rw_content_t.

 semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/railsapp/db(/.*)?" restorecon -v /var/www/railsapp/db 

Я получил ту же ошибку из IIS под Windows 7. Чтобы исправить эту ошибку, мне пришлось добавить полные права управления учетной записью IUSR для файла базы данных sqlite. Вам не нужно изменять разрешения, если вы используете sqlite под webmatrix вместо IIS.

Я получил эту ошибку, когда попытался написать базу данных в системе Android.

По-видимому, sqlite3 не только нуждается в разрешениях записи к файлу базы данных и содержащему директорию (как уже сказал @ austin-hyde в своем ответе), но и переменная среды TMPDIR должна указывать на (возможно записываемый) каталог.

В моей системе Android я установил его в TMPDIR="/data/local/tmp" и теперь мой скрипт работает как ожидалось 🙂

Я получил это в своем браузере, когда я изменил использование http: // localhost на http: //my.local.ip.address, а затем изменил его на localhost – необходимо было остаться с IP-адресом, как только я изменил что когда-то

  • Разрешение перегрузки C ++
  • проблема с правами на запись файла в папку «Program Files»
  • SYSTEM_ALERT_WINDOW - как получить это разрешение автоматически на Android 6.0 и targetSdkVersion 23
  • IIS7 Не удалось предоставить запросы минимального разрешения
  • Оверлей экрана обнаружены блоки Android-разрешения
  • Как использовать su для выполнения остальной части сценария bash как этого пользователя?
  • Как я могу получить страшные разрешения WRITE_SECURE_SETTINGS для моего приложения для Android?
  • Правильный владелец / группа / разрешения для файлов / папок сайта Apache 2 в Mac OS X?
  • Как использовать пользовательские разрешения в Android?
  • adb remount разрешено, но доступно для доступа к суперпользователю в shell-android
  • Обзор разрешений IIS7 - ApplicationPoolIdentity
  • Давайте будем гением компьютера.