如何使用Postgresql角色连接数据库?

问题描述 投票:1回答:2

我们今年在课堂上看到了PostgreSQL角色。我们的老师告诉我们,如果需要,可以对每个表甚至是列使用具有自定义权限的不同角色来确保安全。

我们有一个项目,在该项目中,我们必须使用PostgreSQL建立一个网站,该网站对连接的用户可以具有不同的访问权限,这些用户可以是不同类型的用户(管理员,员工,客户)。为了遵循老师的建议,我们创建了具有不同权限的不同角色(每种类型的用户一个)。

我们决定将Go用作后端(带有令牌身份验证),但我不知道如何使用我们的角色,这些角色比用户多。我在文档中读到,您一次“打开”了与数据库的连接,但要做到这一点,您必须赋予PostgreSQL角色。在没有关闭并重新打开数据库的情况下,我找不到改变连接角色的方法。如果我在不更改连接角色的情况下运行应用程序,那么PostgreSQL如何控制用户是否有权访问其请求所需的表。

postgresql security go roles
2个回答
0
投票

您可以在会话打开时使用set role命令来更改角色。


0
投票

您可以在PostgreSQL中即时更改角色。如果以nobody身份登录,并且nobody是角色cleve的成员,则可以通过[]成为角色admins

SET ROLE cleve;

但是在身份验证期间使用它是有问题的,因为没有什么可以阻止用户运行该语句

RESET ROLE;

再次成为nobody,然后冒充其他人。

通常,有两种方法可以使用角色系统来利用数据库权限:

  1. 您为应用程序的每个用户都有一个个性化的数据库用户。

    当然,这仅在用户组相当恒定且受限制的情况下才可行。

    然后各个用户完全没有权限,并且具有某些角色,例如adminreaderaccountant等。通过成为这些角色中的一个或多个角色的成员,可以为登录角色分配权限,并且它们继承其权限。

  2. 您没有个性化的数据库用户。

  3. 然后,每组权限只有一个登录角色,例如accountantadminviewer,依此类推。

    应用程序必须决定应以哪个用户身份进行连接[[之前

    ,以建立数据库连接。如果您需要数据库查询来执行此决定,请以具有非常有限权限的nobody数据库用户身份执行这些查询。例如,它可以调用验证用户提供的密码的函数。
© www.soinside.com 2019 - 2024. All rights reserved.