Jak*_*ake 6 postgresql database-permissions
我已经以数据库所有者(也是超级用户)的身份登录到我的数据库,并创建了一个role_write带有 nologin 和 noinherit 标志的角色。
我已通过以下方式撤销了公共架构的默认创建权限:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
Run Code Online (Sandbox Code Playgroud)
并通过以下方式撤销对数据库的公共访问:
REVOKE ALL ON DATABASE mydb FROM PUBLIC;
Run Code Online (Sandbox Code Playgroud)
我已在每个表上授予角色,我希望该角色能够具有读/写访问权限。使用user本示例的表格,我添加了:
grant insert, select, update, delete on users to role_write;
Run Code Online (Sandbox Code Playgroud)
然后,我还为用户授予了对表、模式、序列和数据库连接的适当权限,并通过以下方式更改了默认权限:
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;
Run Code Online (Sandbox Code Playgroud)
我还创建了一个新用户(带有 noinherit 标志),并向该用户添加了 role_write 角色:
grant role_write to newuser;
Run Code Online (Sandbox Code Playgroud)
然后我以该用户身份登录:
set role role_write;
Run Code Online (Sandbox Code Playgroud)
然后为了安全起见,我重新启动了 postgres。
但即使如此,当我尝试通过sequelize/apollo 服务器作为 newuser 连接到数据库并运行查询时,我收到错误:
permission denied for table users
Run Code Online (Sandbox Code Playgroud)
我不知道我做错了什么。如果我检查用户表的权限,它表明 role_write 设置正确。
有什么帮助吗?
编辑:所以我意识到我需要set role role_write在每个会话上运行,而不仅仅是一次。如果我连接到数据库并立即运行查询,则会收到错误,但是如果我首先设置角色,那么它会允许我。
set role role_write;如何为数据库的每个新连接添加sequelize/apollo ?
亲爱的来自未来的人们:这是我们到目前为止所得出的结论......
正如我的编辑中所解释的,问题是我使用该noinherit标志创建了新用户。当使用sequelize/apollo时,这会导致问题,因为从role_write角色获取读/写权限的唯一方法是首先运行set role role_write;.
也许有人会回答一个解决方案,让您将set role role_write;每个sequelize/apollo 请求发送到服务器,但现在我通过简单地运行alter role newuser with inherit;. 现在我不再收到错误消息了。
| 归档时间: |
|
| 查看次数: |
12009 次 |
| 最近记录: |