启用/禁用 RLS 和授予/撤销权限有啥区别

Posted

技术标签:

【中文标题】启用/禁用 RLS 和授予/撤销权限有啥区别【英文标题】: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 有何不同

【问题讨论】:

【参考方案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。

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

【讨论】:

以上是关于启用/禁用 RLS 和授予/撤销权限有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以禁用/启用我的 iphone 应用程序的通知

如何授予我的Windows服务管理员权限

MDRoundFlatIconButton 在禁用后启用时会丢失背景颜色。有啥修复吗?

如何使用 Appium 启用/禁用应用程序权限?

用于禁用/启用触发所有的 Postgresql 权限

启用和禁用一个组件/HTML 中的所有元素