为什么PostgreSQL将用户和组合并为角色?

时间:2011-12-13 06:47:33

标签: postgresql roles database-permissions

来自the PostgreSQL docs

  

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

他们为什么在8.1中进行此更改?

从C编码器的角度来看,使用单个Role类(struct)可能会更容易吗?

More details

CREATE USER is equivalent to CREATE ROLE except that CREATE USER 为用户/角色提供LOGIN权限

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

4 个答案:

答案 0 :(得分:27)

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

ALTER ROLE myrole LOGIN;
ALTER ROLE myrole NOLOGIN;

或者您可以GRANT成为角色的任何其他登录(“用户”)或非登录角色(“组”)的成员资格:

GRANT joe TO sue;

你仍然可以:

CREATE USER james;

现在只是role with login privilege。或者:

CREATE GROUP workers;

现在有效the same as CREATE ROLE

manual拥有一切。

答案 1 :(得分:5)

我从2003年6月6日发现this thread in the PostgreSQL-Hackers list,最终表明要合并用户,组和角色。 (感谢Craig Ringer建议我查看pgsql-hackers列表档案。)

这里提到的一些好处(我发现的那些)。

  

允许群组将群组作为成员

     

将简化ACL代码

     

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

     

在某些情况下,我可以看到允许登录是有意义的   直接作为一个组/角色/ whatchacallit

     

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

     

[使得更容易]表示授予组的权限[从那以后   你只需重用角色相关的代码吗?]

答案 2 :(得分:3)

来自manual

  

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

答案 3 :(得分:3)

区分用户和群组并不能获得任何好处。

AFAIK改变它的动机是简化以下用途:

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

  • 作为其他组成员的组,以实现细粒度访问权限。

但是,如果你想要详细信息,最好检查一段时间内pgsql-hackers列表的档案,以及git历史记录(从CVS转换而来)。