Postgres行级政策问题

时间:2019-11-14 19:15:57

标签: postgresql

我正在尝试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;

对于最后一个选择,我希望它仅返回ID为'ec5e9a6b-ed71-4e41-bc1e-11dac6808e41'的一行,但它将返回两行。我想念什么?谢谢!

1 个答案:

答案 0 :(得分:3)

您的示例对我有用。有几种可能性:

  • 当前用户是超级用户。

  • 当前用户由BYPASSRLS定义。

  • 配置参数row_securityoff