【问题标题】:What is the difference between Enable/Disable RLS and Grant/Revoke priviliges启用/禁用 RLS 和授予/撤销权限有什么区别
【发布时间】:2019-07-18 23:55:16
【问题描述】:

我有一个由角色 A 创建的表

Firstname|Lastname| Age
------------------------
 Jill    |  Smith |  50 
 Eve     |   Dar  |  94

假设我想启用行级安全性,

ALTER TABLE accounts ENABLE ROW LEVEL SECURITY;

这默认拒绝对除表所有者(roleA 和超级用户)之外的所有角色的选择/更新/删除操作

为了允许 roleB 查看/修改行,我需要创建一个策略

CREATE POLICY view_users ON users TO roleB
    USING (manager = current_user);

在我看来,这就像对表的 GRANT/REVOKE 权限,RLS 有何不同

【问题讨论】:

    标签: postgresql grant row-level-security


    【解决方案1】:

    GRANT 只能授予对完整表的权限。将SELECT 权限授予用户(或角色)后,该用户可以查看表中的所有行,并且如果该用户具有表的UPDATE 权限,他/她可以更新所有行。

    使用 RLS(顾名思义),您可以单独控制 每一行 的访问。

    在您的示例中,授予对表的 SELECT 权限将允许每个用户查看所有行。有了你的规则,用户只能看到他/她是经理的那些员工的行(规则可能应该扩展到包括当前用户的行,而不仅仅是当前用户是经理的那些行)。

    取下表:

    Firstname | Lastname | manager 
    ------------------------------
    Jill      | Smith    | paul
    Eve       | Dar      | paul
    Arthur    | Dent     | mary
    Ford      | Prefect  | mary
    

    如果您向角色marypaul 授予选择和更新权限,他们可以查看和更改该表中的所有 行。

    但是根据您问题中的 RLS 政策,mary 角色只能查看和更改 Arthur Dent 和 Ford Prefect。而paul 只能看到并改变 Jill Smith 和 Eve Dar。

    这些用户都不知道表中还有更多行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-07
      • 2015-01-13
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      相关资源
      最近更新 更多