通过 Postgres 中的角色授予

时间:2020-12-31 09:19:54

标签: postgresql authorization roles

我想向 Postgres 专家询问我在文档中发现的一个令人困惑的句子。特别是,我指的是 GRANT 命令,其中 documentation 声明:

<块引用>

如果执行 GRANT 的角色通过多个角色成员资格路径间接持有所需的权限,则未指定哪个包含角色将被记录为已完成授权。在这种情况下,最佳做法是使用 SET ROLE 成为您想要执行 GRANT 的特定角色。

如果我理解正确,这与角色继承有关。特别是,你可能有一个角色 C,它继承了角色 A 和角色 B 的权限。在这种情况下,如果用户具有角色 C 并授予权限,那么 Postgres 可能会不确定地规定该权限是由任何一个授予的A 或 B。为避免这种歧义,用户可以发出 SET ROLE A 或 SET ROLE B 以强制较小的角色并阐明应如何授予。

关于这个的一些问题和一个更一般的问题:

  1. 这个读法是正确的还是句子的意思不同?
  2. 如果在前面的示例中,用户通过 A 和 C(而不是 A 和 B)获得许可,该怎么办?在这种情况下,使用“SET ROLE 成为您想要执行 GRANT as 的特定角色”的推荐做法似乎没有帮助,因为将角色设置为 C 仍然会因继承而产生歧义。
  3. 更一般地说,是否有任何好的参考文档将 Postgres 的角色系统与传统的 SQL 授权图进行比较? Postgres 实现的某些部分并不简单,我想了解更多相关信息,仅通过实验很难做到这一点。

提前致谢。

1 个答案:

答案 0 :(得分:0)

是的,在我看来,你是对的:

  1. 你理解正确。

  2. 授予权限的角色是否内化了权限并不重要。对于您拥有的每个权限,postgress 都会注册授予该权限的角色。

enter image description here

  1. 我不知道。如果您找到了,请发表评论。