背景
React + Supabaseで学習記録アプリを開発している時、アプリ上で入力したデータをSupabase上のテーブルに追加できないエラーに遭遇した。
エラー詳細
{code: '42501', details: null, hint: null, message: 'new row violates row-level security policy for table "study-record"'}
※ここで、「study-record」はSupabase上に作ったテーブル名
エラー原因
結論としては、Supabase上でテーブルに対するセキュリティポリシー(policy)を設定していなかったことが原因だった。
SupabaseはRow-Level Security (RLS) を使用して、データベースへのアクセス制御を強化しており、これにより、特定の条件を満たすユーザーのみがデータの挿入(INSERT)や更新(UPDATE)などの操作を行えるように制限されている。
解決方法
-
「Policy name」を設定し、「SELECT」操作を許可するポリシーを作成する場合、
using
句をtrue
に設定します。これにより、すべてのレコードに対してSELECT
が許可されます。
-
最後に、作成したポリシーを「Save policy」を押して有効にし、エラーがなくなる事を確認する。
注意点
-
using
句をtrue
に設定すると、全ての行に対して無条件で操作が許可されるが、特定のユーザーやデータに対してのみ許可を出すほうがセキュリティ上より安全。
例えば、特定の条件(ユーザーIDや役職など)に基づいてアクセス制御を行う方法が一般的であるらしい。