温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Owner of postgresql database
postgresql

其他 - Postgresql数据库的所有者

发布于 2020-03-27 15:48:38

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

因此,如果我的应用程序使用了一个名为app-user(也是所有者)的Postgresql数据库用户,这是否意味着即使该应用程序用户仅对公共模式具有读取权限,我也可以在该数据库中执行任何操作?

我想要了解的是,我希望一个数据库用户对单个数据库具有完全特权,而不必担心将来会创建任何表等。

与MySQL相比,Postgresql特权对我来说几乎没有什么困惑。

谢谢

查看更多

查看更多

提问者
hitman222
被浏览
153
Laurenz Albe 2020-01-31 16:13

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

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

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

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

因此,我们将其放在一起:

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

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

要回答您的特定问题,如果app-user拥有数据库但CREATE对模式没有特权publicapp-user则将能够在数据库中创建新模式并在这些模式中创建对象,但将不能在中创建对象public