【发布时间】:2019-09-17 09:44:20
【问题描述】:
我已经以数据库所有者(也是超级用户)身份登录到我的数据库,并创建了一个带有 nologin 和 noinherit 标志的 role_write 角色。
我已通过以下方式撤销了公共架构的默认创建权限:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
并通过以下方式撤销对数据库的公共访问:
REVOKE ALL ON DATABASE mydb FROM PUBLIC;
我已在每个表上授予角色,我希望该角色能够具有读/写访问权限。在此示例中使用user 表,我添加了:
grant insert, select, update, delete on users to role_write;
然后,我还为用户提供了对表、架构、序列和数据库连接的适当权限,并更改了默认权限:
GRANT CONNECT ON DATABASE my to role_write;
grant usage on schema public to role_write;
grant select, insert, update, delete on all tables in schema public to role_write;
grant usage, select on all sequences in schema public to role_write;
alter default privileges in schema public
grant select, insert, update, delete on tables to role_write;
alter default privileges in schema public
grant usage, select on sequences to role_write;
我还创建了一个新用户(带有 noinherit 标志)并将 role_write 角色添加到该用户:
grant role_write to newuser;
然后我以该用户身份登录:
set role role_write;
然后为了安全起见,我重新启动了 postgres。
尽管如此,当我尝试以 newuser 身份通过 sequelize/apollo 服务器连接到数据库并运行查询时,我得到了错误:
permission denied for table users
我不知道我做错了什么。如果我检查用户表的权限,则表明 role_write 设置正确。
有什么帮助吗?
编辑:所以我意识到我需要在每个会话上运行set role role_write,而不仅仅是一次。如果我连接到数据库并立即运行查询,则会收到错误消息,但是如果我首先设置角色,则它允许我。
所以我现在的问题是……
如何让 sequelize/apollo 为每个与数据库的新连接添加 set role role_write;?
【问题讨论】:
标签: postgresql database-permissions