子表上的GRANT权限是哪个特定父项

时间:2016-04-15 15:52:13

标签: sql postgresql permissions

我在Postgres下用这三张桌子做了一个公寓数据库(等等) 这些表仅列出PK和FK参与我的问题以简化代码

TableName: Administrator
PK: admin_id

TableName: Condo
PK: condo_id
FK: admin_id (Connects with Administrator of this condo)

TableName: Property
PK: property_id
FK: condo_id (Connects with parent condo)

现在,假设有一个admin_id = 1的管理员,我为他创建了一个SQL用户,例如:

CREATE ROLE "john_smith"
LOGIN PASSWORD '123456'
VALID UNTIL 'infinity';

所以现在我希望他只更新与他作为管理员的公寓相关的属性(admin_id = 1)

我怎么能做像

这样的事情
GRANT SELECT, INSERT, UPDATE, DELETE 
ON Property
WHERE "The Properties of a Condo with admin_id = 1"
TO "john_smith"

这是个问题,谢谢!

1 个答案:

答案 0 :(得分:0)

可以在Postgress上进行,这称为Row Security Policies

但是你还没有发布足够的关于你的数据库的信息来得到明确的答案。

您的想法是,您必须创建ROLES GROUPS

的特定USERS

在您的示例中,您仅创建了用户角色。您应添加管理员 用户组,并将管理员用户添加到其中。

然后你做了类似

的事情
ALTER TABLE Property ENABLE ROW LEVEL SECURITY;

CREATE POLICY Property_Administrator ON property TO Administrators
    USING (SELEcT true FROM condo WHERE condo.condo_id=property.condo_id AND  condo.admin_id= current_user);

只需阅读我链接的文档,您就可以轻松实现它