2

我正在尝试了解PostgREST教程的初始步骤。

在上述教程中,建议创建两个不同的角色web_anonauthenticationator,如下所示:

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 服务器从客户端接收 Rest API 请求,没有任何关于用户(角色)的信息。而且,据我所知,nologin 角色无法登录数据库。(他们可以发送查询吗?)

所以问题是:

  1. 为什么我们需要两个不同的角色?web_anon 的作用是什么,authenticator 的作用是什么?

  2. nologin角色在 postgres 中可以做什么?

  3. 当 PostgREST 接收到一个 REST API 查询时,它使用哪个用户向数据库发送和执行该查询?

4

1 回答 1

6

问题1:

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

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

  • 每当您必须添加用户或更改其权限时,将用户添加到组或从组中删除用户比授予或撤销大量权限要少得多。

  • 将这么多单独的 ACL 条目附加到单个数据库对象,以致无法添加更多权限是没有危险的(整个元数据行必须适合单个 8kB 块)。

整个练习只有在数据库中有很多用户时才有意义,否则就很愚蠢。但是为不同的目的拥有不同的用户是个好主意。

对于问题 2:

角色可以是具有NOLOGIN用户可以继承的权限的组。

另一个用途是您可以使用SET ROLE来承担角色的身份。

对于问题 3:

我猜你在 PostgreSQL 连接字符串中使用的任何用户。

于 2020-03-31T13:40:07.807 回答