Mysql Postgresql中用户权限的最佳实践?

Mysql Postgresql中用户权限的最佳实践?,mysql,database,postgresql,Mysql,Database,Postgresql,我是postgres的新手,我正试图找出在运行web应用程序时如何最好地保护我的数据库 在MySQL中,我倾向于使用管理用户来创建数据库、创建表、修改模式、删除表等:用于某些应用程序持续使用数据库时不应发生的所有活动。然后,我有第二个用户(每个应用程序一个),该用户(仅)拥有应用程序所需的权限,如插入、更新等。这避免了应用程序错误/黑客造成灾难性后果 现在我想知道如何在博士后做类似的事情。与MySQL数据库不同,postgres数据库似乎有一个“所有者”。如果我使用上面的方案,管理用户是否应该“

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

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

现在我想知道如何在博士后做类似的事情。与MySQL数据库不同,postgres数据库似乎有一个“所有者”。如果我使用上面的方案,管理用户是否应该“拥有”所有应用程序的所有数据库?或者这里有哪些最佳实践


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

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

一个管理用户是OS user postgres,他可以根据pg_hba.conf进行访问。这是一个系统帐户。永远不要弄乱它

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

对于您的web应用,您可以创建一个web应用登录,以及一个数据库,其中web应用为数据库所有者

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

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


顺便说一句,postgresql文档非常好,例如,只要仔细阅读一下,这是PG的特色。

MySQL数据库相当于Postgres模式