メインコンテンツへスキップ

無料 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 チェッカーと何が違いますか?

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