PostgreSQL :限制(另一个)超级用户访问数据库

bag*_*man 2 postgresql

我是 PostgreSQL 的新手,想看看这是否可行。

有两个超级用户,'postgres'(PostgreSQL 的默认超级用户)和 'super2'。

超级用户“super2”创建了一个名为“Movies”的新数据库,并成为它的所有者。

是否可以限制超级用户“postgres”访问数据库“电影”,以便只有超级用户“super2”才能访问它,因为他是数据库的所有者。

如果可能,那么如何实现呢?

Cra*_*ger 5

法郎是完全正确的。超级用户就是这个意思。他们无所不能。他们可以做任何事情,包括将额外的代码加载到数据库中,直接修改磁盘上的表等。有关更多信息,请参阅CREATE ROLE有关客户端身份验证的文档

如果您不信任他们,请不要授予他们超级用户权限。在这种情况下,听起来您应该完成 aCREATE DATABASE movies WITH OWNER the_other_user并为他们提供正常的非超级用户登录。或者,如果他们需要创建自己的数据库,您可以授予他们CREATEDB权限。

限制超级用户的唯一方法是直接更改 PostgreSQL 中的 C 代码。即便如此,您也可能会浪费时间,因为坚定的用户ProcessUtility_hook如果拥有超级用户访问权限,就可以绕过过滤器等限制。

删除他们的超级用户访问权限。除非他们有先见之明,以某种方式后门您的系统,让他们重新获得访问权限(不太可能,而且不是微不足道的),否则您应该没问题。

ALTER USER the_user WITH NOSUPERUSER;
Run Code Online (Sandbox Code Playgroud)

CREATEDB如果您希望他们能够创建数据库,您可以添加权限。