Bug: RLS policy FOR SELECT is used to check new rows - Mailing list pgsql-hackers

From Laurenz Albe
Subject Bug: RLS policy FOR SELECT is used to check new rows
Date
Msg-id aee893f1ec3ca8f62a0da2fc2f9f8b73920f9f9d.camel@cybertec.at
Whole thread Raw
Responses Re: Bug: RLS policy FOR SELECT is used to check new rows
List pgsql-hackers
Try this as a user with NOBYPASSRLS:


CREATE TABLE rlsbug (deleted boolean);

INSERT INTO rlsbug VALUES (FALSE);

CREATE POLICY p_sel ON rlsbug FOR SELECT TO laurenz USING (NOT deleted);

CREATE POLICY p_upd ON rlsbug FOR UPDATE TO laurenz USING (TRUE);

ALTER TABLE rlsbug ENABLE ROW LEVEL SECURITY;
ALTER TABLE rlsbug FORCE ROW LEVEL SECURITY;

UPDATE rlsbug SET deleted = TRUE WHERE NOT deleted;
ERROR:  new row violates row-level security policy for table "rlsbug"


I'd say that this error is wrong.  The FOR SELECT policy should be applied
to the WHERE condition, but certainly not to check new rows.

Yours,
Laurenz Albe



pgsql-hackers by date:

Previous
From: Daniel Gustafsson
Date:
Subject: Re: Replace references to malloc() in libpq documentation with generic language
Next
From: Alena Rybakina
Date:
Subject: Re: Simplify create_merge_append_path a bit for clarity