Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 使用Postgres角色系统进行web应用验证和角色管理是否合法? 我的处境_Postgresql_Authentication_Web Applications_Roles - Fatal编程技术网

Postgresql 使用Postgres角色系统进行web应用验证和角色管理是否合法? 我的处境

Postgresql 使用Postgres角色系统进行web应用验证和角色管理是否合法? 我的处境,postgresql,authentication,web-applications,roles,Postgresql,Authentication,Web Applications,Roles,我想使用React和Postgres创建我的第一个端到端web应用程序。我以前在一个内部网的工作中使用了Postgres,并使用Postgres角色系统进行用户身份验证 角色 我计划的web应用程序将是一个团队计划系统。它将由以下用户角色组成: 网络管理员(我,超级用户) 团队管理员(可以在其团队中插入/删除用户,全局设置 为团队应用的功能设置等) 团队用户(可以调整存储在 数据库,例如颜色、个人资料) 访问者(只能查看团队及其成员) 我的方法 我目前的用户身份验证和角色管理计划是将上述角色

我想使用ReactPostgres创建我的第一个端到端web应用程序。我以前在一个内部网的工作中使用了Postgres,并使用Postgres角色系统进行用户身份验证

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

  • 网络管理员(我,超级用户)
  • 团队管理员(可以在其团队中插入/删除用户,全局设置 为团队应用的功能设置等)
  • 团队用户(可以调整存储在
    数据库,例如颜色、个人资料)
  • 访问者(只能查看团队及其成员)
我的方法 我目前的用户身份验证和角色管理计划是将上述角色作为Postgres组角色,在每个组角色中,对应用户的登录角色位于。因此,用户身份验证将完全由Postgres的inbuild角色系统管理

然后通过应用程序应用不同的数据访问

  • 基于表和基于列的权限,以及每个组和角色的视图实现
  • 将数据分包给相应的团队 用户的

这是一个好方法吗?

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

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


此外,总有一天会使用错误的用户(忘记切换或其他),但几乎不可能进行调试,甚至不可能发现:您将记录
Bob
更新了表X,并不是说
R\u Readonly\u worker
更新了它。

从数据库的角度来看,这种方法没有错。经过更多的研究,我不知道我(1)应该使用postgres的实际登录角色系统,还是(2)只使用组角色,并在不同的模式中拥有一个用户表。此外,我发现连接池可能成为我的方法的一个问题(正如@JGH所提到的),连接池是一个真正的问题。但是,如果您在每个组中使用登录角色,这可能仍然是可行的。事实上,我发现这个(相当旧)可能对我有帮助。看来我可以成功地建立连接池谢谢你的回复。我感到困惑的是您的声明“每次您向DB发出请求时,您必须首先切换用户”。你的意思是,如果另一个用户使用与前一个用户相同的连接,我对当前用户的输出将不同吗?@JoeBe是的,因为在连接池中,连接不会关闭,而是简单地“返回到池”,因此会话参数(如当前用户!)Remain使用中解释的建议如何?@JoeBe这正是我要说的:您必须在执行每个命令之前执行此操作,否则您将使用另一个用户(在这个池连接中执行
设置角色的最后一个用户)