NOLOGIN用户在postgresql中有什么用途?

NOLOGIN用户在postgresql中有什么用途?,postgresql,postgrest,Postgresql,Postgrest,我试图理解教程的初始步骤 在上述教程中,建议创建两个不同的角色,分别命名为web_anon和authenticator,如下所示: create role web_anon nologin; grant usage on schema api to web_anon; grant select on api.todos to web_anon; create role authenticator noinherit login password 'mysecretpassword'; gra

我试图理解教程的初始步骤

在上述教程中,建议创建两个不同的角色,分别命名为web_anon和authenticator,如下所示:

create role web_anon nologin;

grant usage on schema api to web_anon;
grant select on api.todos to web_anon;

create role authenticator noinherit login password 'mysecretpassword';
grant web_anon to authenticator;
据我所知,PostgREST服务器接收来自客户端的RESTAPI请求,而没有任何关于用户(角色)的信息。而且,据我所知,nologin角色不能登录数据库。(他们可以发送查询吗?)

因此,问题是:

  • 为什么我们需要两个不同的角色?web_anon的角色是什么?身份验证者的角色是什么

  • 在博士后中,诺洛金角色能做什么

  • 当PostgREST接收到RESTAPI查询时,它使用哪个用户向数据库发送和执行该查询

  • 对问题1:
    NOLOGIN
    角色可以看作是一个用户组。其想法是将所有权限附加到组而不是单个用户,这有几个优点:

    • 可以删除该用户,因为它没有任何权限

    • 无论何时必须添加用户或更改其权限,向组中添加用户或从组中删除用户都比授予或撤销大量权限要简单

    • 将如此多的单个ACL条目附加到单个数据库对象上不会导致无法添加更多权限的危险(整个元数据行必须放入一个8kB的块中)

    只有当数据库中有很多用户时,整个练习才有意义,否则就太傻了。但是有不同的用户用于不同的目的是一个好主意

    对问题2:
    NOLOGIN
    角色可以是具有用户可以继承的权限的组

    另一个用途是,您可以使用
    SET ROLE
    来假定角色的身份

    对问题3:
    我猜您在PostgreSQL连接字符串中使用的任何用户。

    链接教程中没有,但PostgREST文档解释了为什么需要这些角色。谢谢亲爱的Laurenz。NOLOGIN用户和组之间有什么区别吗?我的意思是为什么他们(PostgreSQL开发人员)在已经有组的情况下引入了NOLOGIN用户?PostgreSQL中既没有用户也没有组。两者都是角色。您仍然可以说“user”表示“登录角色”,而“group”表示“nologin角色”。我在回答中同义地使用了这些术语。根据你的回答,我可以得出结论,Postgrest只需要在其配置文件中使用具有登录权限的用户名,而不需要NOLOGIN用户。正当而在教程中,两个用户的名称都写在配置文件中。知道为什么吗?为了澄清问题3的答案,PostgREST不使用连接用户发送查询。它通过
    SET LOCAL role
    切换到
    web\u anon
    角色,将查询作为该角色发送。连接用户除了登录数据库并切换到
    web\u anon
    角色或您定义的其他角色外,没有其他权限。@LaurenzAlbe否,PostgREST文档不建议使用相同的角色
    web\u anon
    是一个“应用程序角色”(启用RLS),为许多未经身份验证的web应用程序用户提供服务。另一个问题是登录角色,如
    身份验证者
    。登录角色可以轮换,这不应影响应用程序角色。或者,同一个登录可以用于不同的应用程序,您可以拥有一个
    web\u anon\u for_app1
    web\u anon\u for_app2
    两种权限。这有意义吗?我可以编辑你的答案和一个总结。