【问题标题】:PDO SQLite create database default permissionsPDO SQLite 创建数据库默认权限
【发布时间】:2015-02-11 12:37:13
【问题描述】:

使用 PDO sqlite PHP 适配器时,创建新的 sqlite 数据库文件,组权限设置为只读,并且不支持 umask。

我需要每个数据库文件都可以按组写入。有什么方法可以实现吗?

编辑:我知道如何更改文件的权限,我在问是否可以使用正确的权限(根据处理 umask)创建它。

【问题讨论】:

  • 您可以在创建数据库文件后使用chmod更改其权限
  • 谢谢,我知道 :) 文件不是在我的脚本中创建的,而是由第三方库 TYPO3 Flow 创建的,用于缓存。所以不,我不能吃。
  • 那么您需要更改这些文件的权限...或者将 Apache 用户和/或组更改为与创建这些文件的进程相同的用户和/或组。
  • 我不能。太长无法详细解释:文件是在第一页点击时创建的,而不是在部署期间创建的,我需要 shell 用户和 nginx 等都可以编辑该文件……这与提出的问题无关。
  • 我正在挖掘 SQLITE_DEFAULT_FILE_PERMISSIONS 的方向,让我们看看它的结局......

标签: php sqlite pdo file-permissions


【解决方案1】:

好像有一个SQLITE_DEFAULT_FILE_PERMISSIONS compilation parameter

如有必要,似乎umask is applied on top of it 对其进行了限制。 所以用SQLITE_DEFAULT_FILE_PERMISSIONS=666重新编译而不是依赖umask是有意义的。太糟糕了,它不是 sqlite 中的默认选项。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 2014-07-09
      • 1970-01-01
      • 2011-09-04
      • 2014-06-05
      • 2018-02-14
      • 2012-01-22
      相关资源
      最近更新 更多