Postgresql

允許使用者僅修改具有行級安全性的 PostgreSQL 表中的某些(但不是全部)欄位

  • November 12, 2021

我有一個 Postgres 表,如下所示:

我想寫一個政策:

  • 允許客戶在他們自己的記錄中更新first_name,last_name和,但顯然不是他們的or (因為這將授予客戶管理權限)email_address``user_id``role
  • 允許管理員編輯除所有記錄之外的所有欄位user_id(包括更改另一個使用者的角色)。

我是 Postgres 的新手,我正在嘗試掌握編寫行級安全策略的竅門。我很難在 SQL 中闡明更複雜的策略,所以如果有人可以為我的應用程序中的場景提供一個範例,我將不勝感激。

我正在使用 Supabase,它有一個包含來自 JSON Web 令牌的使用者 ID的auth.uid()函式(範例)。

我也有類似的問題,也在使用 Supbase。我最終製作了一個包含 users 表的可編輯列的視圖,該視圖在其中進行行級過濾:

CREATE OR REPLACE VIEW editable_user AS
 SELECT u.name
 FROM pub_users u
 WHERE auth.uid() = u.id;

就我而言,我只希望我的使用者能夠編輯他們自己的名字,但這應該可以直接擴展到更多列。

然後在我的前端直接寫入這個視圖(在今天之前我什至不知道這是可能的……)

為什麼您允許使用者(甚至管理員)靠近數據庫本身?

您應該提供一個允許他們操作數據的應用程序,並且該應用程序不應該為他們提供任何方式來查看他們不應該看到的內容或更改他們不應該更改的內容。

如果有人在數據庫本身中獲得更新訪問權限,那麼所有的賭注都沒有了。

引用自:https://dba.stackexchange.com/questions/298931