gpt4 book ai didi

php - 我应该使用 Postgres 的角色系统来管理 Web 应用程序的用户吗?

转载 作者:可可西里 更新时间:2023-10-31 22:48:43 27 4
gpt4 key购买 nike

Postgres 已经有了功能齐全的用户管理系统。为什么我应该复制此功能并在此之上使用另一个功能?我认为这是管理用户和组的正确位置,因为它允许细粒度控制。我错了吗?是否有一些 php 库已经这样做了?
我应该补充一点,有问题的应用程序不是公共(public)网站,而是在私有(private)网络中运行的公司应用程序。

最佳答案

我强烈建议应用程序设计人员使用 PostgreSQL 的用户和角色系统……但是出于多种原因,将应用程序用户与数据库用户进行 1:1 映射通常不切实际。

  • PostgreSQL 角色在所有数据库 之间共享(尽管他们不必被授予除一个之外的任何权限)

  • 您不能拥有从普通应用程序表到 PostgreSQL 用户表的外键引用

  • 没有通过密码对用户进行身份验证的函数或其他界面。您必须建立新连接才能通过密码进行身份验证。这会破坏连接池。

相反,我建议您在数据库中使用几个角色:

  • 数据库所有者角色。此用户/角色拥有数据库及其中的表。以该用户身份运行更改数据库结构(“迁移”等)的脚本。

  • 网络应用角色。这是应用程序在建立池连接时连接的角色。这是仅GRANTed 应用程序在日常运行时需要的访问权限。它不能更改表结构、删除表等。如果表应该是仅追加的,则您不会授予此角色 UPDATE 权限。

  • (可能)一些脚本维护角色等,他们只能有限地访问他们完成任务所需的内容。

您使用普通表管理您的应用程序用户。

有时您还需要为特定类别的用户提供额外的数据库角色。如果您正在处理具有不同权限级别、部门等的应用程序,这会很方便。Web 应用程序可以 SET ROLE 来切换角色,所以如果“joe”连接并且您知道“joe”在帐户,您在运行对 joe 的查询之前“设置角色帐户”。这是更高级的,大多数人不需要它。

我认为直接使用 PostgreSQL 用户管理有意义的主要时间是应用程序具有相当复杂的访问要求并且不需要大量不同的用户(数千,​​而不是数百万)。对于 webapps,我会坚持使用普通的数据库表,只是将“db admin”角色与 webapp 连接池角色分开。

关于php - 我应该使用 Postgres 的角色系统来管理 Web 应用程序的用户吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31829075/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com