本文へ移動

Supabaseを本番で使う前に見る設定|RLS・キー・バックアップ・環境の分け方

Supabase を本番環境で使う前に確かめる4つの設定を、公式ドキュメントに沿って説明します。RLS(行単位のアクセス制御)、anon キーと service_role キーの違い、プランごとのバックアップ、開発と本番のプロジェクトの分け方です。

公開日 更新日

Supabase を本番で使う前に見るのは、4つです。すべての公開テーブルで RLS(行単位のアクセス制御)が有効で、ポリシーが意図どおりか。ブラウザに置くキーが公開用だけか。バックアップがプランごとにどうなっているか。開発と本番でプロジェクトを分けているか。仕様は変わるので、この記事は公式ドキュメントを2026年10月に確認した内容です。

なぜ、RLS から見るのか

RLS(Row Level Security)は、データベースの中で「この行は、この人だけが見てよい」を決める仕組みです。たとえば注文の表に、Aさんの注文と Bさんの注文が入っていても、RLS で「自分の注文だけ」と決めておけば、Aさんに Bさんの行は返りません。

Supabase は、ブラウザやアプリから、データベースに直接つながる API(Data API)を使えます。公式ドキュメントは、次のように説明しています。

  • public スキーマのテーブルは、Supabase の API からアクセスできます。
  • RLS が有効でない public テーブルは、プロジェクトの URL を知っていれば誰でも、行の作成・読み取り・更新・削除ができる状態になり得ます。

つまり、ログイン画面があっても、アプリの画面で見えないようにしていても、データベース側の RLS が無ければ、守られていないことがあります。画面の側で防げなくても、データベースの側で止める。その最後の守りが、RLS です。

1. RLS: 有効かどうかと、何が見えるか

公式ドキュメントで確認できたこと

  • Dashboard から作ったテーブルは、RLS が既定で有効です。
  • RLS を有効にすると、ポリシーを作るまで、公開用のキーでは API からデータが見えなくなります。
  • 公式は「公開しているスキーマのすべてのテーブルで RLS を有効にする」ことを求めています。
  • ビュー(view)は、既定では RLS を迂回します。公式は、ビューが通常 postgres ユーザーで作られるためと説明しています。
  • 既存のプロジェクトでは、public に作ったテーブルに、anon・authenticated・service_role の3つのロールへの権限が、既定で付きます。Supabase は、この既定を、公開が明示的な選択になるように変更中と書いています。ただし、プロジェクトによって異なるため、自分のプロジェクトでの状態を確かめる必要があります。

確かめ方

  1. RLS が無効のテーブルがないか。 Supabase のダッシュボードには、セキュリティ面の指摘を出す Advisor があります。公式は、public テーブルで RLS が無効な場合を重大な指摘(lint 0013)として扱っています。
  2. SQL やマイグレーションで作ったテーブルも、有効か。 Dashboard で作ったテーブルは既定で有効と書かれていますが、SQL で作った場合の既定は、今回確認した公式ページには書かれていませんでした。自分の目で、全テーブルを確かめてください。
  3. ビューを公開していないか。 使っているなら、RLS が効いているかを確かめます。
  4. ポリシーが、意図どおりか。 有効になっていても、ポリシーが緩ければ、他人のデータが見えます。公式は、テーブルごとにテストを書いて supabase test db で実行するよう案内し、「テストが通るまでは、ポリシーが意図どおりかは分からない」と書いています。

テストを書く前に、まず実際に試すこともできます。アカウントを2つ作り、片方でログインしたまま、もう片方のデータを指定してみる方法は、ログインと権限の制御に書いています。

2. キー: ブラウザに置いてよいもの、いけないもの

Supabase には、API キーの種類があります。公式ドキュメントでは、次のように整理されています。

キー 位置づけ 置いてよい場所
publishable キー(従来の anon キー) 公開用 ブラウザ、アプリ、ソースコードなど。「Safe to expose online」(訳: オンラインで公開しても安全)
secret キー(従来の service_role キー) RLS を迂回する サーバー側だけ。ブラウザ、配布するアプリ、ソースコードの管理には置かない

押さえておきたい点は3つです。

  • 公開用のキーも、RLS が前提です。 公式は、公開用のキーでは、RLS がクライアントの届く範囲を決める、と説明しています。公開用だから安全、ではありません。
  • secret キーは、RLS を迂回します。 公式は「A secret key bypasses every Row Level Security policy you have.」(訳: secret キーは、あなたが設定したすべての Row Level Security ポリシーを迂回します。)と書いています。ブラウザに届くコードに入っていたら、RLS の設定に関わらず、データに触れられます。
  • 従来のキーは、廃止予定です。 公式は、anon と service_role のキーを2026年末までに廃止する予定だと書いています。新しい名前のキーへの移行も、本番化の確認に入れてください。

secret キーが漏れた場合、公式は、新しいキーを作って置き換え、漏れたキーはすぐに削除するよう案内しています。漏れたあとの手順は、API キーが漏れたあと、最初にやることにまとめています。キーが外から見える状態の確かめ方は、APIキーがブラウザやコードから見えていないかにあります。

3. バックアップ: プランごとに違う

公式ドキュメントと料金ページで確認できた範囲を、表にまとめます。

プラン 日次バックアップ
Free 含まれない(料金ページ)。公式は、CLI の db dump で定期的にエクスポートするよう勧めている
Pro 直近7日分
Team 直近14日分
Enterprise 最大30日分

そのほか、押さえておきたい点です。

  • PITR(Point-in-Time Recovery)は、追加オプションです。 Pro・Team・Enterprise で有効にできます。公式のチェックリストは、データベースが4GB を超える見込みなら有効にするよう案内しています。
  • Storage に保存したファイルは、データベースのバックアップに含まれません。 公式は「データベースには、オブジェクトのメタデータしか含まれない」ためと説明しています。画像やアップロードされたファイルを扱うなら、別に考える必要があります。
  • 無料プランは、使われないと一時停止されることがあります。 公式の料金ページには「1週間使われないと一時停止」とあり、チェックリストは、一時停止されないことを保証したいなら Pro にするよう案内しています。

バックアップは、あるかどうかより、戻せるかが大事です。戻す練習の考え方は、バックアップと監視に書いています。

4. 開発と本番: プロジェクトを分ける

公式ドキュメントの環境管理のページは、次の構成を示しています。

  • 本番とは別に、ステージング用の Supabase プロジェクトを作る。
  • 各開発者、各ブランチは、ローカルに自分のデータベースを持てる。
  • 構成は、機能ブランチ=ローカルのデータベース、develop ブランチ=ステージングのデータベース、main ブランチ=本番のデータベース。
  • データベースの変更は、supabase/migrations ディレクトリのマイグレーションとして管理し、リリースのときに、リンクしたプロジェクトへ適用する。

Supabase のダッシュボードから直接テーブルを変更していると、開発のつもりの変更が本番に入ることがあります。変更を履歴として残し、本番へは決まった経路で入れる、という分け方の考え方は、開発環境と本番環境の分け方にまとめています。

公式のチェックリストにある、そのほかの項目

公式の「Going into Prod」のページには、次のような項目もあります。

  • アカウントを MFA(多要素認証)で守る
  • データベースの SSL 強制を有効にする
  • データベースへの Network Restrictions(接続元の制限)を設定する
  • よく使うクエリに合った索引を用意する
  • 負荷テストを行う(できればステージング環境で)

事例: 2つのニュースから

RLS やキーの設定漏れは、実際のニュースにもなっています。2件とも、「ツールが危険」という話ではない点に注意して読んでください。

Lovable で生成されたサイトの RLS 不備(CVE-2025-48757)。 2025年に、Lovable で生成されたサイトで、RLS が不十分なため、認証なしの第三者がデータベースを読み書きできる例が報告されました。この CVE には、**供給元が異議を出している(disputed)**という注記があります。注記は、Lovable の各顧客が、自分のアプリのデータを保護する責任を負う、という趣旨です。つまり、どのツールで作っても、データを守る設定を確かめる役目は、公開する側に残る、という論点です。詳しくはログインと権限の制御にあります。

Moltbook のデータベース露出。 2026年1月、セキュリティ企業の Wiz が、Moltbook のデータベースが外から見える状態だったと報告しました。Wiz の説明では、クライアント側の JavaScript に Supabase の API キーが入っていて、RLS のポリシーが無かったため、そのキーで本番データベース全体にアクセスできました。Wiz は創業者の「コードを1行も書いていない」という発言を引用していますが、AI が直接の原因だとは実証していません。

この2件が示すのは、Supabase に限らず、キーの置き場所と、データ側の権限設定が、別々に必要だということです。

私たちの考え方: ダッシュボードで見えることと、確かめたことは別

私たちも、Supabase を使った案件を手がけています。Supabase は、ダッシュボードで設定の多くが見え、Advisor が指摘もしてくれます。それでも私たちは、他人のデータが見えないことを、実際に試して確かめることを勧めます。RLS が「有効」と表示されていることと、ポリシーが意図どおりに効いていることは、別だからです。

判断の順序は次のとおりです。まず、すべてのテーブルで RLS が有効か。次に、ブラウザに届くキーが公開用だけか。そして、別のアカウントで、見えてはいけないものが見えないか。この3つを、公開前に確かめます。

本番に出す前の、確認リスト

  1. すべての public テーブルで RLS が有効か(SQL で作ったものも含む)。ビューは公開していないか
  2. アカウントを2つ作り、他人のデータが見えないか。ログアウトした状態でも試したか
  3. ブラウザに届くコードに、secret(service_role)キーが入っていないか
  4. バックアップの有無と、保存日数を、自分のプランで確かめたか。Storage のファイルは別に考えたか
  5. 開発用と本番用でプロジェクトを分け、本番へはマイグレーションで入れているか
  6. アカウントの MFA、SSL の強制、接続元の制限を確かめたか

wizgeek にできること

確かめて不安が残ったとき、または確かめ方に自信がないときは、ご相談ください。試作の構成と機能を把握し、認証・データベース・インフラ・セキュリティ・監視のうち何が足りないかを整理して、構成案をお渡しします(本番化の診断:5万円〜、税別)。構成案をもとに、お客様側で実装していただくこともできます。本番化の作業は別途お見積りします。公開後の保守運用は、月10万円〜(税別)です。

公開前に確かめる4点の全体像は、AIで作ったアプリを本番化するにはにまとめています。

よくある質問

SupabaseでRLSを有効にしないとどうなりますか?
公式ドキュメントによると、public スキーマのテーブルは Supabase の API からアクセスできます。RLS が有効でないテーブルは、プロジェクトの URL を知っていれば誰でも、行の作成・読み取り・更新・削除ができる状態になり得ます。本番に出す前に、公開しているすべてのテーブルで RLS を有効にし、ポリシーが意図どおりか確かめてください。
anonキーとservice_roleキーは、どちらをブラウザに置いてよいですか?
ブラウザに置いてよいのは、公開用のキー(publishable キー、従来の anon キー)だけです。service_role キー(新しい名前は secret キー)は RLS を迂回するため、ブラウザ、配布するアプリ、ソースコードの管理には置かないでください。ただし、公開用のキーも、RLS が前提です。
Supabaseの無料プランで、本番運用してもよいですか?
公式の料金ページでは、無料プランには日次バックアップが含まれず、一定期間使われないとプロジェクトが一時停止されると書かれています。何が必要かは、扱うデータと利用者によります。バックアップと停止の条件を確かめたうえで、プランを選んでください。

関連する実績

関連する課題ページ

バイブコーディング・AIで作ったアプリを、本番で使えるようにしたい

最近は、生成AIにコードを書かせて(バイブコーディング)画面や試作(プロトタイプ)を作ってから相談してくださる方が増えています。完成イメージを最初から共有できるので、開発は速く進みます。ただ、多くは画面だけの試作です。そこに認証、データベース、インフラ、セキュリティ、監視、バックアップ、テストを整え、本番運用に耐える形にして公開・運用します。

課題別ページを見る

AIで作った試作の話から、始めませんか。

画面だけの試作でも、動いているアプリでも構いません。まず診断で、本番に必要なものを洗い出します。