メインコンテンツへスキップ
友田 陽大

無料 RLS ポリシー生成ツール

正しい Supabase RLS ポリシーを数秒で生成

行の所有のしかたと、許可する操作を選ぶだけ。各行を呼び出し元に絞る貼るだけ SQL を——Supabase 推奨の (select auth.uid()) 性能イディオムと、書き込みの WITH CHECK 付きで——生成します。出力を貼ったら、チェッカーで検証しましょう。

すべてブラウザ内で動作——どこにも送信しません。

所有モデル
許可する操作

生成されたポリシー

alter table public.notes enable row level security;

create policy "notes_owner_select"
  on public.notes for select
  to authenticated
  using ((select auth.uid()) = user_id);

create policy "notes_owner_insert"
  on public.notes for insert
  to authenticated
  with check ((select auth.uid()) = user_id);

create policy "notes_owner_update"
  on public.notes for update
  to authenticated
  using ((select auth.uid()) = user_id)
  with check ((select auth.uid()) = user_id);

create policy "notes_owner_delete"
  on public.notes for delete
  to authenticated
  using ((select auth.uid()) = user_id);

これらはよくある所有パターンの正しいテンプレートです——正しい「形」を生成しますが、あなたの認可設計が正しいことの保証ではありません。カラムとモデルがデータに合うか確認し、チェッカーで検証してください。設計レビューを補完するもので、代替ではありません。

出力を信頼できる理由

同じ分類器の表と裏

生成(create)と RLS チェッカー(verify)は、同じ問い——ポリシーが行を呼び出し元に絞っているか——を扱います。ここの全パターンは CI でチェッカーの分類器に通され、over-permissive には決してなりません。

  1. 1

    構造的に正しい

    所有者束縛の述語、全書き込みの WITH CHECK、(select auth.uid()) ラッパ——実態調査が実アプリの 9.2% で欠けていると見つけた、まさにその形です。

  2. 2

    主張でなく証明

    テストが全モデル×操作を生成し、チェッカーと同じエンジンで分類。出力が authenticated-only や anon-writable と判定されたら CI が落ちます。

  3. 3

    確認はあなたの手で

    入力に対して正しい形を生成します。カラムと所有モデルがデータに合うかはあなたが確認を——ツールは業務ルールを知り得ず、それを明言します。

生成したら、リポジトリ全体を検証

ポリシーをチェッカーに貼って確認するか、プロジェクト全体をコマンド一発でスキャン。アクセス制御の設計を端から端まで見てほしいなら、監査として引き受けます。

npx @aegiskit/cli scan

インストール・サインアップ不要——リポジトリをローカルで読み、どこにも通信しません。

github.com/tomodahinata/aegis

FAQ

  • 生成されたポリシーは本番に貼って安全ですか?

    定番の所有者スコープの形であり、全て RLS チェッカーと同じ分類器で over-permissive にならないことを検証済みです。ただしカラムと所有モデルがデータに合うかは確認が必要です——生成するのは正しい「形」であって、認可設計が正しいことの保証ではありません。

  • (select auth.uid()) は何のためですか?

    Supabase 推奨の性能イディオムです。関数をサブクエリに包むと、Postgres は行ごとではなくクエリごとに 1 回だけ評価するため、大きなテーブルで桁違いに速くなります。素の auth.uid() = user_id は正しいが遅い。理由があればオフにできます。

  • なぜ書き込みに WITH CHECK を付けるのですか?

    USING は「見える行」、WITH CHECK は「書ける値」を制御します。無いと、他人の所有者 ID で行を作成・更新できてしまう(書き込みバイパス)。生成ツールは全 INSERT/UPDATE に自動で WITH CHECK を付けます。

  • テーブル名やカラム名はどこかに送信されますか?

    いいえ。生成は 100% ブラウザ内で動作し、どこにも通信しません。入力は安全な SQL 識別子にサニタイズされるため、おかしな入力でも壊れた/注入可能な SQL にはなりません。

  • RLS チェッカーと何が違いますか?

    生成ツールは正しいポリシーを作り、チェッカーは既存のポリシーを検証します。同じ分類器の表と裏です——ここで生成し、実際のマイグレーションをチェッカーに貼って、ズレていないか確認してください。