角色的概念包含“用户”和“群组”的概念。在 8.1之前的PostgreSQL版本,用户和组是不同的种类 实体,但现在只有角色。任何角色都可以充当用户, 一个小组,或两者兼而有之。
他们为什么在8.1中进行此更改?
从C编码器的角度来看,使用单个Role类(struct)可能会更容易吗?
CREATE USER is equivalent to CREATE ROLE except that CREATE USER
为用户/角色提供LOGIN权限。
(我即将为我的webapp设计权限系统,因此我对此感兴趣。)
答案 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;
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转换而来)。