启用/禁用RLS和授予/撤消权限之间有什么区别

时间:2019-07-18 23:55:16

标签: postgresql grant row-level-security

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

df.groupby(['ID','Name'],as_index=False).agg({'COMMENT1': ' '.join, 'COMMENT2': ' '.join, 'NUM': 'sum'})

说我要启用行级安全性,

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

默认情况下,此操作拒绝对除表所有者(roleA和超级用户)以外的所有角色进行选择/更新/删除操作

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

ALTER TABLE accounts ENABLE ROW LEVEL SECURITY;

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

1 个答案:

答案 0 :(得分:0)

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

使用RLS(顾名思义),您可以分别控制每行的访问权限。

给出您的示例,在表上授予SELECT特权将允许每个用户查看所有行。有了您的规则,用户只能看到他/她是经理的那些雇员的行(规则可能应该扩展为也包括当前用户的行,而不仅仅是当前用户是经理的那些行)。 / p>

取下表:

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。

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

相关问题