🍆

Supabaseで「Permission defined to table hoge(42501)」が出たときの対処方法

2023/03/19に公開

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