postgres如何仅为一个用户应用RLS

Har*_*ari 0 postgresql row-level-security psql

有许多用户连接到数据库。我必须仅对一个用户 david 应用行级安全性(RLS),所有其他用户应该能够像往常一样访问表。

ALTER TABLE accounts ENABLE ROW LEVEL SECURITY;
CREATE POLICY accounts_web ON accounts TO david USING (id = current_setting('rls.tenant_id' )::uuid);
Run Code Online (Sandbox Code Playgroud)

我可以创建一个类似的策略CREATE POLICY accounts_no_rls ON accounts TO Michel USING (true); ,但我必须为每个用户创建一个策略。

是否可以仅使用两项策略(一项针对大卫的策略,第二项针对所有其他用户的策略)?

Ber*_*rgi 5

PUBLIC您可以为角色(即所有用户)创建一个宽松策略,以授予他们对表的访问权限,然后仅为 david 添加第二个限制性策略,该策略将按行限制访问。

ALTER TABLE accounts ENABLE ROW LEVEL SECURITY;
CREATE POLICY accounts_public ON accounts USING (true);
CREATE POLICY accounts_web ON accounts AS RESTRICTIVE TO david USING (id = current_setting('rls.tenant_id')::uuid);
--                                     ^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

长形式是

CREATE POLICY accounts_public ON accounts AS PERMISSIVE FOR ALL TO PUBLIC USING (true);
--                                        ^^^^^^^^^^^^^         ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)