为啥 PostgreSQL 将用户和组合并为角色?
Posted
技术标签:
【中文标题】为啥 PostgreSQL 将用户和组合并为角色?【英文标题】:Why did PostgreSQL merge users and groups into roles?为什么 PostgreSQL 将用户和组合并为角色? 【发布时间】:2012-01-19 02:24:42 【问题描述】:来自the PostgreSQL docs:
角色的概念包含“用户”和“组”的概念。在 PostgreSQL 8.1 之前的版本,用户和组是不同的种类 实体,但现在只有角色。任何角色都可以充当用户, 一组,或两者兼而有之。
他们为什么在 8.1 中做出这种改变?
也许从 C 编码人员的角度来看,使用单个角色类(结构)更容易?
More details:
CREATE USER is equivalent to CREATE ROLE except that CREATE USER
将登录权限授予用户/角色。
(我即将为我的 webapp 设计一个权限系统,因此我对此很感兴趣。)
【问题讨论】:
【参考方案1】:合并有很多优点,没有缺点。例如,您现在可以通过添加/删除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 拥有一切。
【讨论】:
【参考方案2】:我发现this thread in the PostgreSQL-Hackers list,从 2003 年 6 月 6 日开始,最终建议合并用户、组和角色。 (感谢 Craig Ringer 建议我检查 pgsql-hackers 列表档案。)
以下是提到的一些好处(我发现的那些)。
允许群组拥有群组成员
ACL 代码将被简化
GRANT/REVOKE 语法和 ACL 列表的显示格式可以是 简化,因为不需要句法标记 给定名称是用户还是组。
在某些情况下,我认为允许登录是有意义的 直接作为一个组/角色/whatchacallit
这也将解决 information_schema 视图的问题 仅显示拥有的对象
[更容易]表示授予组的权限 [因为 你只是重用角色相关的代码?]
【讨论】:
【参考方案3】:区分用户和组不会给您带来任何好处。
AFAIK 改变它的动机是为了简化如下用途:
一个用户伪装成另一个用户,例如一个超级用户模拟一个减少权限的用户。有了统一的角色,这只是当前角色的另一个变化,与更改主要组没有什么不同。
作为其他组成员的组以实现精细访问权限。
但是,如果您想了解详细信息,最好查看该时期 pgsql-hackers 列表的档案,以及 git 历史记录(从 CVS 转换而来)。
【讨论】:
感谢您推荐 pgsql-hackers 列表的档案。我找到了一个相关的帖子,并为这个问题添加了另一个答案。【参考方案4】:来自manual:
SQL 标准定义了用户和角色的概念,但它 将它们视为不同的概念,并让所有命令定义 要由每个数据库实现指定的用户。在 PostgreSQL 中 我们选择将用户和角色统一为一种实体。 因此,角色比它们在 标准。
【讨论】:
那是你应该问做这件事的黑客,而不是像 SO 这样的论坛。 @FrankHeikens 那么你的回答完全没有抓住重点,你甚至知道......以上是关于为啥 PostgreSQL 将用户和组合并为角色?的主要内容,如果未能解决你的问题,请参考以下文章