SupabaseのRow Level Securityをクラウドと設計する
SupabaseのRLS(Row Level Security)は、データベースレベルでアクセス制御を実現する強力な仕組みです。しかし、ポリシーの設計ミスはセキュリティホールに直結します。今回はClaude Codeを活用して、安全かつ効率よくRLSポリシーを設計する方法を紹介します。
RLSポリシーの設計をClaude Codeに依頼する
Section titled “RLSポリシーの設計をClaude Codeに依頼する”まずはプロジェクトのスキーマをClaude Codeに渡して、ポリシーの叩き台を作ってもらいましょう。以下のように入力すると効果的です。
以下のSupabaseテーブル定義に対して、RLSポリシーを設計してください。要件:- ユーザーは自分のデータのみ読み書き可能- 管理者ロール(role = 'admin')はすべてのデータを参照可能- 削除は管理者のみ許可
テーブル: posts (id, user_id, content, created_at)Claude Codeはこの指示から、auth.uid()やauth.jwt()を使った具体的なSQLを生成してくれます。生成されたポリシーをそのまま使うのではなく、「なぜこの条件式なのか」を必ず確認するようにしましょう。
※スキーマ: データベースのテーブル構造や型定義のこと。
生成されたポリシーをレビュー・修正する
Section titled “生成されたポリシーをレビュー・修正する”Claude Codeが出力するポリシーの例はこのようなものです。
-- ユーザーは自分のpostsのみ操作可能ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
CREATE POLICY "users_own_posts" ON posts FOR ALL USING (auth.uid() = user_id);
-- 管理者はすべてのpostsを参照可能CREATE POLICY "admin_read_all" ON posts FOR SELECT USING (auth.jwt() ->> 'role' = 'admin');このSQLをSupabase SQLエディタに貼り付ける前に、Claude Codeへ「このポリシーに抜け穴がないか確認して」と追加で依頼することをおすすめします。たとえばINSERT時にuser_idが改ざんされるリスクや、JWTクレームの検証漏れを指摘してくれます。
※JWT: JSON Web Token の略。ユーザー認証情報をJSON形式でエンコードしたトークン。ヘッダーに付けてAPIを呼び出す際に使う。
マイグレーションファイルへの組み込み
Section titled “マイグレーションファイルへの組み込み”ポリシーが確定したら、Supabase CLIのマイグレーションとして管理しましょう。
supabase migration new add_rls_policies# supabase/migrations/20240101000000_add_rls_policies.sql に出力されたSQLを貼り付けsupabase db pushこのフローをClaude Codeに伝えておくと、「マイグレーションファイル形式で出力して」と一言添えるだけで、そのまま使えるファイルを生成してくれるようになります。RLS設計はセキュリティの要です。Claude Codeを「設計パートナー」として活用し、レビューと検証を徹底して進めましょう。
※マイグレーション: データベースのスキーマ(テーブル構造)を安全に変更するための手順書。※CLI: Command Line Interface の略。ターミナル(黒い画面)からコマンドを入力して操作するインターフェース。