🍆
Supabaseで「Permission defined to table hoge(42501)」が出たときの対処方法
supabase-js 経由でテーブルにアクセスしようとすると、
"Permisson defined to table hoge" というエラーが出てくることがあります。
テーブルを作成したときに自動的に権限が付与されるべきなのですが、
なぜか権限が付与されない現象が発生することがあるようです。(2021年から既知の問題として発生しており、今も同様の問題で悩んでいる投稿が見られます。)
とりあえず、下記の方法で解決したので残しておきます。
GRANT ALL ON TABLE public.ここにテーブル名 TO postgres;
GRANT ALL ON TABLE public.ここにテーブル名 TO anon;
GRANT ALL ON TABLE public.ここにテーブル名 TO authenticated;
GRANT ALL ON TABLE public.ここにテーブル名 TO service_role;
「ここにテーブル名」という箇所をご自身の対象のテーブル名に置き換えてください。
SQL Editor で実行すると supabase-js でのアクセスがステータス200となり、正常な通信が可能となります。
GRANT ALL
で権限を全部渡しているので不安なのでポリシーが動くかを確認したいと思います。
動作チェックをしてみる
ポリシーにて
BEGIN;
ALTER POLICY "Disabled read access for all users" ON "public"."address_japan" USING (false);
COMMIT;
として設定します。
これで全てのアクセスを拒否することになります。
アプリケーション側(supabase-js)からリクエストを飛ばして確認してみると、データの取得に失敗することが確認できます。
逆に
BEGIN;
ALTER POLICY "Enabled read access for all users" ON "public"."address_japan" USING (true);
COMMIT;
とするとデータの取得ができるようになります。
ちゃんとポリシーも正常に動いていることが確認できます。
Discussion