Obv*_*uit 7 postgresql row-level-security
我有一个 Postgres 表,如下所示:
用户身份 | 名 | 姓 | 电子邮件地址 | 角色 |
---|---|---|---|---|
68f00c4c-5dff-4886-a584-d44a23e47160 | 大卫 | 桑 | 大卫@example.com | 行政人员 |
3ed36117-e632-4b8b-b672-0b29f5f8b5c9 | 马丁 | 休斯 | martin@example.com | 顾客 |
我想写一份政策:
first_name
,last_name
和,但显然不是他们的或(因为这将授予客户管理权限)email_address
user_id
role
user_id
所有记录之外的所有字段(包括更改其他用户的角色)。我是 Postgres 的新手,我正在尝试掌握编写行级安全策略的技巧。我很难在 SQL 中阐明更复杂的策略,因此如果有人能为我的应用程序中的场景提供示例,我将不胜感激。
我正在使用 Supabase,它有一个auth.uid()
函数(示例),其中包含 JSON Web 令牌中的用户 ID。
小智 5
我也遇到了类似的问题,也是使用 Supabase。我最终创建了一个包含用户表可编辑列的视图,其中该视图执行行级过滤:
CREATE OR REPLACE VIEW editable_user AS
SELECT u.name
FROM pub_users u
WHERE auth.uid() = u.id;
Run Code Online (Sandbox Code Playgroud)
就我而言,我只希望我的用户能够编辑自己的姓名,但这应该可以直接扩展到更多列。
然后在我的前端中,我直接写入这个视图(在今天之前我什至不知道这是可能的......)
Phi*_* W. -1
为什么允许用户(甚至管理员)靠近数据库本身?
您应该提供一个允许他们操作数据的应用程序,并且该应用程序不应该为他们提供任何方式来查看他们不应该看到的内容或更改他们不应该更改的内容。
如果有人获得了数据库本身的更新访问权限,那么一切都将失败。
归档时间: |
|
查看次数: |
2540 次 |
最近记录: |