我在postgresql中有一个名为testview的视图.

我创建了一个名为testuser的新用户.

我希望testuser拥有数据库中所有表和视图的所有权限.

为此,我运行了以下命令:

GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;

GRANT USAGE ON SCHEMA public TO testuser;

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO testuser;

testuser现在可以访问数据库中的所有表,但如果我try 从testview运行SELECT*,会出现以下错误:关系testview的权限被拒绝.

怎么了?testuser如何访问testview?

推荐答案

我同意这应该行得通.如果权限为GRANT ... ON ALL TABLES,也应该包含视图.

您是否创建了将特权授予testuser的视图after?如果是这样,那么它就没有与其他表相同的权限.这是因为GRANT ... ON ALL TABLES的意思是"在当前存在的所有表上".要包含将来创建的表/视图,可以说:

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO testuser;

或者,如果你想给出SELECT多个,你可以说ALL PRIVILEGES.

我认为ON ALL TABLES的这种行为是关于Postgres权限最容易被误解的地方之一,标准文档中并没有真正提到它,所以我试图在我自己的Postgres permissions overview中强调它.

Postgresql相关问答推荐

PostgreSQL数据文件是否仅在判断点期间写入磁盘?

Org.postgresql.util.PSQLException:错误:函数LOWER(BYTEA)不存在

在特定值的组聚合中添加标签列作为结果

如何返回old_ids和重复行的映射';来自PostgreSQL函数的s new_id

安装age-installation时出错

INSERT 语句返回策略违规(USING 表达式)

使用 OpenCypher 和 Apache AGE 在两个顶点之间创建双向关系

Docker compose read connection reset by peer error on pipeline

如何计算过滤器中的百分比

推送到 Heroku 时出现带有 Postgres 的 Rails 迁移错误

postgresql中的外键可以被触发器违反

带有双引号的 postgresql COPY 和 CSV 数据

'active' 标志与否?

plpgsql:使用 2 个 OUT 参数调用函数

在 postgreSQL 中更改序列名称

根据 Helm 图表设置值

实时监控 PostgreSQL 查询的应用程序?

在子类的 Hibernate 中 for each 表指定不同的序列

如何在postgres中将整数分钟转换为间隔

Heroku 上的 Postgres 并将单个表转储到转储文件