Informacje z SQLite DB są prezentowane użytkownikowi za pośrednictwem serwera WWW (wyświetlane w przeglądarce HTML). DB jest ładowana raz dla wszystkich przez małą aplikację niezależną od serwera WWW. Dane DB nie mogą zostać zmienione z przeglądarki użytkownika (jest to usługa tylko do odczytu).Czy pliki DB SQLite mogą być tylko do odczytu?
Ponieważ serwer internetowy ma własny identyfikator użytkownika, uzyskuje dostęp do pliku SQLite DB z "innymi" uprawnieniami. Ze względów bezpieczeństwa chciałbym ustawić uprawnienia pliku DB jako rw-rw-r--
.
Niestety, dzięki temu zestawowi uprawnień otrzymuję ostrzeżenie attempt to write a readonly database at line xxx
, które wskazuje na linię o transakcji SELECT
(która w zasadzie jest tylko do odczytu). Oczywiście nie otrzymuję rezultatu.
Jeśli uprawnienia zostaną zmienione na rw-rw-rw
, wszystko działa poprawnie, ale to oznacza, że każdy może manipulować przy DB.
Czy istnieje powód, dla którego SQLite DB nie można uzyskać dostępu tylko do odczytu?
Czy istnieją procesy "za kulisami", które wymagają dostępu do zapisu, nawet w przypadku transakcji SELECT?
Wyszukiwanie w StackOverflow pokazuje, że ludzie zwykle skarżą się na sytuację odwrotną: napotykają uprawnienia dostępu tylko do odczytu, uniemożliwiające pisanie do DB. Moim celem jest ochrona mojego DB przeciwko JAKIEJKOLWIEK próbie zmiany.
Dla kompletnej historii, moja aplikacja internetowa jest napisane w Perl
i wykorzystuje DBD::SQLite
Wygląda na to, że [niektóre wersje] (http://search.cpan.org/~ishigaki/DBD-SQLite-1.48/lib/DBD/SQLite.pm) w DBD :: SQLite umożliwiają określenie [ standardowe parametry URI SQLite] (http://www.sqlite.org/uri.html). Jednym z nich jest 'mode = ro'. –
Czy używasz trybu WAL? –
@CL DB jest otwarty z domyślnymi trybami; Tryb WAL jest włączony tylko wtedy, gdy jest ustawiony domyślnie – ajlittoz