启用/禁用 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
如果您向角色mary
和paul
授予选择和更新权限,他们可以查看和更改该表中的所有 行。
但是根据您问题中的 RLS 政策,mary
角色只能查看和更改 Arthur Dent 和 Ford Prefect。而paul
只能看到并改变 Jill Smith 和 Eve Dar。
这些用户都不知道表中还有更多行。
【讨论】:
以上是关于启用/禁用 RLS 和授予/撤销权限有啥区别的主要内容,如果未能解决你的问题,请参考以下文章