【问题标题】:Best practices for user permissions in Postgresql? [closed]Postgresql 中用户权限的最佳实践?
【发布时间】:2015-06-07 20:46:48
【问题描述】:

我是 postgres 的新手,我正在尝试找出在运行 Web 应用程序时如何最好地保护我的数据库。

在 MySQL 中,我倾向于使用管理用户来执行诸如创建数据库、创建表、修改模式、删除表等操作:当某些应用程序持续使用数据库时,所有不应该发生的活动。然后我有第二个用户(每个应用程序一个),他(仅)拥有应用程序所需的权限,如插入、更新等。这样可以避免应用程序错误/黑客造成灾难性后果。

现在我正试图弄清楚如何在 postgres 中做类似的事情。与 MySQL 不同,postgres 数据库似乎有一个“所有者”。如果我使用上面的方案,管理用户是否应该“拥有”所有应用程序的所有数据库?或者这里有哪些最佳做法?

补充:我只是发现授予“所有表”的权限似乎意味着“当前定义的所有表”并且不包括未来的表。与 MySQL 不同,“on foo.*”表示所有当前和未来的表。那是对的吗?有没有办法在授权语句中也包含未来的表,还是我每次都重新执行?

【问题讨论】:

  • 一个 MySQL 数据库相当于一个 Postgres 架构

标签: mysql database postgresql


【解决方案1】:

一个管理员用户是操作系统用户 postgres,他根据 pg_hba.conf 具有访问权限。这是一个/系统帐户。永远不要惹它。

当然,dba 必须有自己的登录名,使用选项superuser 创建它。

为您的 Web 应用程序创建一个 Web 应用程序登录名,以及一个将该 Web 应用程序作为数据库所有者的数据库。

这通常是必要的,因为大多数 Web 应用程序都希望创建和更改其表,而不是像数据中心设置中惯常那样将这项工作委托给管理员。

这样您就可以分离不同数据库之间的访问权限。

顺便说一句,postgresql 文档非常好,请仔细阅读,例如 about PG database rolesthe database ownerclient authentication,这是一个 PG 专业。

【讨论】:

    【解决方案2】:

    最好保持简单。如果您的两层设置适合您,我建议保留它,而不是在为数据库所有权创建额外角色时引入额外的管理开销。如果您需要添加更多不同级别的权限,您可能会重新考虑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-21
      • 2013-10-14
      • 2021-08-03
      • 1970-01-01
      • 2010-09-21
      • 2011-11-13
      • 2019-12-28
      • 2011-02-28
      相关资源
      最近更新 更多