Sicherheitsgrundlagen
Was ist Supabase? Die Datenbank, die dein Builder ausgesucht hat
Was ist Supabase: die Datenbank, der Login und der Dateispeicher hinter deiner App. Supabase betreibt die Server, die Regeln zu deinen Zeilen gehören dir.

Kurz gesagt
- Was ist Supabase? Dort liegt alles, was deine App sich merken muss: deine Nutzer und ihre Passwörter, die Zeilen hinter jeder Liste und die Dateien, die Leute hochladen.
- Dein Builder hat es ziemlich sicher beim Anlegen des Projekts für dich ausgesucht, und deshalb hat dir nie jemand gezeigt, was da eigentlich steht.
- Supabase betreibt die Maschinen. Die Regeln dazu, wer welche Zeilen lesen darf, gehören dir, und bei einer per SQL angelegten Tabelle sind sie anfangs aus.
Deine App läuft. Irgendwo in ihren Einstellungen, in einer Mail über eine Rechnung oder mitten in einer Nachricht von Lovable steht das Wort Supabase. Irgendwann musst du herausfinden, was das ist, und der Anlass ist selten Neugier: ein Scan hat dein Supabase-Projekt erwähnt, ein Entwickler hat gefragt, welchen Plan du hast, oder deine App speichert nichts mehr und die Antwort liegt irgendwo da drin.
Also: was ist Supabase. Jede andere Erklärung beantwortet das als Wahl zwischen Werkzeugen, und das ist die Frage, die ein Entwickler sich vor dem Projektstart stellt. Du hast diese Wahl nie getroffen. Dein Builder hat sie in den Sekunden getroffen, die das Anlegen des Projekts gedauert hat, und deshalb hat dich nie jemand durch das Ding geführt, in dem jetzt alle Daten deiner Nutzer liegen.
Das hier ist die Fassung für jemanden, der schon eins hat.
Was ist Supabase, in einem Satz?
Dort liegt alles, was deine App sich merken muss.
Deine Nutzer und ihre Passwörter. Die Zeilen hinter jeder Liste, die deine App anzeigt. Die Bilder und Dokumente, die Leute hochladen. Wenn sich jemand um zwei Uhr nachts anmeldet, landet dieser Eintrag in deinem Supabase-Projekt und ist nach dem Schließen des Browser-Tabs immer noch da.
Darunter liegt Postgres, eine Datenbank, die seit den Neunzigern produktiv im Einsatz ist und dich nicht überraschen wird. Was Supabase ergänzt, ist alles drumherum: ein Login-System, ein Platz für Dateien und ein Weg, wie deine App Daten direkt aus dem Browser abfragen kann, ohne dass du einen Server schreibst.
Beim letzten Punkt fangen deine eigenen Entscheidungen an.
Die vier Teile, die du tatsächlich hast
Vier, und deine App nutzt wahrscheinlich mindestens zwei davon.
- Die Datenbank. Tabellen voller Zeilen: deine Nutzer, deine Bestellungen, deine Beiträge. Der Teil, den Leute meinen, wenn sie "Supabase" sagen.
- Auth. Registrieren, anmelden, Passwort zurücksetzen. Wenn deine App Konten hat, liegen sie hier.
- Storage. Hochgeladene Dateien, in benannten Buckets. Profilbilder, Anhänge, Exporte.
- Edge Functions. Kleine Codestücke, die auf den Servern von Supabase laufen statt im Browser deiner Besucher. Deine App hat davon vielleicht keine, und es gibt trotzdem einen guten Grund, sich dafür zu interessieren, weiter unten.
Dein Dashboard listet mehr als diese vier auf. Lass den Rest liegen, bis du beim Bauen etwas davon brauchst.
Worum kümmert sich Supabase, und was gehört mir?
Supabase kümmert sich um die Maschinen. Du kümmerst dich um die Regeln.
Die Trennlinie liegt höher, als die meisten annehmen. Stell dir das Projekt als gemietete Räume vor. Der Vermieter hält das Gebäude, den Strom und die Haustür instand. Was du drinnen aufbewahrst und wen du hereinlässt, war nie seine Entscheidung.
| Was Supabase betreibt | Was dir gehört |
|---|---|
| Die Server, die Postgres-Version und die Updates | Welche Zeilen ein Besucher lesen darf |
| Tägliche Backups deiner Datenbank in den bezahlten Plänen, eine Woche lang | Ob irgendwo eine Kopie liegt, an die dein eigenes Projekt nicht herankommt |
| Die Verschlüsselung auf ihren Platten und auf dem Weg zu deiner App | Wer deine Schlüssel hat und welcher Schlüssel in deiner App steckt |
| Dass das Login-System funktioniert | Welche Dateien in einem Bucket jeder auflisten kann |
Nichts in der linken Spalte fällt leise aus: wenn Supabase eine Störung hat, hörst du das innerhalb von Minuten von deinen Nutzern. Die rechte Spalte ist die, in der Dinge völlig geräuschlos schiefgehen, weil nichts kaputtgeht. Deine App läuft genau weiter wie gestern.
Sind meine Supabase-Daten standardmäßig privat?
Das hängt davon ab, wie die jeweilige Tabelle angelegt wurde, und die Art, wie ein Builder sie anlegt, ist die Art, die sie offen lässt.
Die Dokumentation von Supabase ist da deutlich. Dort steht, dass der Table Editor Row Level Security für dich aktiviert, wenn du eine Tabelle im Dashboard anlegst, und dass du sie selbst aktivieren musst, wenn du eine Tabelle per SQL anlegst. Row Level Security ist die Einstellung pro Tabelle, die entscheidet, welche Zeilen ein Besucher lesen darf. Dein Builder schreibt SQL, also kommt eine Tabelle, die er angelegt hat, mit ausgeschalteter Einstellung.
Der nächste Satz derselben Seite sagt, was das hinterlässt: eine Tabelle im
Schema public ist über die Data API erreichbar, und solange Row Level Security
nicht an ist und keine Policy geschrieben wurde, kann jeder mit dem Publishable
Key deines Projekts jede Zeile darin lesen und schreiben. Dieser Schlüssel
steckt in deiner App, wo er hingehört, und jeder kann ihn aus der Seite
herauslesen.
Also ist das Schloss an jeder einzelnen Tabelle das, was du dir ansehen musst, und es sitzt pro Tabelle statt pro Projekt. Wie du es anmachst und was eine Policy ist ist die Anleitung dazu. Wir haben auch gezählt, wie oft es fehlt: 2.096 der 3.680 Apps, deren Supabase-Datenbank uns geantwortet hat, hatten mindestens eine Tabelle, die ihre Zeilen an Fremde herausgab.
Wenn du es dir lieber von außen ansiehst, statt eine Tabellenliste durchzugehen: unser kostenloser Scan stellt deinem Projekt die Frage, die auch der Browser eines Fremden stellen würde, und zeigt dir, was zurückkam. Das dauert etwa 20 Sekunden und braucht kein Konto: App kostenlos scannen.
Wo deine Schlüssel liegen und welcher öffentlich ist
Auf deiner API-Einstellungsseite stehen Werte von zwei Sorten, und nur eine Sorte gehört in deine App.
Ein Schlüssel, der mit sb_publishable_ anfängt und in einem älteren Projekt
anon heißt, ist für die Öffentlichkeit gedacht und sagt für sich genommen nur,
zu welchem Projekt eine Anfrage gehört. Ein Schlüssel, der mit sb_secret_
anfängt und in einem älteren Projekt service_role heißt, geht an jeder Regel
vorbei, die du aufgestellt hast. Supabase schreibt das klar hin: ein Secret Key
umgeht Row Level Security und gehört deshalb auf den Server. Das ist auch der
eine gute Grund, sich für Edge Functions zu interessieren, denn in einer
Function kann Arbeit passieren, die einen Secret Key braucht, ohne dass der
Schlüssel in die Nähe eines Browsers kommt.
Wo diese Seite ist und was jeder Wert darauf tut behandelt die Fundorte, und welche Schlüssel im Frontend sicher sind behandelt, wie du zwei fast identische Schlüssel auseinanderhältst.
So bleibt es deins, auch nach der Veröffentlichung
Was du heute findest, beschreibt die App von heute. Die nächste Tabelle, die dein Builder anlegt, kommt mit derselben Voreinstellung wie die letzte, und niemand schickt dir dazu eine Nachricht.
Reeve Monitor stellt die Fragen aus diesem Beitrag wieder, nach Plan:
- alle neun Prüfungen jede Stunde, für bis zu drei Apps
- ob die App erreichbar ist, alle 60 Sekunden
- eine Nachricht, wenn sich ein Ergebnis ändert, damit eine Tabelle, die heute Nacht aufgegangen ist, dich vor einem Fremden erreicht
- ein monatlicher Bericht darüber, was gesehen wurde
Reeve Care hält außerdem eine Kopie deiner Supabase-Datenbank. Das ist die zweite Zeile der rechten Spalte oben, für dich erledigt.
- eine verschlüsselte Kopie deiner Supabase-Datenbank jede Nacht, dort abgelegt, wo dein Projekt nicht herankommt
- jede Kopie wird geprüft, bevor sie zählt, indem die Zeilen jeder Tabelle gezählt werden
- eine Wiederherstellung auf einen Klick, wenn du sie brauchst
- deine hochgeladenen Dateien ebenso, sobald du eine Storage-Zugangsberechtigung verbindest
- alles, was Monitor macht
Eine Tabelle, die ein Fremder lesen kann, ist etwas, das eine Prüfung findet. Eine Migration, die falsch herum lief, oder ein Agent mit Zugriff auf deine Datenbank leert die Tabelle stattdessen, und so sieht das von innen aus.
Was du heute einmal prüfen solltest
Was zu tun ist
- Melde dich bei Supabase an und öffne dein eigenes Projekt. Der Zugang gehört dir, auch wenn dein Builder ihn angelegt hat, und im Dashboard liegt jede Antwort von unten.
- Lies das Schloss an jeder Tabelle unter Authentication → Policies. Eine Tabelle mit abgeschalteter Row Level Security gibt ihre Zeilen an jeden heraus, der den Schlüssel hat, der ohnehin in deiner App steckt, und eine Policy, die allen alles erlaubt, zählt als abgeschaltet.
- Öffne Settings → API Keys und finde heraus, welche deiner Werte publishable und welche secret sind. Wenn ein Secret Key je in deiner App war, tausche ihn bei Supabase aus, bevor du ihn aus dem Code nimmst.
- Sieh dir deine Storage-Buckets an. Ein Bucket, der als public markiert ist, listet jedem, der fragt, jede Datei darin auf, auch die, die deine App nie zeigt.
- Halte eine Kopie der Datenbank an einem Ort, an den dein Projekt nicht herankommt, denn nichts aus der Liste oben holt eine gelöschte Tabelle zurück.
Fang bei den Tabellenschlössern an, denn das ist der Punkt auf dieser Liste, den ein Fremder gerade schon nutzen kann. Wenn du das Ganze lieber als Liste durchgehst, deckt die Sicherheits-Checkliste in 10 Minuten das und die anderen Einstellungen ab, die bei einer frisch veröffentlichten App einen Blick wert sind. Ist Supabase sicher nimmt sich die andere Frage vor, mit der Leute hier ankommen, nämlich ob das alles eine gute Idee war.
FAQ
Was ist Supabase einfach erklärt?
Dort liegt alles, was deine App sich merken muss, auf Servern, um die sich jemand anderes kümmert. Deine Nutzer und ihre Passwörter, die Zeilen hinter jeder Liste, die deine App anzeigt, und die Dateien, die Leute hochladen, liegen alle in deinem Supabase-Projekt. Die Basis ist Postgres, eine Datenbank, die seit den Neunzigern produktiv im Einsatz ist, und drumherum kommen ein Login-System, ein Dateispeicher und ein Weg, wie deine App Daten direkt aus dem Browser abfragen kann.
Ist Supabase eine Datenbank?
Es enthält eine, und es ist mehr als eine. Die Datenbank ist Postgres, und das ist der Teil, den Leute meinen, wenn sie Supabase sagen. Daneben stehen drei weitere Dienste, die deine App vielleicht nutzt: Auth für die Anmeldung, Storage für hochgeladene Dateien und Edge Functions für Code, der auf Supabase-Servern läuft statt im Browser deiner Besucher. Dein Dashboard listet mehr als diese vier auf, und den Rest kannst du liegen lassen, bis du etwas davon brauchst.
Hat mein App-Builder Supabase für mich ausgesucht?
Ziemlich sicher ja. Lovable, Bolt, v0, Cursor, Replit und Windsurf greifen alle zu einem gehosteten Postgres, sobald deine App sich etwas merken soll, und Supabase ist die übliche Antwort. Vielleicht hast du einen Knopf mit der Aufschrift Datenbank verbinden gedrückt, vielleicht hat dein Builder das Projekt auch ohne Nachfrage angelegt. So oder so gehört der Zugang dir und du kannst dich anmelden, und genau das ist der erste sinnvolle Schritt.
Welche Teile der Supabase-Sicherheit sind meine Aufgabe?
Supabase betreibt die Server, die Postgres-Version, die Updates, die Verschlüsselung auf ihren Platten und das Login-System selbst. Dir gehören die Regeln: welche Zeilen ein Besucher lesen darf, welche Dateien in einem Bucket öffentlich sind, wer deine Schlüssel hat und welcher Schlüssel in deiner App steckt, und ob irgendwo eine Kopie deiner Daten liegt, an die dein Projekt nicht herankommt. Nichts aus der ersten Liste fällt leise aus. Alles aus der zweiten kann monatelang falsch sein, während deine App einwandfrei läuft.
Sind meine Supabase-Daten standardmäßig privat?
Das hängt davon ab, wie die jeweilige Tabelle angelegt wurde. In der Supabase-Dokumentation steht, dass der Table Editor Row Level Security für dich aktiviert, wenn du eine Tabelle im Dashboard anlegst, und dass du sie selbst aktivieren musst, wenn du eine Tabelle per SQL anlegst. Ein Builder schreibt SQL, also kommen die Tabellen, die er für dich angelegt hat, mit ausgeschalteter Einstellung. Solange sie aus ist und keine Policy existiert, kann laut Supabase jeder mit deinem Publishable Key jede Zeile dieser Tabelle lesen und schreiben, und dieser Schlüssel steckt in deiner App, wo ihn jeder lesen kann.