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

Kaj*_*nus 23 postgresql roles database-permissions

来自PostgreSQL文档:

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

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

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

更多细节:

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

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

Erw*_*ter 27

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

ALTER ROLE myrole LOGIN;
ALTER ROLE myrole NOLOGIN;
Run Code Online (Sandbox Code Playgroud)

或者你可以GRANT任何其他登录("用户"),或者非登录的角色("本集团")的角色成员:

GRANT joe TO sue;
Run Code Online (Sandbox Code Playgroud)

你仍然可以:

CREATE USER james;
Run Code Online (Sandbox Code Playgroud)

这只是一个具有登录权限角色.要么:

CREATE GROUP workers;
Run Code Online (Sandbox Code Playgroud)

CREATE ROLE现在实际上是一样的.

手册已说明了一切.


Kaj*_*nus 5

2003年6月6日的PostgreSQL-Hackers列表中找到了这个帖子,最终表明用户,组和角色是合并的.(感谢Craig Ringer建议我查看pgsql-hackers列表档案.)

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

允许组将组作为成员

ACL代码将被简化

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

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

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

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