我运行了这个查询

REVOKE SELECT ON services_connected FROM anon;

并添加了该策略

create policy "workspace_only"
on "public"."services_connected"
for all
to anon
using ((workspace_id = (((current_setting('request.jwt.claims'::text, true))::json ->> 'workspace_id'::text))::bigint));

我原本以为这会限制SELECT操作,但允许其他操作(INSERT、UPDATE、DELETE),但现在我的所有响应都被拒绝了

这是我正在调用的函数

DROP FUNCTION IF EXISTS public.disconnect_service;

CREATE OR REPLACE FUNCTION public.disconnect_service(service_name_value TEXT)
RETURNS VOID AS $$
DECLARE
  workspace_id_value BIGINT := ((current_setting('request.jwt.claims'::text, TRUE))::JSON ->> 'workspace_id')::BIGINT;
BEGIN
  DELETE from services_connected where workspace_id = workspace_id_value and service_name = service_name_value;
  DELETE FROM users_list WHERE workspace_id = workspace_id_value and service_name = service_name_value; 
END;
$$ LANGUAGE plpgsql;

你知道我做错了什么吗?

推荐答案

对于必须的UPDATEDELETE语句,您还需要SELECT权限.考虑

DELETE from services_connected
where workspace_id = workspace_id_value
  and service_name = service_name_value;

PostgreSQL首先要对read表中符合WHERE条件的行进行识别,然后才能删除这些行.如果没有SELECT特权,这是不允许的,因此您会收到一个"Permisse Denited"错误.这一声明将会奏效:

DELETE FROM services_connected;

因为它没有WHERE的条件.

Postgresql相关问答推荐

无法从Docker迁移Golang上的两个不同服务到一个数据库'

Postgres将唯一索引添加到已在分区上具有PK的分区表中,然后添加PK

为MCV扩展统计设置统计目标

将XML解析从T-SQL迁移到Postgres时出现问题

单个WAL文件中的操作会影响哪些表和多少行

无法在kubernetes中设置postgres复制

使用 pgx 扫描范围类型

求和直到达到一个值 postgresql

AGE Graph 实际上存储为 postgreSQL 表,对吧?如何检索该表(不是图表)?

Postgresql:创建默认表空间的视图和使用?

postgresql 更新错误ERROR: invalid input syntax for type boolean:

运算符不存在:integer = integer[] 在使用 ANY 的查询中

获取带有时区偏移的日期

带有 postgres 的 DOCKER 容器,警告:could not open statistics file "pg_stat_tmp/global.stat": Operation not permitted

PostgreSQL 中的 JSON 外键

将属性添加到 Sequelize FindOne 返回的对象

什么是 Postgres session?

如何查询前 10 行,下一次从表中查询其他 10 行

Django 中的唯一模型字段和区分大小写(postgres)

PostgreSQL 中具有多个连接的 UPDATE 语句