【问题标题】:Is it legitimate to use the Postgres role system for web app authentication and role management?使用 Postgres 角色系统进行 Web 应用身份验证和角色管理是否合法?
【发布时间】:2020-03-20 11:43:42
【问题描述】:

我的情况

我想使用 ReactPostgres 创建我的第一个端到端 Web 应用程序。我之前在 Intranet 的工作中确实使用过 Postgres,并使用 Postgres 角色系统进行用户身份验证。

角色

我计划的网络应用程序将是一个团队规划系统。它将由以下用户角色组成:

  • 网络管理员(我,超级用户)
  • 团队管理员(可以在他/她的团队中插入/删除用户,全局设置 为团队应用功能设置等)
  • 团队用户(可以调整存储在
    数据库,例如颜色,自己的个人资料)
  • visitor(只能查看团队及其成员)

我的方法

我目前对用户身份验证和角色管理的计划是将上述角色作为 Postgres 组角色,并在每个组角色中,定位相应用户的登录角色。因此,用户身份验证将完全由 Postgres 的内置角色系统管理。

然后通过

应用不同的数据访问
  • 基于表和基于列的权限GRANTs 以及每个组角色的视图实现和
  • row security policies 用于将数据子集到相应的团队 用户。

这是一个好方法吗?

【问题讨论】:

  • 从数据库的角度来看,这种方法没有任何问题。
  • 经过更多研究后,我不知道我是否应该 (1) 使用 postgres 的实际登录角色系统或 (2) 仅使用组角色并在不同模式中拥有一个用户表。此外,我发现连接池可能会成为我的方法的一个问题(如 @JGH 所述)
  • 连接池是一个真正的问题。但是,如果您使用每个组的登录角色,它仍然是可行的。
  • 实际上我发现这个(相当老的)thread 可能对我有帮助。看来有了这个我可以成功建立连接池

标签: postgresql authentication web-applications roles


【解决方案1】:

虽然可行,但可能不是最简单的方法。

当您开始使用连接池时会出现问题。每次向数据库发出请求时,都必须先切换用户。

另外,有一天会使用错误的用户(忘记切换,否则),但几乎不可能调试甚至发现:您会记录 Bob 更新的表 X,而不是 @987654323 @更新了它。

【讨论】:

  • 感谢您的回复。我对您的陈述感到困惑的是“每次您向数据库发出请求时,您都必须先切换用户”。您的意思是,如果其他用户使用与以前用户相同的连接,我对 current_user 的输出会有所不同?
  • @JoeBe 是的,因为在一个连接池中,连接并没有关闭,只是简单的“返回池中”,所以会话参数(比如当前用户!)仍然存在
  • 使用this thread中解释的建议怎么样?
  • @JoeBe 这正是我要说的:您必须在每个命令之前执行此操作,否则您将使用另一个用户(在此池连接中执行set role 的最后一个用户)
猜你喜欢
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 2019-06-02
  • 2018-05-18
  • 2021-11-19
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多