我是postgres的新手,我正在努力弄清楚如何在运行Web应用程序时最好地保护我的数据库。
在MySQL中,我倾向于使用管理用户来创建数据库,创建表,修改模式,删除表等等。对于某些应用程序持续使用数据库时不应发生的所有活动。然后我有第二个用户(每个应用程序一个),它具有(仅)应用程序所需的权限,如插入,更新等。这可以避免应用程序错误/黑客造成灾难性后果。
现在我想弄清楚如何在postgres中做类似的事情。似乎postgres数据库有一个“所有者”,与MySQL不同。如果我使用上面的方案,管理用户应该“拥有”所有应用程序的所有数据库吗?或者这里有哪些最佳做法?
补充:我只是发现授予“所有表”的权限似乎意味着“当前定义的所有表”并且不包括将来的表。与MySQL不同,“on foo。*”表示所有当前和未来的表。那是对的吗?有没有办法在grant语句中包含future表,还是每次都重新执行?
答案 0 :(得分:2)
一个管理员用户是OS用户postgres,他们可以按照pg_hba.conf进行访问。这是一个/系统帐户。永远不要搞乱它。
当然,dba必须拥有自己的登录名,并使用选项superuser
创建。
对于您的Web应用程序,您可以创建Web应用程序登录名,以及使用Web应用程序作为数据库所有者的数据库。
这通常是必要的,因为大多数Web应用程序都希望创建和更改其表,而不是像在数据中心设置中那样将此工作委托给管理员。
通过这种方式,您可以在不同数据库之间分离访问权限。
BTW postgresql文档非常好,只需阅读它,例如about PG database roles,the database owner和client authentication,这是PG专业。
答案 1 :(得分:1)
最好保持简单。如果您的双层设置适合您,我建议保留它,而不是在为数据库所有权创建额外角色时引入额外的管理开销。如果您需要添加更多不同级别的权限,则可能会重新考虑。