23

来自PostgreSQL 文档

角色的概念包含“用户”和“组”的概念。在 8.1 之前的 PostgreSQL 版本中,用户和组是不同种类的实体,但现在只有角色。任何角色都可以充当用户、组或两者兼而有之。

为什么他们在 8.1 中做出了这个改变?

从 C 编码人员的角度来看,使用单个角色类(结构)也许更容易?

更多详情

CREATE USER is equivalent to CREATE ROLE except that CREATE USER 将登录权限授予用户/角色

(我即将为我的 webapp 设计一个权限系统,因此我对此很感兴趣。)

4

4 回答 4

28

合并有很多优点,没有缺点。LOGIN例如,您现在可以通过添加/删除权限将“用户”无缝转换为“组”,反之亦然。

ALTER ROLE myrole LOGIN;
ALTER ROLE myrole NOLOGIN;

或者您可以将任何其他登录(“用户”)或非登录角色(“组”)的成员资格授予一个角色:

GRANT joe TO sue;

您仍然可以:

CREATE USER james;

这只是一个具有登录权限的角色。或者:

CREATE GROUP workers;

这实际上与现在相同CREATE ROLE

手册有这一切。

于 2011-12-13T10:49:17.450 回答
5

从 2003 年 6 月 6 日起,我在 PostgreSQL-Hackers list 中发现了这个线程,它最终建议合并用户、组和角色。(感谢 Craig Ringer 建议我检查 pgsql-hackers 列表档案。)

以下是提到的一些好处(我发现的那些)。

允许组将组作为成员

ACL 代码将被简化

可以简化 GRANT/REVOKE 语法和 ACL 列表的显示格式,因为不需要语法标记来判断给定名称是用户还是组。

在某些情况下,我认为允许直接作为组/角色/whatchacallit 登录是有意义的

这也将解决 information_schema 视图将仅显示拥有的对象的问题

[更容易] 表示授予组的权限 [因为您只是重用与角色相关的代码?]

于 2011-12-14T04:28:51.893 回答
3

手册

SQL 标准定义了用户和角色的概念,但将它们视为不同的概念,并让定义用户的所有命令由每个数据库实现指定。在 PostgreSQL 中,我们选择将用户和角色统一为一种实体。因此,角色具有比标准中更多的可选属性。

于 2011-12-13T08:17:19.637 回答
3

区分用户和组不会给您带来任何好处。

AFAIK 改变它的动机是为了简化如下用途:

  • 一个用户伪装成另一个用户,例如模拟一个减少权限的用户的超级用户。使用统一角色,这只是当前角色的另一个变化,与更改主要组没有什么不同。

  • 属于其他组的成员的组以实现精细访问权限。

但是,如果您想了解详细信息,最好查看该时期的 pgsql-hackers 列表的档案,以及 git 历史记录(从 CVS 转换而来)。

于 2011-12-13T14:25:59.363 回答