【问题标题】:Postgresql: How to give the database owner permissions to public-schema?Postgresql:如何授予数据库所有者对公共模式的权限?
【发布时间】:2021-12-08 22:55:08
【问题描述】:

我的角色需要能够创建新数据库(用于多个测试场景)。这个角色应该只有在自己创建的数据库中才有权限,这就是为什么我不想在模板数据库中设置必要的权限。
现在我想知道为什么数据库的所有者对 public-schema 也没有任何权利。我想,所有者在他自己的数据库中拥有所有权利。当然,他在自己创建的模式中这样做,但不是在 public-模式中。如何在 public-schema 中自动授予此角色 USAGECREATE,而不授予 GRANT-权限它? 我无法删除并重新创建 public-schema,如果没有额外权限对其他数据库也有影响,我无法执行 ALTER SCHEMA public OWNER TO CURRENT_USER。我需要一个可以在应用程序中自动运行的解决方案,最好不需要具有 GRANT 的超级用户的帮助。这可能吗?

编辑: 版本是 13.2。我已经撤销了 public 的默认权限,因为我在实例上有多个数据库,并且我希望帐户严格分开,一个帐户不应该对其他数据库拥有权限,而不是创建它的那个。当然,我可以保留 public 的默认权限,并且只限制对其他数据库的访问(CONNECT),但我没有这样做,这对我来说似乎有点无关紧要.

我认为,经过一些额外的研究和您宝贵的 cmets,这是不可能的。所以我看到了两种替代方法:

  1. 就像我说的,我不会撤销 public 的默认权限,而是限制或仅允许通过 CONNECT 访问数据库
  2. 如果需要,我会从模板中删除 public-schema 并重新创建它;那么数据库的所有者将拥有它的所有权利,我假设

【问题讨论】:

  • 什么版本的 PostgreSQL?
  • 请显示命令序列来证明这一点。

标签: postgresql permissions


【解决方案1】:

在 PostgreSQL v14 之前,默认情况下每个人在 public 架构上都有 USAGECREATE。这可能会在 v15 中发生变化。

但是,架构由引导超级用户(通常称为 postgres)拥有,因此不允许其他任何人授予或撤销对其的权限。

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 2011-06-28
    • 2013-03-16
    • 2014-08-16
    • 1970-01-01
    • 2021-06-20
    • 2012-05-08
    相关资源
    最近更新 更多