我在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"
这是个问题,谢谢!
答案 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);
只需阅读我链接的文档,您就可以轻松实现它