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

postgres how to apply RLS only for one user

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

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

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

是否可以只使用两个策略(一个策略用于 david,第二个策略用于所有其他用户)?

您可以为 PUBLIC 角色(即所有用户)创建一个允许策略以授予他们对 table 的访问权限,然后为 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);
--                                     ^^^^^^^^^^^^^^

完整格式为

CREATE POLICY accounts_public ON accounts AS PERMISSIVE FOR ALL TO PUBLIC USING (true);
--                                        ^^^^^^^^^^^^^         ^^^^^^^^^