【发布时间】:2016-05-14 12:28:36
【问题描述】:
来自 SQLite DB 的信息通过 Web 服务器(显示在 HTML 浏览器中)呈现给用户。数据库由独立于 Web 服务器的小型应用程序一次性加载。无法从用户浏览器更改数据库数据(这是一项只读服务)。
由于网络服务器有自己的用户 ID,它以“其他”权限访问 SQLite DB 文件。出于安全考虑,我想将数据库文件权限设置为rw-rw-r--。
不幸的是,使用此权限集,我收到警告 attempt to write a readonly database at line xxx,它指向关于 SELECT 事务的行(原则上是只读的)。当然,我没有得到任何结果。
如果权限更改为rw-rw-rw,一切正常,但这意味着每个人都可以篡改数据库。
SQLite DB 不能以只读方式访问有什么原因吗?
是否存在需要写入访问权限的“幕后”处理,即使对于 SELECT 事务也是如此?
在 StackOverflow 上的查找表明人们通常抱怨相反的情况:遇到只读访问权限阻止写入数据库。我的目标是保护我的数据库免受任何更改尝试。
对于完整的故事,我的网络应用程序是用Perl 编写的,并使用DBD::SQLite
【问题讨论】:
-
在我看来,DBD::SQLite 的some versions 允许您指定standard SQLite URI parameters。其中之一是
mode=ro。 -
你在使用 WAL 模式吗?
-
@CL DB 以默认模式打开;只有在默认情况下才启用 WAL 模式
-
我可以将我的 SQLite 数据库设为只读,并且仍然可以访问它并使用 DBD::SQLite 执行 SELECT 语句,因此这似乎是特定于平台或版本的。
-
@Bacon Bits:我转换为URI参数但它不起作用
标签: perl sqlite file-permissions readonly