gpt4 book ai didi

postgresql - 即使已授予权限,也会出现 'permission denied for table foo' 错误

转载 作者:行者123 更新时间:2023-11-29 13:40:37 25 4
gpt4 key购买 nike

我以数据库所有者(也是 super 用户)的身份登录到我的数据库,并创建了一个带有 nologin 和 noinherit 标志的 role_write 角色。

我已经撤销了公共(public)模式的默认创建权限:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

并撤销对数据库的公共(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。

但即便如此,当我尝试以新用户身份通过​​ sequelize/apollo 服务器连接到数据库并运行查询时,我仍收到错误:

permission denied for table users

我不知道我做错了什么。如果我检查用户表的权限,它表明 role_write 设置正确。

有什么帮助吗?

编辑:所以我意识到我需要在每个 session 上运行 set role role_write,而不仅仅是一次。如果我连接到数据库并立即运行查询,那么我会收到错误,但是如果我首先设置角色,它就会允许我。

所以我现在的问题是...

如何让 sequelize/apollo 为每个新的数据库连接添加 set role role_write;

最佳答案

来自 future 的亲爱的人们:这是我们到目前为止已经弄清楚的......

正如我在编辑中所解释的,问题是我使用 noinherit 标志创建了新用户。当使用 sequelize/apollo 作为从 role_write 角色获取读/写权限的唯一方法是首先运行 set role role_write; 时,这会导致问题。

也许有人会给出一个解决方案,让您发送 set role role_write; 与每个 sequelize/apollo 请求到服务器,但现在我通过简单地运行 alter role 解决了这个问题具有继承功能的新用户;。现在我不再收到错误消息。

关于postgresql - 即使已授予权限,也会出现 'permission denied for table foo' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55891971/

25 4 0
文章推荐: php - 尝试在