1

在服务器上,我有两个数据库(比如 db1 和 db2 )。我有一个名为 user1 的超级用户。

我的要求是禁用数据库 db1 的 user1(超级用户)。所以使用 user1 我只能连接到 db2 而不能连接到 db1。

如何才能做到这一点。

注意:postgres 版本是 8.0,两个数据库都在同一个数据库集群上。

4

1 回答 1

4

完全删除他们的超级用户权限。让他们成为 ( ) 的所有者,这样他们就可以做任何事情,除了有限的仅限超级用户的操作,比如加载 C 扩展。db2ALTER DATABASE db2 OWNER TO whatever_userdb2

您不能限制超级用户。这才是重点。仅限超级用户的操作是突破通常的访问控制规则的操作。例如,加载用户定义的 C 函数允许您编写和加载打开pg_hba.conf和重写它的函数,或者直接操作系统目录。同样,这些adminpack函数允许您直接访问文件系统,因此它们仅限超级用户使用。

如果他们是超级用户,他们可以阅读pg_hba.conf,看到您的用户 ID 有权登录db1,然后更改您的密码,然后以您的身份登录

要求将超级用户限制为一个 DB 就像询问您是否可以让用户成为 root 用户,但仅限于一个子目录。(好的,所以使用 SELinux 你可以做到这一点,但这很复杂)。

如果你真的必须这样做,唯一的方法就是拆分db1db2分成不同的 PostgreSQL 服务器,这些服务器在不同的未授权系统用户 ID 下运行。每个都有自己独立的shared_buffers,数据目录,监听(ip-address, port)组合,WAL,用户ID,数据库列表等。由于它们在不同的系统用户下运行,他们无权读取或写入彼此的数据目录,所以他们被隔离。它们必须侦听不同的端口和/或不同的 IP 地址,尽管您可以使用 PgBouncer 使它们在外部客户端看来是同一台服务器。

于 2012-11-02T14:00:50.270 回答