将 Postgres 数据库物理存储在 Ubuntu 用户主目录的子文件夹中

将 Postgres 数据库物理存储在 Ubuntu 用户主目录的子文件夹中

我目前正在设置一个 Ubuntu 18.04 服务器,其中许多不同的用户都拥有 SSH 访问权限 - 包括访问服务器的 Postgres SQL 以及创建自己的 Postgres 数据库的能力。

我想要实现的是以下几点。当用户创建自己的 Postgres 数据库时,我希望这些新数据库自动物理存储在用户主目录的子文件夹中。

请注意,我知道有方法可以明确选择要在其中创建数据库的备用物理驱动器位置,而不是 Postgres 的默认位置。但是,我似乎找不到配置 Postgres 的方法,使其强制执行指定用户创建的数据库将自动存储在该 Ubuntu 用户的主目录中。也就是说,无需用户选择自己的主目录子文件夹作为新数据库的目标。

当然,我可以为每个 Ubuntu 用户自动在用户的主目录中创建一个 Postgres 备用位置(按照上面提到的链接)。但仍然不强制将用户创建的数据库物理存储在那里,而不是标准 Postgres 安装位置。

如能得到任何提示我将非常感激。

答案1

假设您已经有一个 PostgreSQL 用户,他对应于具有主目录的bob系统用户,并且您希望将 PostgreSQL 数据存储在已经存在且具有适合 PostgreSQL 数据库服务器访问的权限的 下,如果您运行的是相对较新版本的 PostgreSQL,以下步骤可能会有效。bob/home/bob/home/bob/pg

  1. 为用户创建一个新的表空间:

    CREATE TABLESPACE bob OWNER bob LOCATION '/home/bob/pg`;
    
  2. 为用户设置默认表空间:

    ALTER USER bob SET default_tablespace = bob;
    

但是,这不会阻止bob在另一个(特别是默认)表空间中创建对象,因此您需要bob从默认表空间中 REVOKE 的权限:

REVOKE ALL ON TABLESPACE pg_default FROM bob;

答案2

我想你会发现用户无法简单地创建自己的 Postgress 数据库并将其正确集成到服务器功能中。我相信需要比简单用户更高的权限。

此外,您将遇到的另一个问题是 SELinux 标签。新区域必须正确标记,以便 postgres 访问用户目录中的文件以及许多 SELinux 更改。我认为,作为一个好的系统类型,您将在强制模式下运行 SELinux。

总结...你可以做到,但需要大量的工作和分析来确保系统的安全性和完整性。

相关内容