Informationen aus einer SQLite-DB werden dem Benutzer über einen Webserver angezeigt (in einem HTML-Browser angezeigt). Die Datenbank wird einmalig von einer kleinen, vom Webserver unabhängigen Anwendung geladen. DB-Daten können nicht vom Benutzerbrowser geändert werden (dies ist ein schreibgeschützter Dienst).Können SQLite-DB-Dateien schreibgeschützt gemacht werden?
Da der Webserver über eine eigene Benutzer-ID verfügt, greift er auf die SQLite DB-Datei mit "anderen" Berechtigungen zu. Aus Sicherheitsgründen möchte ich die DB-Dateiberechtigungen als rw-rw-r--
festlegen.
Leider, mit diesem Berechtigungssatz, bekomme ich eine Warnung attempt to write a readonly database at line xxx
, die auf eine Zeile über eine SELECT
Transaktion zeigt (die im Prinzip schreibgeschützt ist). Natürlich bekomme ich kein Ergebnis.
Wenn Berechtigungen auf rw-rw-rw
geändert werden, funktioniert alles gut, aber das bedeutet, dass jeder die DB manipulieren kann.
Gibt es einen Grund, warum auf die SQLite DB nicht schreibgeschützt zugegriffen werden kann?
Gibt es "hinter den Kulissen" Verarbeitungen, die Schreibzugriff benötigen, auch für SELECT-Transaktionen?
Nachschlagen in StackOverflow zeigt, dass sich Benutzer normalerweise für die gegenteilige Situation beschweren: eine schreibgeschützte Zugriffsberechtigung, die das Schreiben in die DB verhindert. Mein Ziel ist es, meine Datenbank vor jedem Änderungsversuch zu schützen.
Für die komplette Geschichte, meine Web-App in Perl
geschrieben und verwendet DBD::SQLite
Es sieht für mich wie [einige Versionen] (http://search.cpan.org/~ishigaki/DBD-SQLite-1.48/lib/DBD/SQLite.pm) von DBD :: SQLite können Sie angeben, [ Standard-SQLite-URI-Parameter] (http://www.sqlite.org/uri.html). Einer davon ist 'mode = ro'. –
Verwenden Sie den WAL-Modus? –
@CL DB wird mit Standardmodi geöffnet; WAL-Modus ist nur aktiviert, wenn es Standard ist – ajlittoz