是時候討論資料庫安全性的時候!還記得上一篇文章中,建立一個新的表格時有把一個RLS的按鈕打開,這篇文章就是簡單的說明一下RLS是什麼,以及RLS如何設定等等範例。
Supabase的資料庫和表格
嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功能應用,深入了解Supabase的進階功能應用。
什麼是Row Level Security?
Row Level Security 是一種PostgreSQL資料庫安全性功能,允許開發者根據用戶的角色或權限來限制對數據表中資料的訪問權限。
例如管理員可以設定一個表格中所有資料可以給所有用戶讀取,但是新增、修改與刪除需要這筆資料的擁有者才能夠操作。
滿推薦可以看Supabase官方的影片詳細說明介紹並有提供一個實際案例。
效率的提升
以往的APP是由後端去判斷目前這個使用者是否有權限可以訪問資料庫的內容,並且還要判斷是否為信任來源等等安全性考量。
而Supabase中使用的RLS則是可以讓客戶端直接與資料庫互動,並且根據設定的RLS政策去決定表格內容是否允許當前使用者訪問;這其中也增加訪問資料庫的效率。
設定RLS
頁面介紹
在Supabase中設定RLS的地方要在左側書籤找到Authentication這個
點擊Policies這個按鈕,此時就會看到右側出現上篇文章新建的表格members 表格。
目前的狀態是啟用RLS中,但無任何政策,這個狀態代表說目前表格有被RLS保護,但沒有說什麼情況下可以給使用者使用(讀取、新增、修改、刪除),所以如果現在用API訪問這個表格所有結果都是被拒絕。
新增RLS政策
讓所有人可以讀取
點擊表格列表中右上角的New Policy按鈕,直接選擇上面Get started quickly按鈕,如果本身對於SQL相關有經驗的人也可以直接點擊下面完全客製的按鈕自己撰寫RLS政策。
可以看到Supabase有提供四個標準模板,可以直接新增第一個政策Enable read access to everyone,讓所有人讀取表格內的資料,點擊Use this template後繼續點擊Review和Save policy儲存這個RLS政策。
到這裡可以看到目前表格已經有一種RLS政策,內容正是可以讓所有人讀取,這麼一來如果現在使用API訪問表格即可獲得表格資料。
只有已登入者才能新增資料
接著也是很常用到的政策Enable insert access for authenticated users only,也就是只有已登入者才能在表格中新增資料,這麼做的好處是知道此筆資料的主人是誰,目前只是因為範例所以欄位較為簡單,否則是可以在新增的同時紀錄使用者ID等資訊。
這個政策剛好也在範例模板裡面有提供。
直接在範例這邊選擇第二個政策,內容毋須調整只要依循上面的步驟進行新增的動作。
完成後的內容會是這樣,現在只有成功登入的使用者可以對這個表格進行新增資料的動作。
其餘政策
當然有讀取、新增資料的權限當然要有修改、刪除資料的權限,在Supabase提供的模板裡面直接就有提供模板政策可以新增,但因為範例中使用的表格欄位沒有紀錄那麼多資訊,如果要使用模板的話自己新增對應判斷的欄位,或是稍微修改判斷式。
更多資訊可以閱讀官方提供的文件和範例:
總結
Row Level Security 是Supabase中一項有用的功能,透過合理地使用安全性策略,我們可以確保不同用戶只能訪問他們有權限的資料,同時保護整個APP的安全性。
這篇文章是相對基礎內容,若資料欄位更為多元,RLS判斷也會相對複雜,大部分從Supabase提供的模板中修改對應欄位判斷式是目前我的作法,分享給大家。
有興趣的內容