【问题标题】:Owner of postgresql databasepostgresql 数据库的所有者
【发布时间】:2020-01-30 20:25:05
【问题描述】:

我只是一个 Postgresql 新手,请原谅我的无知,postgresql 数据库的所有者是否自动拥有数据库的所有权限,包括创建的所有新表、序列等?

因此,如果我的应用程序使用名为 app-user 的 postgresql 数据库用户(并且是所有者),这是否意味着尽管 app-user 仅具有公共架构的读取权限,我仍可以在该数据库中执行任何操作?

我想要得到的是,我想要一个对单个数据库拥有完全权限的数据库用户,而不必担心将来会创建任何表等。

与 MySQL 相比,Postgresql 的权限让我有点困惑。

谢谢

【问题讨论】:

  • 来自here: "当你创建一个数据库对象时,你就成为它的所有者。默认情况下,只有对象的所有者才能对对象做任何事情。为了允许其他用户使用它,必须授予权限。(但是,具有超级用户属性的用户始终可以访问任何对象。)"

标签: postgresql


【解决方案1】:

一旦您了解基本概念,PostgreSQL 权限就非常合乎逻辑。

每个对象都带有自己的访问控制列表 (ACL),用于控制谁拥有它的权限。

每个对象都有一个所有者,即创建它的用户。默认情况下,所有者拥有所有权限,而所有其他角色都没有权限(后一条规则有很多例外,例如数据库或函数)。只有所有者可以ALTERDROP 对象。

如果一个对象可以包含其他对象(例如数据库可以包含架构或订阅,或者架构可以包含表),则您需要该对象的CREATE 权限才能在其中创建对象。

让我们把它放在一起:

  • 如果您从一个空数据库开始,用户所需要的只是数据库上的CREATE 权限(将包含在所有权中)。然后他可以在该数据库中创建模式。由于当时他是这些模式的所有者,因此他拥有CREATE 权限并且可以在其中创建对象。

  • 如果您开始使用的数据库不是空的,那么您还必须授予该用户对现有对象的权限(或更改这些对象的所有权)。作为数据库的所有者意味着是数据库中所有对象的所有者。

要回答您的具体问题,如果app-user 拥有数据库,但对架构public 没有CREATE 特权,app-user 将能够在数据库中创建新架构并在这些架构中创建对象,但无法在public 中创建对象。

【讨论】:

    猜你喜欢
    • 2011-05-17
    • 2011-01-02
    • 2015-10-06
    • 2011-12-07
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多