Postgresql中用户权限的最佳做法?

时间:2015-04-02 19:14:19

标签: mysql database postgresql

我是postgres的新手,我正在努力弄清楚如何在运行Web应用程序时最好地保护我的数据库。

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

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

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

2 个答案:

答案 0 :(得分:2)

一个管理员用户是OS用户postgres,他们可以按照pg_hba.conf进行访问。这是一个/系统帐户。永远不要搞乱它。

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

对于您的Web应用程序,您可以创建Web应用程序登录名,以及使用Web应用程序作为数据库所有者的数据库。

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

通过这种方式,您可以在不同数据库之间分离访问权限。

BTW postgresql文档非常好,只需阅读它,例如about PG database rolesthe database ownerclient authentication,这是PG专业。

答案 1 :(得分:1)

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