组的行级安全,或使组的行可以使用[英] Row level security for groups or Making rows accebile to groups

本文是小编为大家收集整理的关于组的行级安全,或使组的行可以使用的处理方法,想解了组的行级安全,或使组的行可以使用的问题怎么解决?组的行级安全,或使组的行可以使用问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我希望只有组成员可以访问表中的行.我通过以下方法创建用户并将他们添加到组中,

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,其中提到了组的名称,其成员可以访问该特定行.任何提示或方法都可以使整个组都可以访问行.

推荐答案

这似乎可行:

CREATE TABLE workers
(
    worid   int,
    worname text,
    pgrole text[]
);

INSERT INTO workers 
VALUES 
  (1,'Jason','{group1}'),
  (2,'Roy','{group1,group2}'),
  (3,'Johny','{group1}');

CREATE POLICY policy_employee_user ON workers FOR ALL
TO PUBLIC 
   USING ( (select count(*) 
            from unnest(pgrole) r 
            where pg_has_role(current_user, r, 'MEMBER')) > 0 );

ALTER TABLE workers ENABLE ROW LEVEL SECURITY;

本文地址:https://www.itbaoku.cn/post/1763804.html