perl - SQLite 数据库文件可以设为只读吗?

标签 perl sqlite file-permissions readonly

来自 SQLite 数据库的信息通过 Web 服务器(显示在 HTML 浏览器中)呈现给用户。数据库由独立于 Web 服务器的小型应用程序一次性加载。无法从用户浏览器更改数据库数据(这是一项只读服务)。

由于网络服务器有自己的用户 ID,它使用“其他”权限访问 SQLite 数据库文件。出于安全原因,我想将数据库文件权限设置为 rw-rw-r--

不幸的是,设置了这个权限后,我收到一条警告 attempt to write a readonly database at line xxx 指向关于 SELECT 事务的行(原则上是只读的)。当然,我没有得到任何结果。

如果权限更改为rw-rw-rw,一切正常,但这意味着任何人都可以篡改数据库。

有什么原因导致 SQLite DB 无法以只读方式访问吗?

是否存在需要写入权限的“幕后”处理,即使是 SELECT 事务?

在 StackOverflow 上的查询表明人们通常提示相反的情况:遇到阻止写入数据库的只读访问权限。我的目标是保护我的数据库免受任何更改尝试。

对于完整的故事,我的网络应用程序是用 Perl 编写的,并使用 DBD::SQLite

最佳答案

您必须以readonly 模式连接到您的 SQLite 数据库。

来自 the docs :

You can also set sqlite_open_flags (only) when you connect to a database:

use DBD::SQLite;
my $dbh = DBI->connect("dbi:SQLite:$dbfile", undef, undef, {
  sqlite_open_flags => DBD::SQLite::OPEN_READONLY,
});

-- https://metacpan.org/pod/DBD::SQLite#Database-Name-Is-A-File-Name

关于perl - SQLite 数据库文件可以设为只读吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35208727/

相关文章:

performance - 使用嵌套 for 循环的 Perl 脚本性能缓慢

python 从表中选择列,其中列 = self.variable

java - SQL rawQuery 如果包含

PHP 文件不在 Windows 机器上执行

asp.net - 使用Azure blob存储,我们需要应用程序的用户特定文件访问,有什么方法可以实现吗?

java - 管理和加载属性的最佳实践

关于 unpack() 和 printf() 中的 v 标志的 Perl 问题

regex - 在 Perl 中检查给定字符串是否以 A-Z 开头

ruby-on-rails - 导入sql文件及其模式的命令是什么?

linux - 为什么我不能 cd 到/var/lib/mysql