🔒

Flutter x Supabase でカスタムスキーマ作成エラー `permission denied for schema`

に公開

これなに

カスタムスキーマを作成した際に permission denied for schema というエラーが出たので、その解消方法をメモ。
ついでに Flutter で Supabase のカスタムスキーマに切り替えた時のおおよその手順もメモ。

実際に遭遇したエラー

my_schema_test というスキーマを作成して、スキーマ切り替えテストで debugPrint していたらこんな感じのエラーが出てきた。
のちにわかるものですが、権限設定が不足していたようです。

PostgrestException(message: permission denied for schema my_schema_test, code: 42501, details: Unauthorized, hint: null)

参考ガイド

以下の公式ガイドに記載されている通り、権限付与をしてくださいとのことで、これが全てでした。
https://supabase.com/docs/guides/api/using-custom-schemas?queryGroups=language&language=curl
image.png

カスタムスキーマ利用の全体の手順

1: スキーマ作成

GUI からスキーマを作成、かんたん。
image.png
image.png

2: 権限設定

前述の通りスキーマを作成したら権限付与

GRANT USAGE ON SCHEMA my_schema_test TO anon, authenticated, service_role;
GRANT ALL ON ALL TABLES IN SCHEMA my_schema_test TO anon, authenticated, service_role;
GRANT ALL ON ALL ROUTINES IN SCHEMA my_schema_test TO anon, authenticated, service_role;
GRANT ALL ON ALL SEQUENCES IN SCHEMA my_schema_test TO anon, authenticated, service_role;
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA my_schema_test GRANT ALL ON TABLES TO anon, authenticated, service_role;
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA my_schema_test GRANT ALL ON ROUTINES TO anon, authenticated, service_role;
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA my_schema_test GRANT ALL ON SEQUENCES TO anon, authenticated, service_role;

3: コードでスキーマ指定

以下の通りスキーマを指定する。

  await Supabase.initialize(
    url: dotenv.env['SUPABASE_URL']!,
    anonKey: dotenv.env['SUPABASE_ANON_KEY']!,
    postgrestOptions: PostgrestClientOptions(schema: 'my_schema_test'), // ここを追記
  );

image.png

おわりに

日本語の情報は無かったので FlutterFlow とか Stackflow とか Github issue とか漁ってました。
だけど最終的に公式のガイド見つけたのでそれで解決しました、よかったよかった。

GitHubで編集を提案

Discussion