取消链接并重新创建以只读模式打开的SQLite数据库是否安全?

时间:2017-11-07 16:49:49

标签: sqlite

我有一个这样的用例:

  • 我有一组服务器应用程序,每个都在他们的机器上
  • 他们每个人都通过JDBC
  • 查询本地文件系统上的SQLite DB文件
  • DB以只读模式打开(因此,例如,没有创建WAL日志文件)
  • 定期,此DB文件由批处理进程重新生成并同步到运行服务器应用程序的计算机

服务器使用SQLite作为一个美化的键值存储,基本上 - 非常简单的查询,只读,不写。

这似乎有效,因为服务器应用程序可以看到新数据。

但是,这样安全吗?

https://www.sqlite.org/howtocorrupt.html#unlink说明

  

取消链接或重命名打开的数据库文件会导致行为未定义且可能不合需要。

但由于WAL日志需要额外的文件,这似乎是在读写数据库的上下文中。

看起来SQLite确实采取了一些步骤来检测文件在其下面的变化 - 例如https://www.sqlite.org/fileio.html的第5.11节谈到当SQLite检测到文件在其下面被更改时使内存页面缓存无效

现在,我一直在谨慎并关闭/重新打开文件,但对于我的特定用例,如果我可以踩到它,那么维护的代码就会减少文件通过unlink + rename和委托给SQLite本身来检测和处理这种情况。

0 个答案:

没有答案