【发布时间】:2018-12-26 07:23:43
【问题描述】:
我希望只有组成员可以访问表中的行。我通过以下方法创建用户并将他们添加到组中,
CREATE USER abc LOGIN PASSWORD 'securedpassword1';
CREATE USER xyz LOGIN PASSWORD 'securedpassword2';
ALTER GROUP permanent ADD USER abc;
然后,我编写的策略使其只有当前用户可以访问。但我需要整个小组才能访问它。
CREATE TABLE table_Workers
(
worID INT
,worName CHARACTER VARYING
,pgUser CHARACTER VARYING
);
INSERT INTO table_Workers VALUES
(1,'Jason','abc'),(2,'Roy','abc'),(3,'Johny','abc')
,(4,'Jane','xyz'),(5,'Kane','xyz'),(6,'Stuart','xyz');
CREATE POLICY policy_employee_user ON table_Workers FOR ALL
TO PUBLIC USING (pgUser = current_user);
ALTER TABLE table_Workers ENABLE ROW LEVEL SECURITY;
pgUser 命名可以访问该行的用户。我希望用 pgRole 替换列 pgUser,其中提到了组的名称,其成员可以访问该特定行。任何提示或方法都可以使整个组都可以访问行。
【问题讨论】:
-
不确定语法,但可能是
using (pg_has_role(current_user, 'permanent'))? -
pgUser 这里是提到可以访问该行的用户名的列。如果 current_user 和 pgUser 都具有相同的值,则可以访问行。现在有一个名为 pgRole 或 pgGroup 的列。我想用它来检查当前用户是否在 pgGroup 列中提到的那个组中。因此用户可以访问相应的行。这样不同的用户可以访问他们需要的不同行。
-
您在问题中包含了表
table_workers的完整create table语句(edit 您的问题在 cmets 中不邮政编码)。但看来你应该可以使用pg_has_role(pguser, pgrole)然后 -
好的。我已经相应地编辑了这个问题。但如果我使用列 pgRole,我必须删除列 pgUser。我希望你的意思是
pg_has_role(current_user, pgrole)这里。 pgRole 将有两个组,包括“永久”和“临时” -
感谢您的及时回复。我提到我需要将
pgUser列替换为pgRole。将输入组名的位置。我的目标是让这些组的成员能够访问相应的行。
标签: sql postgresql row-level-security