PDO SQLite创建数据库的默认权限

3
使用PDO sqlite PHP适配器时,新建的sqlite数据库文件的组权限被设置为只读,并且不遵守umask。我需要每个数据库文件都可被组写入。有没有什么方法可以实现这个需求?
编辑:我知道如何更改文件的权限,我想知道是否可能按照正确的权限(根据进程umask)来创建文件。

您可以通过使用 chmod 命令在创建数据库文件后更改其权限。 - sectus
谢谢,我知道 :) 文件不是由我的脚本创建的,而是由第三方库TYPO3 Flow创建的,并用于缓存。所以,不,我不能更改所有者。 - Dmitri Pisarev
然后您需要更改这些文件的权限...或者将Apache用户和/或组更改为与创建这些文件的进程相同的用户和/或组。 - prodigitalson
我无法解释得太详细:文件是在第一次页面访问时创建的,而不是在部署期间创建的。我需要该文件可由shell用户和nginx等进行编辑...无论如何,这与所提问的问题无关。 - Dmitri Pisarev
1
我正在探索 SQLITE_DEFAULT_FILE_PERMISSIONS 的方向,让我们看看最终会得出什么结果... - Dmitri Pisarev
2个回答

3

看起来有一个 SQLITE_DEFAULT_FILE_PERMISSIONS 编译参数

如果需要,似乎会在其上应用 umask 限制。 因此,重新编译并使用 SQLITE_DEFAULT_FILE_PERMISSIONS=666,然后依靠 umask 是有意义的。遗憾的是,在sqlite中这不是默认选项。


1

在使用sqlite的connect调用打开数据库文件之前,您可以像打开普通文件一样以所需的权限打开它。这将创建一个空文件,除非该文件已经存在。Sqlite将使用数据库填充该空文件。

与在文件创建后使用chmod相比,这种方法更安全,有两个原因:

  • 在调用chmod之前,另一个用户可能会打开该文件。
  • 在某些情况下(例如配置为WAL时),sqlite将创建多个文件。它将尊重预先存在的空文件的权限,并将其用于其他文件。对主文件使用chmod会忘记为其他文件设置权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接