当前位置: > > > > 如何使用postgresql角色连接数据库?
来源:stackoverflow
2024-04-26 13:15:37
0浏览
收藏
大家好,我们又见面了啊~本文《如何使用postgresql角色连接数据库?》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~
问题内容
今年我们在课堂上看到了 PostgreSQL 的角色。我们的老师告诉我们,如有必要,为每个表甚至列使用具有自定义权限的不同角色会更安全。
我们有一个项目,必须使用 PostgreSQL 构建一个网站,对连接的用户进行访问限制,这些用户可以是不同类型的(管理员、员工、客户)。为了遵循老师的建议,我们创建了具有不同权限的不同角色(每种类型的用户一个)。
我们决定使用 Go 作为后端(带有令牌身份验证),但我不知道如何使用我们的角色,这些角色是比用户更多的组。我在文档中读到,您可以一次性“打开”与数据库的连接,但要做到这一点,您必须授予 PostgreSQL 角色。我没有找到一种方法可以在不关闭并重新打开数据库的情况下更改连接的角色。如果我在不更改连接角色的情况下运行应用程序,PostgreSQL 如何控制用户是否有权访问他请求所需的表。
解决方案
您可以在 postgresql 中动态更改角色。如果您以 nobody
身份登录,并且 nobody
是角色 cleve
的成员,则您可以通过以下方式成为角色 admins
:
set role cleve;
但是在身份验证期间使用它是有问题的,因为没有什么可以阻止用户运行该语句
RESET ROLE;
再次成为nobody
,然后冒充其他人。
通常,有两种方法可以使用角色系统来利用数据库权限:
-
您为应用程序的每个用户都有一个个性化的数据库用户。
这当然只有在用户组相当恒定且有限的情况下才可行。
那么个人用户根本没有任何权限,并且有某些角色,例如
admin
、reader
、accountant
等。登录角色通过成为一个或多个角色的成员来分配权限,并继承这些角色的权限。 -
您没有个性化数据库用户。
那么您的每组权限只有一个登录角色,例如
accountant
、admin
、viewer
等。在建立数据库连接之前,应用程序必须决定应以哪个用户的身份进行连接。如果您需要数据库查询来做出此决定,则可以以权限非常有限的
nobody
数据库用户身份执行这些查询。例如,它可能调用验证用户提供的密码的函数。
终于介绍完啦!小伙伴们,这篇关于《如何使用postgresql角色连接数据库?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~公众号也会发布Golang相关知识,快来关注吧!