当前位置: 首页 > 面试题库 >

组的行级安全性或使行适合组

百里疏珂
2023-03-14
问题内容

我希望表中的行仅可由组成员访问。我创建用户并通过以下方法将其添加到组中,

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命名可以访问该行的用户。我希望将pgUser列替换为pgRole,其中提到了组的名称,该组的成员可以访问该特定行。任何使行可被整个组访问的提示或方法都是值得赞赏的。


问题答案:

这似乎可行:

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;


 类似资料:
  • 问题内容: 我正在使用 PostgreSQL 10.1 ,直达关键点… 可以说我有一张table : 连同上面的 GIN INDEX : 和一个基本的全文搜索查询: 无论 public.document 表的大小如何,查询都非常快(您已经知道了)!计划人员使用INDEX,一切都很好。 现在,我通过 RLS(行级安全性) 介绍一些基本的访问控制,首先启用它: 然后添加策略: 为了简单 起见,is_c

  • 关于用户权限的信息是保存在 mysql 数据库(即数据库名为 mysql)的 user、db、host、tables_priv、columns_priv 和 procs_priv 表。MySQL 服务器在启动时读取这些表的内容。 当你运行一个连接到服务器的客户端程序时,MySQL 访问控制有两个阶段:阶段 1:服务器检查是否让你连接。 阶段 2:假设你可以连接,服务器会检查你发出的每句语句,决定你

  • 问题内容: 我需要严格控制Postgres数据的读写。可更新的视图始终能够很好,严格地控制我的数据读取,并允许我添加有价值的计算列。在Postgres 9.5中,行级安全性引入了一种新的强大的方法来控制我的数据。但是我不能同时使用两种技术视图和行级安全性。为什么? 问题答案: 基本上是因为不可能追溯更改视图的工作方式。我希望能够支持(或等效)视图,但是据我所知,目前尚不存在这样的功能。 您可以使用

  • 问题内容: 我正在尝试缩小美国地图。要么是我的SVG,要么是手动的。 这是我的代码中最简单的: 我已经尝试过类似的东西: 但是每次我在路径变量中添加任何内容时,我都会从D3的内部收到NAN错误。谢谢你的帮助! 问题答案: 关键问题是您的数据 已经被 投影。D3 geoProjections使用未投影的数据或成对的数据。WGS84基准中的数据。实质上,d3 geoProjection会采用球面坐标并

  • Spring Boot执行器endpoint默认受基本http安全保护。 这个可以改成使用Spring Security吗?我已经成功地设置了Spring Security并使用它来保护我的其他页面。 我尝试了并在授权请求中添加了(注意,我使用了不同的url作为endpoint的根用户),但这没有帮助。我一直得到一个基本的http身份验证日志,它不是用户在AuthenticationManager

  • 我正在尝试通过连接到LDAP使用Spring Security进行我的第一个演示。 我使用的Sping版本是:3.1.0.RELEASE 以下是我的security-integration.xml: 然而,每当我部署我的战争时,我都会遇到这个例外: HTTP状态500 - 类型异常报告 消息 描述服务器遇到一个内部错误(),该错误阻止它完成此请求。 例外情况 javax.servlet。Servl