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

为什么PostgreSQL将用户和组合并到角色中?,postgresql,roles,database-permissions,Postgresql,Roles,Database Permissions,发件人: 角色的概念包含了“用户”和“群体”的概念。在里面 在8.1之前的PostgreSQL版本中,用户和组是不同的类型 实体,但现在只有角色。任何角色都可以充当用户, 一组,或两者兼而有之 为什么他们在8.1中做了这样的更改 从C程序员的角度来看,使用单个角色类(struct)可能更容易一些 : CREATE USER等同于CREATE ROLE,只是CREATE USER向用户/角色授予登录权限 (我将为我的webapp设计一个权限系统,因此我对此感兴趣。)来自: SQL标准定义了用户和角

发件人:

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

为什么他们在8.1中做了这样的更改

从C程序员的角度来看,使用单个角色类(struct)可能更容易一些

:

CREATE USER等同于CREATE ROLE,只是CREATE USER向用户/角色授予登录权限

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

来自:

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


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

ALTER ROLE myrole LOGIN;
ALTER ROLE myrole NOLOGIN;
或者,您可以将任何其他登录(“用户”)或非登录角色(“组”)的成员资格授予以下角色:

GRANT joe TO sue;
你仍然可以:

CREATE USER james;
现在这只是一个小问题。或:

这是有效的


这一切都有了。

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

AFAIK改变它的动机是简化使用,如:

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

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

不过,如果您想了解详细信息,最好查看这一时期pgsql黑客列表的档案,以及git历史记录(从CVS转换而来)。

我发现,从2003年6月6日开始,最终建议整合用户、组和角色。(感谢Craig Ringer建议我查看pgsql黑客列表档案。)

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

允许组将组作为成员

ACL代码将被简化

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

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

这也将解决信息和模式视图将 仅显示拥有的对象

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


这是你应该问的黑客是谁干的,而不是像这样的论坛。@FrankHeikens那么你的回答完全没有抓住要点,你甚至承认了这一点……谢谢你推荐pgsql黑客列表的档案。我找到了一条相关的线索,并为这个问题添加了另一个答案。
CREATE GROUP workers;