PG 用户对 Web 应用程序的正确设置是什么

zam*_*6ak 6 postgresql security best-practices users postgresql-9.4

我们有一个网络应用程序,可以检测数据库是否不存在并创建它。用户喜欢它,但我的想法是这样的用户拥有太多的权限。

我最好建议更改应用程序的数据库创建屏幕以提供 2 组凭据 - 一组将用于最初创建数据库而不是永久存储(例如“postgres”角色),另一组将被网络使用app 并存储在配置文件中(例如“webapp”)。此外,'webapp' 将需要能够 1) 添加新的和 2) 修改现有的表、过程和函数(Web 应用程序根据需要自动更新架构)

所以我的一些问题是:

  • 使用 PostgreSQL 9.x 时,上述场景中有哪些最佳实践?
  • 创建的数据库应该归“webapp”角色所有还是归“postgres”所有,我只是授予“webapp”必要的权限。如果是后者,新添加的对象是否归“webapp”所有,我应该避免这种情况吗?
  • 社区用户目前使用的方法有哪些?

Cra*_*ger 2

实际上,最好的方法是让 Web 应用程序根本无权创建或修改表。它应该只有权做其日常职能所需做的事情,而不是行政管理。

特别是,Web 应用程序不得以超级用户身份运行,并且最好不拥有数据库或表。

如果 Web 应用程序具有用于在升级时更改表等的内置管理功能,则它应该通过一组单独的凭据来执行此操作,并允许您在每次执行升级时提示输入这些凭据。或者让您使用管理员凭据创建文件,运行升级,然后再次删除它。

如果您无法修复 Web 应用程序以使用不同的凭据进行架构更改,那么它也可能是数据库和表的所有者。只是不要让它成为超级用户!

如果您可以修复应用程序,使其使用不同的凭据进行架构更改,则其常规非架构更改用户不应拥有这些表或数据库。它应该仅具有数据库的 CONNECT 和 TEMPORARY 权限、模式的 USAGE 权限以及GRANT对其编辑的每个表的所需权限。只是不要忘记REVOKE ALL FROM public ON DATABASE mydb;REVOKE ALL FROM public ON SCHEMA public;