我正在尝试Postgres行级别的安全功能,但无法看到它工作。不知道我错过了什么。
CREATE TABLE tenants (id uuid PRIMARY KEY, name TEXT);
INSERT INTO tenants (id, name) values ('ec5e9a6b-ed71-4e41-bc1e-11dac6808e41', 'Tenant1'), ('a684edc2-19b2-40d6-b679-519a6f736981', 'Tenant2');
ALTER TABLE tenants ENABLE ROW LEVEL SECURITY ;
ALTER TABLE tenants FORCE ROW LEVEL SECURITY;
SET app.tenant_id = 'ec5e9a6b-ed71-4e41-bc1e-11dac6808e41';
CREATE POLICY tenants_policy ON tenants FOR ALL USING ( current_setting('app.tenant_id')::uuid = id );
SELECT * FROM tenants;
对于最后一个select,我希望它只返回一行,id为'ec5e9a6b-ed71-4e41-bc1e-11dac6808e41',但它同时返回两行。我错过了什么?谢谢您!
最佳答案
你的榜样对我有用。有几种可能性:
当前用户是超级用户。
当前用户是用BYPASSRLS
定义的。
配置参数row_security
是off
。
关于postgresql - Postgres行级策略问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58864240/