首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于postgres的角色创建

关于postgres的角色创建
EN

Stack Overflow用户
提问于 2015-09-05 09:08:16
回答 1查看 546关注 0票数 2

我正在为库开发一个小型数据库,但对于角色和特权,我完全不了解。我花了相当长的时间搜索,但我仍然没有真正得到机制。我的目标是创建三个基本角色:

  • 没有登录的用户(不是真正的用户,只是一个想看图书馆藏书的人,但除了观看之外,他什么也做不了)
  • 具有登录功能的用户(他可以预先订购书籍并执行其他操作)
  • 管理员(他可以添加新书、作者、体裁,并将管理权限授予其他用户)

起初,我想我可以创建这三个角色,指定每个角色所具有的各种特权,然后,在相关的网站上,每当有人连接时,他都会被认为是“没有登录的用户”,直到登录时才确定他是否是管理员;阅读PostgreSQL文档,我知道它不是这样的,或者我搞错了。我真的不知道该怎么做,任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-07 03:34:47

你想做的事是合理的。您的webapp应该以用户身份登录它的连接池(比如mywebapp),这个用户标记为NOINHERIT,除了SET ROLE之外没有其他三个角色的权限。这些角色中的每一个都描述了上面提到的用户类别之一。您还需要GRANT访问用于查找mywebapp用户并对用户进行身份验证的任何表的权限。

在为请求提供服务时,如果它代表匿名用户执行SET ROLE anonymous_web_user;或其他任何操作。

如果它充当的是一个命名用户,它就会使用SET ROLE authenticated_user;。您可以通过GRANT读取用于对用户进行mywebapp角色身份验证的表,这样它就可以以应用程序的任何方式对用户进行身份验证。

如果它充当管理员,它就会执行SET ROLE admin;。或者,如果管理员不多,他们需要不同的权限,您可以让他们成为PostgreSQL用户和SET ROLE the_admin_user_name;。同样,如果您的应用程序对用户的身份验证满意,则会对它们进行预验证,并对SET ROLE进行验证。

当连接返回到池时,池运行查询DISCARD ALL;以清除连接的角色设置至关重要。

因此,例如,您可以:

代码语言:javascript
复制
CREATE ROLE mywebapp WITH LOGIN NOINHERIT;
CREATE ROLE anonymous_web_user;
CREATE ROLE authenticated_user;
CREATE ROLE admin_user;

-- 'mywebapp' can become anyone, but by default doesn't
-- get the rights of any of them since it's marked NOINHERIT
GRANT admin_user TO mywebapp;
GRANT anonymous_web_user TO mywebapp;
GRANT authenticated_user TO mywebapp;

-- All admins are authenticated users, since authenticated_user
-- is INHERITable
GRANT authenticated_user TO admin_user;

-- All authenticated users have the rights of anon users too
GRANT anonymous_web_user TO authenticated_user;

-- The app must be able to look up users
GRANT SELECT ON some_users_table TO mywebapp;
-- but only admins can change them
GRANT ALL ON some_users_table TO admin_user;

...

角色成员资格

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32411330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档