来自SQLite数据库的信息通过Web服务器(显示在HTML浏览器中)呈现给用户。数据库由独立于Web服务器的小型应用程序加载一次。 DB数据不能从用户浏览器中更改(这是只读服务)。SQLite数据库文件可以只读吗?
由于Web服务器有自己的用户标识,因此它使用“其他”权限访问SQLite DB文件。出于安全原因,我想将DB文件权限设置为rw-rw-r--
。
不幸的是,有了这个权限集,我得到一个警告attempt to write a readonly database at line xxx
,它指向一条关于SELECT
事务(原则上它是只读的)的一行。当然,我没有结果。
如果权限更改为rw-rw-rw
,一切正常,但这意味着每个人都可以篡改数据库。
是否有任何理由为什么SQLite数据库不能被访问只读?
即使对于SELECT事务,是否存在需要写访问的“幕后”处理?
在StackOverflow上查找表明,人们通常会抱怨相反的情况:遇到阻止写入数据库的只读访问权限。我的目标是保护我的数据库免受任何更改尝试。
对于完整的故事,我的web应用程序是用Perl
和使用DBD::SQLite
在我看来,像[某些版本](http://search.cpan.org/~ishigaki/DBD-SQLite-1.48/lib/DBD/SQLite.pm)的DBD :: SQLite允许您指定[标准SQLite URI参数](http://www.sqlite.org/uri.html)。其中之一是'mode = ro'。 –
你在使用WAL模式吗? –
@CL DB以默认模式打开; WAL模式仅在默认情况下启用 – ajlittoz