Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL行安全策略不适用于检查更新的创建策略(false);_Sql_Postgresql_Row Level Security - Fatal编程技术网

PostgreSQL行安全策略不适用于检查更新的创建策略(false);

PostgreSQL行安全策略不适用于检查更新的创建策略(false);,sql,postgresql,row-level-security,Sql,Postgresql,Row Level Security,我正在尝试在一些表上设置行级安全性。到目前为止,我在插入和选择方面没有任何问题,现在正在尝试处理更新 我尝试了很多方法,但当我使用CHECK(false)定义策略时,我确实遇到了问题,尽管定义了策略,我仍然能够使用rls user在该表上执行更新 为什么会这样?我希望该表上的所有更新都会失败,因为带有CHECK的是一个布尔验证器 这是我的密码: CREATE TABLE t ( "id" SERIAL PRIMARY KEY NOT NULL,

我正在尝试在一些表上设置行级安全性。到目前为止,我在
插入
选择
方面没有任何问题,现在正在尝试处理
更新

我尝试了很多方法,但当我使用CHECK(false)定义策略时,我确实遇到了问题,尽管定义了策略,我仍然能够使用rls user在该表上执行更新

为什么会这样?我希望该表上的所有更新都会失败,因为带有CHECK的
是一个布尔验证器

这是我的密码:

CREATE TABLE t (
                "id" SERIAL PRIMARY KEY NOT NULL, 
                "name" varchar (50) NOT NULL
               );

您的策略使
rls\u用户的表显示为空,因为它没有
USING
子句

因此,
UPDATE
永远不会修改行(
update0
),因为没有行被修改,所以没有行必须通过
CHECK
条件,并且不会抛出错误


请注意,您已授予用户对表的
UPDATE
权限,因此,只要修改的行通过
检查
条件,就可以对表运行所有更新。

谢谢!当我看到
查询成功返回时
我认为策略不起作用,我预期会出现错误。我没有注意到
更新0
中的零。
create role rls_user NOINHERIT;
GRANT USAGE ON SCHEMA public TO rls_user;

GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA public TO rls_user;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO rls_user;

alter table t enable row level security;

CREATE POLICY t_update ON t
FOR UPDATE WITH CHECK (false);

----> CREATE POLICY t_update ON t
----> FOR UPDATE USING (false); ---> also doesn't work
set role rls_user;

UPDATE t 
SET name = 'blabla'
WHERE "id" = 1;

---> expected: UPDATE FAILED

---> result: 
--->           UPDATE 0

--->           Query returned successfully in 73 msec.