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);
-- ^^^^^^^^^^^^^ ^^^^^^^^^
有很多用户连接到数据库。我必须仅为一个用户 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);
-- ^^^^^^^^^^^^^ ^^^^^^^^^