在postgres上创建角色

时间:2015-09-05 09:08:16

标签: postgresql phpmyadmin roles

我正在为图书馆开发一个小型数据库,但在角色和特权方面,我完全无知。 我花了很长时间在谷歌上搜索,但我仍然没有真正得到机制。 我的目标是创建3个基本角色:

  • 没有登录的用户(不是真正的用户,只是想要查看图书馆存储的图书的人,但除了观看之外他不能做任何动作)
  • 登录用户(他可以预订书籍并采取其他行动)
  • 管理员(他可以添加新书,作者,流派,并可以为其他用户提供管理员权限)

起初我以为我可以创建这三个角色,指定每个人拥有的各种权限,然后,在相关网站上,每次有人连接时,他都会被认为是“没有登录的用户”。直到登录确定他是否是管理员;阅读PostgreSQL文档,我理解它并不是这样的,或者说我弄错了。 我真的不知道该怎么做,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

你想做的是合理的。您的网络应用程序应以其标记为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;以清除连接的角色设置。

所以,例如,你可能会:

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;

...

请参阅Role membership