组角色和登录角色有什么区别?

Vla*_*lad 8 postgresql security

看起来对于单个用户,我应该创建一个登录角色而不是相应的组角色,因为我无法直接为登录角色分配权限。这是真的吗?这种分离的目的是什么?

此外,据我所知,只能使用login role进行身份验证。那么组角色中密码字段的目的是什么?或者可以作为组角色进行身份验证?那么为什么有人需要登录角色呢?

看起来我也可以在 pg_hba 中设置登录和组角色。

dez*_*zso 7

所有这些问题基本上都在文档中得到了解答。再具体一点:

角色是可以拥有数据库对象并拥有数据库权限的实体;角色可以被视为“用户”、“组”或两者,具体取决于它的使用方式。

这意味着除了LOGIN选项之外,这些在内部没有区别。如果您指定LOGIN(或使用CREATE USER):

CREATE ROLE dezso WITH LOGIN PASSWORD 'bla';
Run Code Online (Sandbox Code Playgroud)

dezso将成为登录角色,否则不会。您也可以为非登录角色指定密码 - 如果您稍后决定将其设为登录角色,请使用

CREATE ROLE non_login_role PASSWORD 'bla';

--later
ALTER ROLE non_login_role WITH LOGIN;
Run Code Online (Sandbox Code Playgroud)

您说“只能使用登录角色进行身份验证”是对的。但是请注意,并非总是需要密码 - 如果您使用passwordmd5身份验证方法以外的任何其他方法。另一方面,这意味着没有设置LOGIN选项的角色无法以任何方式登录。

最后,您可以pg_hba.conf为非登录角色设置规则,但由于它仅用于身份验证,因此这些角色将不起作用(除非您稍后启用登录,如上所述)。

  • 这一定是一些设计问题/错误 - 我想知道自己。这些问题是我对所有事情都专门使用 `psql` 和普通 SQL 语句的原因。 (4认同)