[{"data":1,"prerenderedAt":931},["ShallowReactive",2],{"blog-de-supabase-backup-auth-users":3,"blog-index-de":582},{"id":4,"title":5,"body":6,"category":538,"cover":539,"coverAlt":540,"description":541,"draft":542,"extension":543,"faq":544,"image":561,"keywords":562,"meta":571,"navigation":572,"ogTitle":5,"path":573,"published":574,"seo":575,"stem":576,"tldr":577,"updated":574,"__hash__":581},"blog_de\u002Fblog\u002Fsupabase-backup-auth-users.md","Warum in deinem Supabase-Dump keine Nutzer stehen",{"type":7,"value":8,"toc":526},"minimark",[9,13,21,35,38,43,46,63,84,87,93,97,102,123,126,136,143,146,151,155,161,214,217,223,226,236,240,243,252,258,261,267,270,276,289,300,306,312,316,319,325,331,334,356,360,363,375,390,396,403,407,445,452,456,459,464,499,507,515],[10,11,12],"p",{},"Du hast das Vernünftige getan. Du hast nachgeschlagen, wie man eine\nSupabase-Datenbank sichert, den gefundenen Befehl ausgeführt und die Datei an\neinen sicheren Ort gelegt.",[10,14,15,16,20],{},"Dann brauchst du sie eines Tages. Du spielst die Datei in ein frisches Projekt\nein, und die Wiederherstellung läuft ohne einen einzigen Fehler durch. Jede\nTabelle, die du je angelegt hast, ist da, und jede einzelne davon ist leer.\nDeine Nutzer sind noch schlechter dran: Der Teil der Datenbank, in dem sie\nleben, ein Schema namens ",[17,18,19],"code",{},"auth",", hat die Datei nie erreicht.",[10,22,23,24,31,32,34],{},"Hier ist der Teil, den fast jede Anleitung überspringt: ",[25,26,27,30],"strong",{},[17,28,29],{},"supabase db dump","\nallein ist keine Kopie deiner Daten."," Ohne weitere Flags schreibt es die Form\ndeiner Datenbank und nichts von ihrem Inhalt, und ",[17,33,19],{}," lässt es sogar dabei\nweg. Supabase veröffentlicht das Backup als drei Befehle, und deine Konten\nfahren im dritten mit.",[10,36,37],{},"Es hilft, an ein Hotel zu denken. Deine Tabellen sind die Zimmer und alles\ndarin. Das Gästebuch an der Rezeption, das mit jedem Namen darin, gehört dem\nHotel. Und ein Grundriss zeigt dir jedes Zimmer im Haus, ohne einen einzigen\nGast hineinzustellen.",[39,40,42],"h2",{"id":41},"enthält-ein-supabase-backup-meine-nutzer","Enthält ein Supabase-Backup meine Nutzer?",[10,44,45],{},"Das hängt davon ab, welcher Befehl die Datei geschrieben hat, und der Befehl,\nden die meisten ausführen, tut es nicht.",[10,47,48,49,51,52,55,56,59,60,62],{},"Deine Nutzer sind keine Zeilen in einer deiner eigenen Tabellen. Supabase hält\nsie in einer eigenen Schublade derselben Datenbank, dem ",[17,50,19],{},"-Schema,\nzusammen mit ihren gehashten Passwörtern, den Anbietern, über die sie sich\nangemeldet haben, und den Sitzungen, die sie halten. Deine eigenen Tabellen\nsitzen in einer Schublade namens ",[17,53,54],{},"public",", und jede ",[17,57,58],{},"user_id","-Spalte darin ist\nein Verweis hinüber nach ",[17,61,19],{},".",[10,64,65,66,68,69,71,72,75,76,83],{},"Ein Schema ist genau das: eine benannte Schublade in einer Datenbank. ",[17,67,54],{},"\ngehört dir. ",[17,70,19],{}," gehört Supabase, und ",[17,73,74],{},"storage"," auch, in dem die Zeile liegt,\ndie jede hochgeladene Datei beschreibt. Supabases eigene Dokumentation nennt\ndiese seine verwalteten Schemas und sagt, dass sie\n",[77,78,82],"a",{"href":79,"rel":80},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Flocal-development\u002Fcli-workflows",[81],"nofollow","normalerweise nicht gezogen werden müssen, solange du sie nicht verändert hast",",\nweshalb das Werkzeug sie anders behandelt als deine Tabellen.",[10,85,86],{},"Diese Teilung ist es, die einen Befehl zwei Dateien schreiben lässt, die\neinander gleichen und völlig Verschiedenes enthalten.",[88,89],"diagram",{"alt":90,"caption":91,"src":92},"Eine Dump-Datei, deren Pfeil eine durchgezogene Fläche mit vier erleuchteten Tabellen erreicht, versehen mit einem Haken. Ein zweiter Pfeil endet an einer gestrichelten Wand vor einer gestrichelten Fläche mit dem Supabase-Zeichen, und diese Fläche enthält eine linierte Karte mit drei Personen neben vier blassen Bildern. Auf der Wand sitzt ein Kreuz.","Allein ausgeführt kopiert der Dump-Befehl die Form deiner eigenen Schublade und hält an der Grenze zu den beiden, die Supabase betreibt.","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fwhere-the-dump-stops-1600x620.png",[39,94,96],{"id":95},"was-der-dump-befehl-allein-schreibt","Was der Dump-Befehl allein schreibt",[10,98,99,100,62],{},"Den Grundriss. Keine Zeilen, und nichts aus ",[17,101,19],{},[10,103,104,105,108,109,114,115,118,119,122],{},"Supabases Referenzseite zu dem Befehl sagt es in zwei Sätzen. Er führt\n",[17,106,107],{},"pg_dump"," mit zusätzlichen Flags aus, um die von Supabase verwalteten Schemas\nauszuschließen, und zu den ignorierten\n",[77,110,113],{"href":111,"rel":112},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Freference\u002Fcli\u002Fsupabase-db-dump",[81],"gehören auth, storage und die von Erweiterungen angelegten",".\nDieselbe Seite sagt dann, dass der Standard-Dump keine Daten und keine eigenen\nRollen enthält und dass du sie bekommst, indem du mit ",[17,116,117],{},"--data-only"," und\n",[17,120,121],{},"--role-only"," danach fragst.",[10,124,125],{},"Das hier also, das du vermutlich ausgeführt hast:",[127,128,133],"pre",{"className":129,"code":131,"language":132},[130],"language-text","supabase db dump --db-url \"postgresql:\u002F\u002F…your connection string…\" -f backup.sql\n","text",[17,134,131],{"__ignoreMap":135},"",[10,137,138,139,142],{},"erzeugt eine Datei voller ",[17,140,141],{},"CREATE TABLE","-Anweisungen. Jede Spalte, jeder Index,\njede Policy, die du auf deinen eigenen Tabellen geschrieben hast, und keine\neinzige Zeile von irgendetwas.",[10,144,145],{},"Der Grund, warum das schlimmer ist als eine offensichtlich leere Datei, ist,\ndass sie funktioniert. Klein ist sie auch nicht erkennbar: Jede\nTabellendefinition, jeder Index und jede Policy, die du je geschrieben hast,\nsteht darin, und das ist bei einer echten App eine Menge Text. Ein leeres\nBackup meldet sich von selbst. Dieses spielt sauber ein, und das Erste, was\ndir etwas anderes sagt, ist eine Anmeldeseite, an der kein Konto vorbeikommt.",[88,147],{"alt":148,"caption":149,"src":150},"Zwei Dateien nebeneinander. Die linke ist gestrichelt und enthält zwei leere Tabellenraster neben einem leeren Umriss, wo eine Karte stehen müsste, und sie ist durchgekreuzt. Die rechte enthält dieselben zwei Tabellen mit gefüllten Zeilen und an der Stelle des leeren Umrisses eine linierte Karte mit drei Personen. Sie hat einen Haken.","Derselbe Befehl schreibt beide. Welche du in der Hand hältst, entscheidet ein Flag, und beide spielen ohne Fehler ein.","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fthe-plan-and-the-contents-1600x620.png",[39,152,154],{"id":153},"wie-prüfe-ich-den-dump-den-ich-schon-habe","Wie prüfe ich den Dump, den ich schon habe?",[10,156,157,158,160],{},"Öffne ihn in einem Texteditor und suche nach ",[17,159,19],{},". Was zurückkommt, ordnet\ndeine Datei einer von drei Gruppen zu.",[162,163,164,176,194],"ol",{},[165,166,167,170,171,173,174,62],"li",{},[25,168,169],{},"Überhaupt keine Treffer."," Das ",[17,172,19],{},"-Schema steht in dieser Datei in\nkeiner Form. Das schreibt ein blankes ",[17,175,29],{},[165,177,178,193],{},[25,179,180,181,184,185,188,189,192],{},"Treffer, aber nur in Zeilen, die mit ",[17,182,183],{},"CREATE",", ",[17,186,187],{},"ALTER"," oder ",[17,190,191],{},"GRANT","\nbeginnen."," Du hast den Entwurf des Gästebuchs und niemanden darin.",[165,195,196,209,210,213],{},[25,197,198,199,188,202,205,206],{},"Eine Zeile ",[17,200,201],{},"COPY \"auth\".\"users\"",[17,203,204],{},"COPY auth.users",", mit Datenzeilen\ndarunter bis zu einer Zeile mit ",[17,207,208],{},"\\."," Oder eine Folge von Zeilen, die mit\n",[17,211,212],{},"INSERT INTO \"auth\".\"users\""," beginnen. Deine Konten sind drin.",[10,215,216],{},"Wenn du es lieber auf der Kommandozeile machst, beantworten zwei greps dieselbe\nFrage:",[127,218,221],{"className":219,"code":220,"language":132},[130],"grep -c 'auth.*users' backup.sql\ngrep -n 'COPY .*auth.*users\\|INSERT INTO .*auth.*users' backup.sql\n",[17,222,220],{"__ignoreMap":135},[10,224,225],{},"Der erste sagt, ob das Schema die Datei überhaupt erreicht hat. Der zweite\nsagt, ob die Personen es getan haben. Eine Null von beiden, bei einer Datei,\nauf die du gezählt hast, findest du besser heute heraus als an dem Morgen, an\ndem du sie brauchst.",[10,227,228,229,231,232,62],{},"Suche bei der Gelegenheit auch nach ",[17,230,74],{}," und lies genau, was du findest.\nDiese Zeilen sind die Liste deiner hochgeladenen Dateien, und das ist etwas\nanderes als die Dateien, denn\n",[77,233,235],{"href":234},"\u002Fblog\u002Fsupabase-storage-backup","kein Datenbank-Backup auf irgendeinem Tarif enthält die",[39,237,239],{"id":238},"wie-exportiere-ich-supabase-auth-nutzer","Wie exportiere ich Supabase-auth-Nutzer?",[10,241,242],{},"Mit dem Datenbefehl, der ein anderer Befehl ist als der, der das Schema\nschreibt.",[10,244,245,246,251],{},"Supabases\n",[77,247,250],{"href":248,"rel":249},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fmigrating-within-supabase\u002Fbackup-restore",[81],"Anleitung zu Backup und Wiederherstellung","\nveröffentlicht das Backup als drei Dateien, und es lohnt sich, sie zusammen zu\nsehen, weil die Form davon die Antwort ist:",[127,253,256],{"className":254,"code":255,"language":132},[130],"supabase db dump --db-url \"postgresql:\u002F\u002F…\" -f roles.sql --role-only\nsupabase db dump --db-url \"postgresql:\u002F\u002F…\" -f schema.sql\nsupabase db dump --db-url \"postgresql:\u002F\u002F…\" -f data.sql --use-copy --data-only \\\n  -x \"storage.buckets_vectors\" -x \"storage.vector_indexes\"\n",[17,257,255],{"__ignoreMap":135},[10,259,260],{},"Die zweite Zeile ist die, die allein ausgeführt wird. Die dritte ist die mit\ndeinen Nutzern darin.",[10,262,263,264,266],{},"Diese beiden Tatsachen sehen aus wie ein Widerspruch und sind keiner. Der Satz\nauf Supabases Referenzseite über das Ausschließen von ",[17,265,19],{}," beschreibt den\nSchema-Dump, und der Daten-Dump läuft auch durch dieses Schema.",[10,268,269],{},"Willst du nur die Konten, dann benenne das Schema und du bekommst allein diese\nSchublade:",[127,271,274],{"className":272,"code":273,"language":132},[130],"supabase db dump --db-url \"postgresql:\u002F\u002F…\" -f users.sql --data-only --use-copy --schema auth\n",[17,275,273],{"__ignoreMap":135},[10,277,278,285,286,288],{},[25,279,280,281,284],{},"Bevor du dich auf eines davon verlässt, hänge ",[17,282,283],{},"--dry-run"," an und lies, was\nzurückkommt."," Es druckt den ",[17,287,107],{},"-Befehl, den das Werkzeug ausführen\nwürde, ohne ihn auszuführen, sodass du selbst siehst, welche Schemas auf deiner\ninstallierten Version enthalten und welche ausgeschlossen sind. Lies diese\nAusgabe einmal und du musst nie wieder diesem Artikel glauben, oder\nirgendeinem anderen, was zählt, weil die Flags sich zwischen Releases bewegen\nund die Datei so oder so gleich aussieht.",[10,290,291,292,299],{},"Es gibt auch den direkten Weg, und\n",[77,293,295,296,298],{"href":294},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","dafür ist ein schlichtes ",[17,297,107],{}," da",":\nbenenne die Schubladen, die du willst, und es nimmt sie.",[127,301,304],{"className":302,"code":303,"language":132},[130],"pg_dump \"postgresql:\u002F\u002F…\" --schema public --schema auth --schema storage \\\n  --no-owner --file backup.sql\n",[17,305,303],{"__ignoreMap":135},[10,307,308,309,311],{},"Eines noch zur Schema-Datei, weil es erklärt, warum das überhaupt aufgeteilt\nist. Ein neues Supabase-Projekt kommt mit einem bereits gebauten ",[17,310,19],{},"-Schema,\nin der Version, die der Anmeldedienst heute fährt. Die Version deines alten\nProjekts darüberzuspielen würde einen älteren Entwurf auf einen funktionierenden\nlegen. Hinüberbringen willst du den Inhalt des Gästebuchs, und den hält die\nDatendatei.",[39,313,315],{"id":314},"was-beim-zurückspielen-der-nutzer-kaputtgeht","Was beim Zurückspielen der Nutzer kaputtgeht",[10,317,318],{},"Zwei Dinge, und Supabase dokumentiert beide.",[10,320,321,324],{},[25,322,323],{},"Trigger, die eine Spalte zweimal verschlüsseln können."," Der\nWiederherstellungsbefehl in Supabases Anleitung hat mittendrin eine Anweisung,\ndie man leicht für Beiwerk hält:",[127,326,329],{"className":327,"code":328,"language":132},[130],"psql \\\n  --single-transaction \\\n  --variable ON_ERROR_STOP=1 \\\n  --file roles.sql \\\n  --file schema.sql \\\n  --command 'SET session_replication_role = replica' \\\n  --file data.sql \\\n  --dbname \"postgresql:\u002F\u002F…\"\n",[17,330,328],{"__ignoreMap":135},[10,332,333],{},"Diese mittlere Zeile schaltet die Trigger für die Dauer ab, und die Anleitung\nsagt, sie ist dafür da, Spalten beim Einspielen nicht ein zweites Mal\nverschlüsseln zu lassen. Spiel eine Datendatei ohne sie ein, und die Passwörter\nkommen bereits verwürfelt an von einem Vorgang, der schon auf sie angewendet\nworden war, und nichts danach macht das rückgängig.",[10,335,336,339,340,343,344,347,348,351,352,355],{},[25,337,338],{},"Eigentümer und Rechte, die das Einspielen anhalten."," Ein Dump aus einem\nSupabase-Projekt trägt Zeilen, die sich auf Rollen beziehen, an die dich das\nneue Projekt nicht lässt. Supabases Hinweise zur Fehlersuche für dieselbe\nAnleitung sagen, jede Zeile mit ",[17,341,342],{},"ALTER ... OWNER TO \"supabase_admin\""," in\n",[17,345,346],{},"schema.sql"," auszukommentieren, und eine bestimmte Zeile\n",[17,349,350],{},"GRANT \"postgres\" TO \"cli_login_postgres\""," in ",[17,353,354],{},"roles.sql",". Beides ist eine\nTextänderung vor dem Start, und beides hält das Einspielen an, mit der Zeile,\nan der es hängen blieb, auf deinem Bildschirm.",[39,357,359],{"id":358},"müssen-sich-meine-nutzer-neu-anmelden","Müssen sich meine Nutzer neu anmelden?",[10,361,362],{},"Ihre Passwörter kommen mit. Ihre Sitzungen nicht, außer du nimmst noch etwas\nmit.",[10,364,365,366,368,369,374],{},"Supabase sagt, du kannst jede Tabelle im ",[17,367,19],{},"-Schema migrieren,\n",[77,370,373],{"href":371,"rel":372},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Ftroubleshooting\u002Fmigrating-auth-users-between-projects",[81],"Nutzer und ihre gehashten Passwörter eingeschlossen",",\nsodass niemand ein Passwort zurücksetzen muss, das er schon hatte. Kein\nPasswort ist dabei an irgendeiner Stelle lesbar; was umzieht, ist sein Hash.",[10,376,377,378,381,382,385,386,62],{},"Eine Sitzung ist etwas anderes. Sie wird durch ein Token belegt, das mit dem\neigenen JWT-Secret deines Projekts signiert wurde, und jedes Projekt hat sein\neigenes. Supabase sagt, dass jedes Token, das schon im Browser von jemandem\nliegt, ungültig wird und die Person sich neu anmelden muss, wenn das neue\nProjekt mit einem anderen Secret signiert. Du kannst das vermeiden, indem du\ndas Secret des alten Projekts im neuen setzt, und auf derselben Seite steht\nder Preis dafür: Ein Wechsel des JWT-Secrets erzeugt die ",[17,379,380],{},"anon","- und\n",[17,383,384],{},"service_role","-Schlüssel dieses Projekts neu, sodass deine App die neuen\nbekommen muss, bevor sie mit irgendetwas reden kann. Welcher Schlüssel welcher\nist, und welcher davon überhaupt in deine App gehört, ist\n",[77,387,389],{"href":388},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","das, worüber du sicher sein willst, bevor du einen von beiden einfügst",[10,391,392,393,395],{},"Die ehrliche Fassung lautet also, dass eine Wiederherstellung meist alle einmal\nzur Anmeldung bittet. Das ist eine Support-Mail. Es ist kein verlorenes Konto,\nund der Unterschied zwischen beidem ist, ob das ",[17,394,19],{},"-Schema in deiner Datei\nwar.",[10,397,398,399,402],{},"Drei Dinge sind trotzdem nicht darin, was immer du mit den Flags machst. Deine\nhochgeladenen Dateien, weil Storage die Bytes außerhalb der Datenbank hält und\n",[77,400,401],{"href":234},"kein Dump auf irgendeinem Tarif sie erreicht",".\nDeine Edge Functions, die ein eigener Download sind und deren Import Maps\nlaut Supabase nicht automatisch geholt werden. Und die Einstellungen deines\nProjekts, die Konfiguration und keine Daten sind und von Hand neu eingetragen\nwerden.",[39,404,406],{"id":405},"was-diese-woche-zu-tun-ist","Was diese Woche zu tun ist",[408,409,410],"key-takeaways",{},[411,412,413,419,429,435,442],"ul",{},[165,414,415,416,418],{},"Nimm die neueste Backup-Datei, die du hast, und suche darin nach ",[17,417,19],{},". Gruppe eins, zwei oder drei aus dem Abschnitt oben, und du weißt es in einer Minute.",[165,420,421,422,424,425,428],{},"Ist es Gruppe eins oder zwei, zieh heute einen Daten-Dump mit ",[17,423,117],{}," und ",[17,426,427],{},"--use-copy",", und leg ihn neben die Schema-Datei statt an ihre Stelle. Du brauchst beide.",[165,430,431,432,434],{},"Häng ",[17,433,283],{}," an den Befehl, für den du dich entscheidest, und lies die Ausgabe einmal, damit du weißt, welche Schubladen deine Version des Werkzeugs nimmt.",[165,436,437,438,441],{},"Schreib dir die Reihenfolge der Wiederherstellung dorthin, wo du sie wiederfindest: roles, dann schema, dann ",[17,439,440],{},"SET session_replication_role = replica",", dann data.",[165,443,444],{},"Spiel einmal in ein Wegwerf-Projekt ein und versuch dann, dich als echter Nutzer anzumelden. Das ist die einzige Prüfung, die das testet, worum es in diesem Artikel geht.",[10,446,447,448,451],{},"Das einmal von Hand zu tun lohnt sich, egal wie du am Ende sicherst, denn\nsolange du keinen Dump geöffnet hast, hattest du immer nur das Wort Backup. Ob\ndu es weiter von Hand machst, ist eine eigene Frage, und\n",[77,449,450],{"href":294},"die drei Wege und was jeder kostet","\nist der Ort, an dem die beantwortet wird.",[39,453,455],{"id":454},"wo-reeve-care-hineinpasst","Wo Reeve Care hineinpasst",[10,457,458],{},"Care zieht die Kopie nach Plan, und das Gästebuch ist darin.",[88,460],{"alt":461,"caption":462,"src":463},"Eine Reeve-Care-Fläche mit zwei Reihen. In der ersten enthält ein gestrichelter Konto-Umriss eine Datenbank und ein Personenregister, und beide verlassen ihn auf einem Pfeil hinein in eine verschlossene Datei, die durch eine Lupe zurückgelesen und abgehakt wird. In der zweiten schickt eine Karte mit einer Schaltfläche die Datenbankzeilen zurück ins Konto, während das Register darin erleuchtet und unberührt bleibt.","Die Kopie hält deine Tabellen und deine Konten. Die Wiederherstellungs-Schaltfläche spielt deine Tabellen zurück und lässt die Konten, wo sie sind.","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcare-the-register-comes-too-1600x560.png",[411,465,466,477,487,493],{},[165,467,468,170,471,473,474,476],{},[25,469,470],{},"Deine Konten sind in der Kopie.",[17,472,19],{},"-Schema reist mit deinen eigenen Tabellen, denn eine Kopie einer Supabase-App ohne ihre Nutzer ist eine Kopie der Hälfte. Die ",[17,475,74],{},"-Zeilen, die deine Dateien beschreiben, kommen mit, und die Dateien selbst ebenfalls, sobald du eine Storage-Zugangsinformation hinterlegst.",[165,478,479,482,483,486],{},[25,480,481],{},"Die Wiederherstellungs-Schaltfläche spielt deine Tabellen zurück und lässt die Konten in Ruhe."," ",[17,484,485],{},"auth.users"," über ein laufendes Projekt zu spielen meldet alle ab und bringt Konten zurück, die jemand absichtlich gelöscht hat, also bleibt das eine Anfrage mit einem Menschen daran. Ein Druck auf die Schaltfläche in Panik kann also nicht die Kunden abmelden, denen du helfen wolltest.",[165,488,489,492],{},[25,490,491],{},"Die Kopie wird zurückgelesen, bevor sie als gezogen gilt."," Das Datum in deinem Dashboard ist der letzte Zeitpunkt, an dem eine Kopie geöffnet und geprüft wurde, nie der Start eines Jobs oder die Ankunft einer Datei.",[165,494,495,498],{},[25,496,497],{},"Eine Wiederherstellung macht zuerst eine Aufnahme des jetzigen Stands",", sodass sie selbst ein Rückgängig hat.",[10,500,501,502,506],{},"Care beginnt bei €49 im Monat für eine App. Das ist ein Listenpreis, und die\n",[77,503,505],{"href":504},"\u002Fpricing","Preisseite"," liegt manchmal unter der Zahl hier und nie darüber.",[10,508,509,510,514],{},"Wie eine Kopie gezogen, geprüft und zurückgespielt wird, ist Schritt für\nSchritt auf der ",[77,511,513],{"href":512},"\u002Fsupabase-backups","Supabase-Backups-Seite"," gezeichnet.",[10,516,517,518,520,521,525],{},"Bevor du diesen Tab schließt, öffne deinen neuesten Dump und suche darin nach\n",[17,519,19],{},". Das ist der schnellste Weg herauszufinden, ob dir das, was du Backup\ngenannt hast, deine Kunden zurückgeben würde, und wenn die Antwort nein lautet,\nist ",[77,522,524],{"href":523},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","eine richtige Wiederherstellung","\ndas Nächste zum Lesen.",{"title":135,"searchDepth":527,"depth":527,"links":528},3,[529,531,532,533,534,535,536,537],{"id":41,"depth":530,"text":42},2,{"id":95,"depth":530,"text":96},{"id":153,"depth":530,"text":154},{"id":238,"depth":530,"text":239},{"id":314,"depth":530,"text":315},{"id":358,"depth":530,"text":359},{"id":405,"depth":530,"text":406},{"id":454,"depth":530,"text":455},"Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcover-1200x630.png","Eine versiegelte Archivdatei mit drei Datenzeilen, daneben ein liniertes Personenregister, das draußen steht und angeschnitten wird.","Führe supabase db dump allein aus und du bekommst die Form deiner Datenbank und keine einzige Zeile, und das auth-Schema mit deinen Nutzern fehlt ganz.",false,"md",[545,547,550,552,555,558],{"q":42,"a":546},"Das hängt davon ab, welcher Befehl die Datei geschrieben hat. Deine Nutzer liegen in einem Schema namens auth, das dem Anmeldedienst gehört. Ein blankes supabase db dump lässt auth weg und enthält überhaupt keine Zeilen, weil der Standard-Dump nur das Schema ist. Die Datenhälfte des Dumps, ein zweiter Befehl mit dem Flag --data-only, ist die, die deine Nutzer trägt. Genau deshalb veröffentlicht Supabase das Backup als drei Befehle.",{"q":548,"a":549},"Warum fehlt auth.users in meinem Dump?","Weil du mit ziemlicher Sicherheit den Schema-Dump ausgeführt hast. Supabase dokumentiert, dass der Befehl die verwalteten Schemas ausschließt, dass zu den ignorierten auth und storage gehören, und dass der Standard-Dump gar keine Daten enthält. Das ist Absicht: Ein neues Projekt kommt mit einem eigenen, vom Anmeldedienst gebauten auth-Schema, und eine ältere Kopie darüberzuspielen würde etwas ersetzen, das funktioniert. Umziehen soll der Inhalt, und den trägt der Daten-Dump.",{"q":239,"a":551},"Mit dem Datenbefehl, der vom Schemabefehl getrennt ist. Führe supabase db dump mit --data-only und --use-copy aus, um eine Datendatei zu schreiben, und die auth-Tabellen kommen mit. Willst du nur die Konten, dann füge --schema auth hinzu und bekommst eine Datei mit ausschließlich diesem Schema. Bevor du dich auf eines von beiden verlässt, hänge --dry-run an: Es druckt den pg_dump-Befehl, den die CLI ausführen würde, ohne ihn auszuführen, sodass du auf deiner Version nachlesen kannst, welche Schemas enthalten sind.",{"q":553,"a":554},"Überstehen Passwörter eine Supabase-Wiederherstellung?","Ja, wenn das auth-Schema in der Datei war. Supabase sagt, du kannst jede Tabelle im auth-Schema migrieren, gehashte Passwörter eingeschlossen, sodass niemand sie zurücksetzen oder neu anlegen muss. Ruinieren kann sie nur eines: die Daten einzuspielen, ohne vorher die Trigger abzuschalten. Deshalb setzt Supabase SET session_replication_role = replica mitten in seinen eigenen Wiederherstellungsbefehl. Lässt du die Zeile weg, wird eine bereits verschlüsselte Spalte beim Einspielen ein zweites Mal verschlüsselt.",{"q":556,"a":557},"Bleiben meine Nutzer nach einer Wiederherstellung angemeldet?","Nicht, wenn das neue Projekt mit einem anderen Secret signiert. Eine Sitzung wird durch ein Token belegt, das mit dem JWT-Secret des Projekts signiert wurde, und Supabase sagt, dass ein neues Secret vorhandene Tokens ungültig macht, sodass sich alle neu anmelden. Du kannst das alte Secret mitnehmen und alle angemeldet lassen, aber Supabase sagt auch, dass ein Wechsel des JWT-Secrets die anon- und service_role-Schlüssel in diesem Projekt neu erzeugt, sodass deine App die neuen braucht.",{"q":559,"a":560},"Was lässt ein Supabase-Dump sonst noch weg?","Deine hochgeladenen Dateien, vor allem. Storage hält für jede Datei eine Zeile in deiner Datenbank und die Datei selbst woanders, also enthält kein Datenbank-Dump auf keinem Tarif die Bytes. Edge Functions sind ein eigener Download, und Supabase merkt an, dass Import Maps und deno.json-Dateien nicht automatisch geholt werden. Projekteinstellungen, Auth-Provider und Secrets sind Konfiguration und keine Daten und liegen im Dashboard, also werden sie in einem neuen Projekt von Hand neu eingetragen.","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",[563,564,565,566,567,568,569,570],"supabase backup auth users","supabase nutzer exportieren","supabase db dump auth schema","supabase auth nutzer migrieren","supabase backup ohne nutzer","supabase auth.users export","supabase nutzer wiederherstellen","supabase dump auth fehlt",{},true,"\u002Fblog\u002Fsupabase-backup-auth-users","2026-09-23",{"title":5,"description":541},"blog\u002Fsupabase-backup-auth-users",[578,579,580],"Supabase veröffentlicht sein Backup als drei Befehle. Den, den du vermutlich ausgeführt hast, ist der zweite, und deine Nutzer stecken im dritten.","Führe supabase db dump ohne weitere Flags aus und du bekommst die Form deiner Tabellen und nichts von ihrem Inhalt, und das auth-Schema mit deinen Nutzern fehlt sogar darin.","Eine einzige Suche in der Datei, die du schon hast, sagt dir, welches von drei Dingen du in der Hand hältst.","ijwk6fJ1LHFj7_Wcf9oUnRvKzvNaY5rEb7A-ubwxmgA",[583,590,596,602,608,614,620,626,632,638,644,650,656,662,668,674,679,685,691,692,698,704,710,716,722,728,734,740,745,751,757,763,769,775,781,787,793,799,805,811,817,823,829,835,841,847,853,859,865,870,876,882,888,894,899,905,911,917,922,927],{"path":584,"title":585,"description":586,"published":587,"category":588,"image":589,"draft":542},"\u002Fblog\u002Fbase44-security-scan","Base44 Security Scan: das, was nur er sehen kann","Der Base44 Security Scan prüft sieben Arten von Problemen von innen. Hier ist die Hälfte, die er liest und sonst niemand, und die Hälfte, die er nie ansieht.","2026-10-10","Sicherheitsgrundlagen","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":591,"title":592,"description":593,"published":594,"category":588,"image":595,"draft":542},"\u002Fblog\u002Fapi-key-leaked-what-to-do","Dein API-Key wurde geleakt. Die richtige Reihenfolge","Ein API-Key wurde geleakt und du weißt nicht, was zuerst zu tun ist. Nicht jeder Key im Frontend ist ein Leck, und die Reihenfolge zählt mehr als das Tempo.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":597,"title":598,"description":599,"published":600,"category":588,"image":601,"draft":542},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" ohne RLS abzuschalten","\"Infinite recursion detected in policy for relation\" heißt: Deine Policy hat die Tabelle gefragt, die sie schützt. So brichst du den Kreis.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":603,"title":604,"description":605,"published":606,"category":588,"image":607,"draft":542},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" in Supabase, und die falsche Lösung","\"No API key found in request\" heißt, deine Supabase-Anfrage kam ohne Schlüssel an. Die meisten Antworten zeigen stattdessen auf deine Datenbankregeln.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":609,"title":610,"description":611,"published":612,"category":588,"image":613,"draft":542},"\u002Fblog\u002Fis-base44-safe","Ist Base44 sicher? Was 5.442 echte Base44-Apps zeigten","Ist Base44 sicher? Wir haben 5.442 laufende Base44-Apps mit neun Checks geprüft. Fast alle bekamen ein B, aus Gründen, die der Inhaber nie gewählt hat.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":615,"title":616,"description":617,"published":618,"category":588,"image":619,"draft":542},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","API-Schlüssel verstecken: ab in eine Supabase Edge Function","Einen API-Schlüssel verstecken heißt, ihn aus dem Browser zu nehmen. Eine Supabase Edge Function ist der kleinste Ort dafür, und zwei Schritte zählen mehr.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":621,"title":622,"description":623,"published":624,"category":588,"image":625,"draft":542},"\u002Fblog\u002Fenv-file-exposed-on-your-server","Ist deine .env-Datei öffentlich? Zwölf Pfade zum Prüfen","Ist deine .env-Datei auf deinem eigenen Webserver öffentlich? Zwölf Adressen sagen es dir, und ein Treffer heißt: alles darin ist längst öffentlich.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":627,"title":628,"description":629,"published":630,"category":588,"image":631,"draft":542},"\u002Fblog\u002Fis-v0-safe","v0-Sicherheit: alle 1.790 gescannten v0-Apps bekamen ein A","v0-Sicherheit, gemessen an 1.790 laufenden v0-Apps: Jede bekam ein A. Nur 17 nannten eine Datenbank, und genau das misst das A vor allem.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":633,"title":634,"description":635,"published":636,"category":588,"image":637,"draft":542},"\u002Fblog\u002Fis-bolt-safe","Ist Bolt sicher? Was 1.123 echte Bolt-Apps zeigten","Ist Bolt sicher? Wir haben 1.123 laufende Bolt-Apps mit neun Checks geprüft. Das Hosting war sauber. Die Funde waren Schlüssel und offene Tabellen in den Apps.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":639,"title":640,"description":641,"published":642,"category":588,"image":643,"draft":542},"\u002Fblog\u002Fis-supabase-down-or-your-app","Ist Supabase down oder liegt es an deiner App? So erkennst du es","Ist Supabase down oder liegt es an deiner App? Ein pausiertes Projekt, eine volle Datenbank und ein eigener Fehler sehen gleich aus. Vier Prüfungen helfen.","2026-10-01","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",{"path":645,"title":646,"description":647,"published":648,"category":588,"image":649,"draft":542},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","Verschlüsselt Supabase meine Daten? Ja. Wovor das schützt","Verschlüsselt Supabase Daten? Ja: AES-256 im Ruhezustand, TLS bei der Übertragung, SOC 2 und ISO 27001. Was jedes abdeckt und welches Leck keines stoppt.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":651,"title":652,"description":653,"published":654,"category":588,"image":655,"draft":542},"\u002Fblog\u002Fsupabase-free-plan-limits","Supabase Gratis-Tarif: die Limits und was an jedem passiert","Die Limits des Supabase-Gratis-Tarifs: 500 MB Datenbank, 5 GB Egress und keine Backups. Was an jeder Grenze passiert und was $25 für Pro ändern.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":657,"title":658,"description":659,"published":660,"category":538,"image":661,"draft":542},"\u002Fblog\u002Ftest-your-supabase-backup","Teste dein Supabase-Backup, bevor du es brauchst","So testest du dein Supabase-Backup: in ein Übungsprojekt einspielen, Zeilen zählen, anmelden und die Zeile suchen, die einer abgeschnittenen Datei fehlt.","2026-09-28","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":663,"title":664,"description":665,"published":666,"category":538,"image":667,"draft":542},"\u002Fblog\u002Fsupabase-backup-github-action","Kostenloses Supabase-Backup per GitHub Action, mit Haken","Eine Supabase-Backup-GitHub-Action kostet nichts und passt für viele Apps. Der Workflow, der richtige Connection String und das Egress pro Lauf.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":669,"title":670,"description":671,"published":672,"category":538,"image":673,"draft":542},"\u002Fblog\u002Fdownload-your-supabase-backup","Warum du dein Supabase-Backup nicht herunterladen kannst","Dein Supabase-Backup kannst du auf aktuellen Projekten nicht herunterladen, weil die Tageskopie physisch ist. Wie du es prüfst und selbst eine Kopie hältst.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":675,"title":676,"description":677,"published":672,"category":588,"image":678,"draft":542},"\u002Fblog\u002Fsupabase-permission-denied-for-table","Supabase \"permission denied for table\": der fehlende Grant","Ab 30. Oktober antwortet eine neue Supabase-Tabelle mit \"permission denied for table\", bis du Zugriff erteilst. Der Grant aus der E-Mail ist die halbe Lösung.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":680,"title":681,"description":682,"published":683,"category":588,"image":684,"draft":542},"\u002Fblog\u002Fopen-api-endpoint-exposed","Ist ein offener API-Endpunkt ein Sicherheitsproblem? Sieh ins JSON","Dein Scan hat einen offenen API-Endpunkt gemeldet. Ob das zählt, hängt davon ab, was zurückkam, und die meisten hier gehörten der Plattform.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":686,"title":687,"description":688,"published":689,"category":588,"image":690,"draft":542},"\u002Fblog\u002Flovable-security-scan","Lovable Security Scan: das Eine, was er nicht beweist","Lovable Security Scan: was Quick Scan und Deep Scan prüfen, wann welcher läuft, und das Eine, was kein Scan von innen beweisen kann.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":573,"title":5,"description":541,"published":574,"category":538,"image":561,"draft":542},{"path":693,"title":694,"description":695,"published":696,"category":588,"image":697,"draft":542},"\u002Fblog\u002Fdomain-and-certificate-expiry","Domain abgelaufen, Website offline: was jetzt passiert","Deine Domain ist abgelaufen und deine Website ist offline. Welche Frist jetzt läuft, warum das Zertifikat das kleinere Problem ist, und wie du beides prüfst.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":699,"title":700,"description":701,"published":702,"category":588,"image":703,"draft":542},"\u002Fblog\u002Fis-lovable-safe","Ist Lovable sicher? Was 18.554 echte Lovable-Apps zeigten","Ist Lovable sicher? Wir haben 18.554 laufende Lovable-Apps mit neun Checks geprüft. Die Plattform war die sauberste von fünf. Die Funde saßen in den Apps.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":705,"title":706,"description":707,"published":708,"category":588,"image":709,"draft":542},"\u002Fblog\u002Fvibe-coded-app-security-checklist","Die Sicherheits-Checkliste für Vibe-Coding, in neun Prüfungen","Eine Sicherheits-Checkliste für Vibe-Coding mit neun Punkten, die jeder von außen an deiner Live-App nachprüfen kann, jeder mit einem Test in einer Zeile.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":711,"title":712,"description":713,"published":714,"category":588,"image":715,"draft":542},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Ein geheimer Stripe-Schlüssel im Frontend kann Geld bewegen","Ein geheimer Stripe-Schlüssel im Frontend kann erstatten, abbuchen und jeden Kundendatensatz lesen, den du hast. Dein pk_live_-Schlüssel gehört dorthin.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":717,"title":718,"description":719,"published":720,"category":588,"image":721,"draft":542},"\u002Fblog\u002Fvite-and-next-public-env-vars","Vite-Env-Variablen offengelegt: der Präfix heißt veröffentlichen","Vite-Env-Variablen offengelegt: Deine App hat getan, was der Präfix verlangt. VITE_ und NEXT_PUBLIC_ heißen veröffentlichen, und die KI kannte den Preis nie.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":723,"title":724,"description":725,"published":726,"category":588,"image":727,"draft":542},"\u002Fblog\u002Fbase44-source-maps","Base44-Sicherheit: was ein Scan meldet und was du ändern kannst","Base44-Sicherheit auf 5.438 gescannten Apps: Drei Befunde auf fast jeder gehören der Plattform, die Source Map ist das Base44-Badge, und deine Liste ist kurz.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":729,"title":730,"description":731,"published":732,"category":588,"image":733,"draft":542},"\u002Fblog\u002Fis-cursor-ai-safe","Ist Cursor AI sicher? Editor, Code und die App, die du veröffentlichst","Ist Cursor AI sicher? Drei Fragen in einer Suche: was Cursor behält, was sein Code falsch macht und ob deine veröffentlichte App offen steht.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":735,"title":736,"description":737,"published":738,"category":588,"image":739,"draft":542},"\u002Fblog\u002Fis-replit-safe","Ist Replit sicher? Was wir in 3.042 Replit-Apps gefunden haben","Ist Replit sicher? Wir haben 3.042 laufende Replit-Apps mit neun externen Checks geprüft. Die Funde saßen in der veröffentlichten App, nicht im Hosting.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":234,"title":741,"description":742,"published":743,"category":538,"image":744,"draft":542},"Supabase Storage Backup: deine Datenbankkopie hat keine Dateien","Ein Supabase Storage Backup ist eine eigene Aufgabe. Datenbank-Backups enthalten die Liste deiner Dateien und keine davon, also bleibt jeder Upload kaputt.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":746,"title":747,"description":748,"published":749,"category":538,"image":750,"draft":542},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Supabase Point-in-Time Recovery: Kosten und Grenzen","Supabase Point-in-Time Recovery spult deine Datenbank auf jede Sekunde der letzten Woche zurück. $100 im Monat zusätzlich zu Pro, und nur die Datenbank.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":752,"title":753,"description":754,"published":755,"category":538,"image":756,"draft":542},"\u002Fblog\u002Fsupabase-project-paused-recover","Supabase-Projekt pausiert? Deine Daten sind noch da","Supabase hat dein Projekt nach einer Woche ohne Aktivität pausiert. Gelöscht ist nichts, Wiederherstellen steht neben dem Namen, und du hast ein Jahr.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":758,"title":759,"description":760,"published":761,"category":588,"image":762,"draft":542},"\u002Fblog\u002Fsafest-ai-app-builder","Welcher KI-App-Builder ist am sichersten? 30.998 Apps im Test","Welcher KI-App-Builder ist am sichersten? Wir haben 30.998 aktive Apps von Lovable, Base44, Replit, v0 und Bolt gescannt. Der Builder entscheidet das nicht.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":764,"title":765,"description":766,"published":767,"category":588,"image":768,"draft":542},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Row Level Security für jede Supabase-Tabelle aktivieren und prüfen","Row Level Security in Supabase ohne Policy sperrt eine Tabelle komplett. Eine Policy ohne den Schalter bringt gar nichts. Hier ist das SQL, und der Test.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":770,"title":771,"description":772,"published":773,"category":588,"image":774,"draft":542},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": was die Warnung übersieht","Supabase meldet \"RLS disabled in public\" als Fehler. Zur Lese-Policy, die deine Tabelle genauso offen lässt, sagt der Advisor gar nichts.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":776,"title":777,"description":778,"published":779,"category":588,"image":780,"draft":542},"\u002Fblog\u002Frotate-supabase-service-role-key","Geleakten Supabase-service_role-Schlüssel richtig tauschen","Supabase sagt: erst das Leck schließen. Andere Anleitungen: sofort tauschen. Was richtig ist, hängt davon ab, wohin dein service_role-Schlüssel gelangt ist.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":782,"title":783,"description":784,"published":785,"category":588,"image":786,"draft":542},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Vibe-Coding-Security-Scanner im Vergleich, unserer eingeschlossen","Der beste Vibe-Coding-Security-Scanner hängt an drei Fragen, die keine Funktionsliste beantwortet. Zehn Tools im Vergleich, mit Preisen und unseren Lücken.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":788,"title":789,"description":790,"published":791,"category":588,"image":792,"draft":542},"\u002Fblog\u002Fsupabase-security-checker","Supabase Security Checker: die fünf Prüfungen selbst machen","Ein Supabase Security Checker liest deine veröffentlichte App statt deiner Projekteinstellungen. Hier sind die fünf Prüfungen und wie du jede selbst ausführst.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":794,"title":795,"description":796,"published":797,"category":588,"image":798,"draft":542},"\u002Fblog\u002Fvibe-coding-security-scanner","Vibe-Coding-Security-Scanner: was ein URL-Scan übersieht","Ein Vibe-Coding-Security-Scanner liest deine laufende App von außen. Was das abdeckt, die vier Dinge, die er nicht sehen kann, und wie du das Ergebnis liest.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":800,"title":801,"description":802,"published":803,"category":588,"image":804,"draft":542},"\u002Fblog\u002Fmissing-security-headers","Fehlende Sicherheitsheader: wann sie wirklich zählen","Fehlende Sicherheitsheader ist unser häufigster Befund. Wogegen sie schützen, und wann sie die unwichtigste Zeile in deinem Bericht sind.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":806,"title":807,"description":808,"published":809,"category":588,"image":810,"draft":542},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Dein OpenAI-API-Schlüssel liegt im Frontend. Tausch ihn aus.","Ein OpenAI-API-Schlüssel im Frontend lässt sich an keine Domain binden. Tausch ihn heute, leg den Aufruf hinter deinen Server und begrenze das Budget.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":812,"title":813,"description":814,"published":815,"category":588,"image":816,"draft":542},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","API-Schlüssel im Frontend: was 30.998 Apps wirklich ausliefern","Ein API-Schlüssel im Frontend ist meistens ein Google-Maps-Schlüssel. Wir haben 30.998 aktive Vibe-Coding-Apps gescannt und gezählt, was wirklich austritt.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":818,"title":819,"description":820,"published":821,"category":538,"image":822,"draft":542},"\u002Fblog\u002Fsupabase-backup-tools-compared","Supabase-Backup-Tools im Vergleich, unseres eingeschlossen","Vier Arten von Supabase-Backup-Tool, was jedes wirklich kopiert und wann eine kostenlose GitHub Action jeden Anbieter schlägt, uns eingeschlossen.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":824,"title":825,"description":826,"published":827,"category":588,"image":828,"draft":542},"\u002Fblog\u002Freplit-secrets-explained","Secrets in Replit nutzen, und was trotzdem veröffentlicht wird","Secrets in Replit nutzen: anlegen, auslesen und die zwei Gründe beheben, warum undefined zurückkommt. Dazu die Schlüssel, die das Werkzeug nicht schützt.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":830,"title":831,"description":832,"published":833,"category":538,"image":834,"draft":542},"\u002Fblog\u002Fback-up-supabase-free-tier","Supabase Gratis-Tarif: Backup ohne Terminal selbst machen","Im Supabase Gratis-Tarif gibt es keine Backups, die Kopie musst du selbst machen. Wie das im Dashboard geht und was der CSV-Weg auslässt.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":836,"title":837,"description":838,"published":839,"category":588,"image":840,"draft":542},"\u002Fblog\u002Fis-supabase-secure","Ist Supabase sicher? Ja. Dein Projekt ist eine eigene Frage","Ist Supabase sicher? Die Plattform ist auditiert, verschlüsselt und pentestet. Supabase schreibt selbst auf, wo das aufhört und deine Einstellungen anfangen.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":842,"title":843,"description":844,"published":845,"category":588,"image":846,"draft":542},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Wo du deine Supabase API-Keys findest: anon, service_role, URL","Projekt-URL, anon-Schlüssel und service_role-Schlüssel liegen auf einer Seite im Dashboard. Wo sie ist, und welcher der vier Werte in deine App gehört.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":848,"title":849,"description":850,"published":851,"category":588,"image":852,"draft":542},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","New row violates row-level security policy in Supabase: was jetzt?","\"New row violates row-level security policy\" heißt, Supabase hat einen Schreibvorgang abgelehnt. Die schnelle Lösung öffnet die Tabelle wieder für alle.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":854,"title":855,"description":856,"published":857,"category":588,"image":858,"draft":542},"\u002Fblog\u002Fcors-wildcard-security-risk","Ist eine CORS-Wildcard ein Sicherheitsrisiko? Meist nicht.","Ist eine CORS-Wildcard ein Sicherheitsrisiko? Meist ist sie die Voreinstellung deines Builders und gibt nichts preis, was dein Server nicht ohnehin herausgab.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":860,"title":861,"description":862,"published":863,"category":538,"image":864,"draft":542},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","Supabase Branching ist kein Backup. Es geht nur vorwärts.","Warum Supabase Branching kein Backup ist: Ein Branch startet ohne deine Daten, und ein Merge bringt nur das Schema. Wofür es gut ist und was stattdessen hilft.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":523,"title":866,"description":867,"published":868,"category":538,"image":869,"draft":542},"Supabase-Backup wiederherstellen, und was danach kaputt ist","Wie du ein Supabase-Backup aus dem Dashboard oder aus einer Dump-Datei wiederherstellst, was ersetzt wird und warum die App danach kaputt sein kann.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":871,"title":872,"description":873,"published":874,"category":588,"image":875,"draft":542},"\u002Fblog\u002Fsupabase-storage-bucket-public","Dein Supabase-Storage-Bucket ist öffentlich. Ist das ein Problem?","Ein öffentlicher Supabase-Storage-Bucket heißt: Wer die URL einer Datei hat, kann sie öffnen. Er heißt nicht, dass jemand den Inhalt auflisten darf.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":877,"title":878,"description":879,"published":880,"category":588,"image":881,"draft":542},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Ist ein Google-API-Schlüssel im Frontend ein Problem?","Ein Google-API-Schlüssel im Frontend ist der Fund unseres Scanners Nummer eins, und meistens unbedenklich. Eine kostenlose Einstellung entscheidet darüber.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":883,"title":884,"description":885,"published":886,"category":538,"image":887,"draft":542},"\u002Fblog\u002Fai-agent-deleted-my-database","Ein KI-Agent hat meine Supabase-Daten gelöscht. Was hole ich zurück?","Ein KI-Agent hat Daten aus deiner Datenbank gelöscht. Was du zurückholst, stand schon vorher fest, und die nächsten Minuten entscheiden über den Rest.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":889,"title":890,"description":891,"published":892,"category":588,"image":893,"draft":542},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","Kann jeder deine Supabase-Datenbank lesen? 3.680 Apps im Test","Kann jeder deine Supabase-Datenbank ohne Login lesen? Wir haben 30.998 aktive Apps aus KI-Buildern gescannt und gemessen, wie oft die Antwort ja lautet.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":895,"title":896,"description":897,"published":892,"category":588,"image":898,"draft":542},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source-Maps öffentlich: deine App veröffentlicht ihren Quellcode","Eine öffentliche Source-Map lässt jeden den Originalcode deiner App lesen, Kommentare inklusive. Der 30-Sekunden-Check, und was wirklich zählt.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":900,"title":901,"description":902,"published":903,"category":588,"image":904,"draft":542},"\u002Fblog\u002Fsupabase-new-api-keys","Supabases neue API-Schlüssel: welcher gehört in deine App?","Supabase hat anon und service_role durch öffentliche und geheime Schlüssel ersetzt. Welcher gehört in deine App, und welcher nie?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":906,"title":907,"description":908,"published":909,"category":538,"image":910,"draft":542},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","Sichert Supabase meine Datenbank? Das hängt von deinem Tarif ab.","Sichert Supabase deine Datenbank? Auf bezahlten Tarifen täglich, im Gratis-Tarif gar nicht. So findest du heraus, was du hast und was es nicht abdeckt.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":912,"title":913,"description":914,"published":915,"category":588,"image":916,"draft":542},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","Supabase Row Level Security ist an. Die Tabelle ist trotzdem offen.","Supabase Row Level Security anzuschalten schützt keine Tabelle. Erst deine Policies tun das, und die, die deine App repariert hat, lässt oft alle herein.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":918,"title":919,"description":920,"published":915,"category":538,"image":921,"draft":542},"\u002Fblog\u002Fversion-history-is-not-a-backup","Der Versionsverlauf ist kein Backup. Er holt keine Tabelle zurück.","Lovable und Bolt führen einen Versionsverlauf für deinen Code. Deine Datenbank ist ein eigener Dienst, und ein Rücksprung holt deine Daten nicht zurück.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":294,"title":923,"description":924,"published":925,"category":538,"image":926,"draft":542},"Drei Wege, eine Supabase-Datenbank zu sichern, und was fehlt","Das Dashboard, pg_dump und ein verwalteter Dienst. Was jeder Weg wirklich sichert, was er stillschweigend auslässt und welcher den Kontoverlust übersteht.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":388,"title":928,"description":929,"published":925,"category":588,"image":930,"draft":542},"Welche API-Schlüssel im Frontend sicher sind, und welche nicht","Dein Supabase-anon-Schlüssel darf öffentlich sein. Der service_role-Schlüssel nicht. Er ignoriert jede Regel, die du setzt. So erkennst du den Unterschied.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1791618966337]