[{"data":1,"prerenderedAt":699},["ShallowReactive",2],{"blog-de-where-to-find-supabase-api-keys":3,"blog-index-de":559},{"id":4,"title":5,"body":6,"category":513,"cover":514,"coverAlt":515,"description":516,"draft":517,"extension":518,"faq":519,"image":538,"keywords":539,"meta":547,"navigation":548,"ogTitle":521,"path":549,"published":550,"seo":551,"stem":552,"tldr":553,"updated":557,"__hash__":558},"blog_de\u002Fblog\u002Fwhere-to-find-supabase-api-keys.md","Wo du deine Supabase API-Keys findest: anon, service_role, URL",{"type":7,"value":8,"toc":499},"minimark",[9,22,25,28,33,41,56,59,63,66,77,80,106,109,113,116,230,236,239,243,251,254,274,281,284,288,301,304,322,325,334,338,341,344,356,360,363,366,379,397,402,409,413,416,422,440,450,454,487],[10,11,12,13,17,18,21],"p",{},"Irgendetwas hat nach deinem Supabase-Schlüssel gefragt. Eine Anleitung, ein\nSupport-Thread oder eine KI, der du gesagt hast, sie solle deine App reparieren.\nDu öffnest das Dashboard, findest eine Seite mit einer Adresse und zwei oder\ndrei Schlüsseln mit Namen wie ",[14,15,16],"code",{},"anon"," und ",[14,19,20],{},"service_role",", und jeder davon sieht\naus, als könnte er die Antwort sein.",[10,23,24],{},"Oder es ist die andere Variante. Jemand hat deine Seite geöffnet, F12 gedrückt\nund dir gesagt, ein Schlüssel sei sichtbar. Jetzt willst du dir ansehen, welchen\nSchlüssel diese Person gefunden hat, und weißt nicht, wo er liegt.",[10,26,27],{},"Die meisten Anleitungen fangen auf der Seite mit den API-Keys an. Das setzt\nvoraus, dass du schon weißt, welches Supabase-Projekt deines ist, und genau\ndiesen Schritt hat ein Builder für dich erledigt und nie erklärt.",[29,30,32],"h2",{"id":31},"wo-finde-ich-die-supabase-api-keys","Wo finde ich die Supabase API-Keys?",[10,34,35,36,40],{},"Im Dashboard, in deinem Projekt, unter ",[37,38,39],"strong",{},"Settings → API Keys",".",[10,42,43,44,47,48,51,52,55],{},"Der ganze Weg: bei supabase.com anmelden, dein Projekt aus der Liste wählen,\nlinks in der Seitenleiste ",[37,45,46],{},"Settings"," öffnen, dann ",[37,49,50],{},"API Keys",". Fast jede\nAnleitung und jeder Screenshot nennt diese Seite ",[37,53,54],{},"Settings → API",", weil sie\nbis vor Kurzem so hieß. Es ist dieselbe Seite mit denselben Werten.",[10,57,58],{},"Alles darauf ist eines von zwei Dingen. Eine Adresse, die sagt, wo dein Projekt\nliegt. Oder ein Schlüssel, der entscheidet, was eine Anfrage dort tun darf. Die\nSeite listet beides zusammen auf, in einer Spalte, in derselben Schrift.",[29,60,62],{"id":61},"ich-habe-supabase-nie-eingerichtet-welches-projekt-ist-meins","Ich habe Supabase nie eingerichtet. Welches Projekt ist meins?",[10,64,65],{},"Lies die Adresse, die deine App ohnehin schon benutzt. Die Antwort steckt darin.",[10,67,68,69,72,73,76],{},"Jedes Supabase-Projekt hat eine ",[37,70,71],{},"Referenz",": eine kurze zufällige\nZeichenfolge, die zugleich der erste Teil der Projektadresse ist,\n",[14,74,75],{},"https:\u002F\u002Fyourreference.supabase.co",". Deine App schickt bei jedem Seitenaufruf\neine Anfrage an diese Adresse, die Zeichenfolge steht also längst in deiner App,\nund es ist dieselbe, mit der das Dashboard dein Projekt benennt.",[10,78,79],{},"Drei Orte, an denen du sie findest, ohne jemanden zu fragen:",[81,82,83,90,100],"ul",{},[84,85,86,89],"li",{},[37,87,88],{},"In deinem Builder."," Lovable, Bolt, v0 und die anderen zeigen das verbundene\nSupabase-Projekt irgendwo in den Einstellungen oder im Integrationsbereich\ndeines Projekts.",[84,91,92,95,96,99],{},[37,93,94],{},"In deinem Browser."," Öffne deine Live-App, drücke F12, wechsle auf den Tab\nNetwork und lade die Seite neu. Die Anfragen an irgendetwas mit ",[14,97,98],{},".supabase.co","\ntragen die Referenz in ihrer Adresse.",[84,101,102,105],{},[37,103,104],{},"Im Quelltext der Seite",", falls deine App die Adresse ins HTML schreibt und\nnicht in eine Skriptdatei.",[10,107,108],{},"Melde dich dann bei supabase.com an und gleiche diese Referenz mit deiner\nProjektliste ab. Builder verbinden Supabase über deinen eigenen Account, das\nProjekt liegt also meistens in einem Dashboard, für das du dich einmal\nregistriert und das du nie benutzt hast. Sobald du in einem Projekt bist, steht\ndie Referenz in der Adresszeile des Browsers, und so bestätigst du, dass du im\nrichtigen bist, bevor du etwas herauskopierst.",[29,110,112],{"id":111},"die-vier-dinge-auf-dieser-seite","Die vier Dinge auf dieser Seite",[10,114,115],{},"Eine Adresse und drei Schlüssel. Zwei davon gehören in deine App, zwei verlassen\ndas Dashboard nie.",[117,118,119,138],"table",{},[120,121,122],"thead",{},[123,124,125,129,132,135],"tr",{},[126,127,128],"th",{},"Was du siehst",[126,130,131],{},"Was es ist",[126,133,134],{},"Wohin es gehört",[126,136,137],{},"Wenn es nach außen gerät",[139,140,141,165,188,212],"tbody",{},[123,142,143,149,155,162],{},[144,145,146],"td",{},[37,147,148],{},"Project URL",[144,150,151,152,154],{},"Die Adresse deines Projekts, ",[14,153,75],{},". Sagt wo, nie wer.",[144,156,157],{},[158,159,161],"key-verdict",{"type":160},"safe","In deine App",[144,163,164],{},"Nichts. Sie geht bei jedem Seitenaufruf ohnehin an jeden Besucher.",[123,166,167,176,181,185],{},[144,168,169,172,173],{},[37,170,171],{},"Publishable key"," ",[14,174,175],{},"sb_publishable_…",[144,177,178,179,40],{},"Benennt das Projekt und trägt selbst keine Rechte. Heißt in älteren Projekten ",[14,180,16],{},[144,182,183],{},[158,184,161],{"type":160},[144,186,187],{},"Nichts für sich genommen. Er liest genau das, was deine Row Level Security erlaubt.",[123,189,190,198,203,209],{},[144,191,192,172,195],{},[37,193,194],{},"Secret key",[14,196,197],{},"sb_secret_…",[144,199,200,201,40],{},"Liest und schreibt jede Zeile in jeder Tabelle, egal was deine Regeln sagen. Heißt in älteren Projekten ",[14,202,20],{},[144,204,205],{},[158,206,208],{"type":207},"danger","Nur Server",[144,210,211],{},"Jede Zeile in jeder Tabelle, für jeden, der ihn gefunden hat.",[123,213,214,219,222,227],{},[144,215,216],{},[37,217,218],{},"JWT secret",[144,220,221],{},"Signiert die Tokens, die sagen, wer angemeldet ist. Heißt in neueren Projekten JWT signing keys.",[144,223,224],{},[158,225,226],{"type":207},"Bleibt bei Supabase",[144,228,229],{},"Jemand kann sich ein Token ausstellen, das behauptet, einer deiner Nutzer zu sein, auch ein Administrator.",[231,232],"diagram",{"alt":233,"caption":234,"src":235},"Ein Einstellungsfenster mit vier Zeilen. URL und anon-Schlüssel sind abgehakt und ihre Werte offen zu sehen. Unter einer dicken Linie sind der service_role-Schlüssel und der JWT-Wert durchgestrichen und ihre Werte von Punkten verdeckt.","Vier Werte, eine Seite. Supabase zieht keine Linie dazwischen, und die Punkte über den unteren beiden sind der einzige Hinweis, den du bekommst.","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Ffour-values-one-page-1600x720.png",[10,237,238],{},"Auf der Seite selbst liegt eine Abkürzung. Supabase druckt Projekt-URL und\nöffentlichen Schlüssel dort hin, wo du sie lesen kannst, und verdeckt den\ngeheimen Schlüssel und den JWT-Wert mit Punkten, bis du sie anzeigen lässt. Die\nbeiden, die es verdeckt, sind genau die beiden, die nie in deine App gehören.",[29,240,242],{"id":241},"wo-finde-ich-meine-supabase-projekt-url","Wo finde ich meine Supabase-Projekt-URL?",[10,244,245,246,248,249,40],{},"An zwei Stellen, und eine davon hast du wahrscheinlich gerade vor dir. Das\nDashboard druckt sie oben auf ",[37,247,39],{},", beschriftet mit Project\nURL. Die Adresszeile deines Browsers zeigt dieselbe Zeichenkette, sobald deine\nApp mit Supabase spricht, in der Form ",[14,250,75],{},[10,252,253],{},"Im Code trägt sie einen von drei Namen, und alle drei halten dieselbe\nZeichenkette:",[81,255,256,262,268],{},[84,257,258,261],{},[14,259,260],{},"VITE_SUPABASE_URL"," in einer App mit Vite, was das meiste abdeckt, was Lovable\nund Bolt bauen",[84,263,264,267],{},[14,265,266],{},"NEXT_PUBLIC_SUPABASE_URL"," in einer Next.js-App",[84,269,270,273],{},[14,271,272],{},"SUPABASE_URL"," auf einem Server, in einer Edge Function oder in einem Skript",[10,275,276,277,280],{},"Der mittlere Teil, ",[14,278,279],{},"yourreference",", ist deine Projektreferenz. Das ist die\nZeichenkette, an der das Dashboard dein Projekt erkennt, und die, die du\nabgleichst, wenn du mehrere Projekte hast und nicht weißt, welches zu dieser App\ngehört.",[10,282,283],{},"Sie ist eine Adresse und kein Geheimnis, weshalb sie offen neben dem\nöffentlichen Schlüssel steht.",[29,285,287],{"id":286},"wo-ist-der-service_role-schlüssel-und-was-ist-supabase_service_role_key","Wo ist der service_role-Schlüssel, und was ist SUPABASE_SERVICE_ROLE_KEY?",[10,289,290,291,293,294,296,297,300],{},"Auf derselben Seite wie alles andere. Öffne ",[37,292,39],{}," und suche\ndie Zeile mit ",[14,295,20],{},", auf einem neu angelegten Projekt ",[14,298,299],{},"secret",". Anders\nals die URL und der öffentliche Schlüssel liegt sein Wert hinter einem\nAufdecken-Schalter, bis du danach fragst.",[10,302,303],{},"Dieser Schalter ist der einzige Hinweis, den dir das Dashboard darauf gibt, dass\ndieser hier anders ist, und er verdient Aufmerksamkeit: Supabase verdeckt genau\ndie Werte, die niemals in einen Browser gehören.",[10,305,306,309,310,313,314,317,318,321],{},[14,307,308],{},"SUPABASE_SERVICE_ROLE_KEY"," ist ein Variablenname statt eines zweiten\nSchlüssels: dahinter steht der Wert, den du eben aufgedeckt hast. Du triffst ihn\nin einer ",[14,311,312],{},".env","-Datei, in den Umgebungseinstellungen deines Hosters oder in den\nSecrets einer Edge Function. Entscheidend ist das Präfix davor. Eine Variable\nnamens ",[14,315,316],{},"VITE_SUPABASE_SERVICE_ROLE_KEY"," oder\n",[14,319,320],{},"NEXT_PUBLIC_SUPABASE_SERVICE_ROLE_KEY"," wird in das JavaScript kompiliert, das\ndeine Besucher herunterladen, also ist der Schlüssel mit dem Deploy öffentlich.\nDiese Präfixe sind Anweisungen zu veröffentlichen, keine Versehen.",[10,323,324],{},"Hingehören tut er in eine Edge Function, einen Webhook-Handler, einen\ngeplanten Job oder ein Migrationsskript: überall dort, wo der Code auf einer\nMaschine läuft, die du kontrollierst, und kein Besucher die Datei öffnen kann.\nDieser Schlüssel übergeht Row Level Security vollständig, er liest also jede\nZeile in jeder Tabelle, was deine Regeln auch sagen.",[10,326,327,328,333],{},"Wenn du nicht sicher bist, ob deiner auf dem Server geblieben ist: unser\n",[329,330,332],"a",{"href":331},"\u002Fsecurity-scanner","kostenloser Website-Sicherheitsscanner"," liest deine Live-Seite\nvon außen und benennt die Schlüssel, die er findet, in etwa 20 Sekunden.",[29,335,337],{"id":336},"welchen-schlüssel-braucht-meine-app","Welchen Schlüssel braucht meine App?",[10,339,340],{},"Die Projekt-URL und den öffentlichen Schlüssel. Sonst nichts, niemals.",[10,342,343],{},"Deine App läuft im Browser deiner Besucher und redet von dort aus mit Supabase,\nalso gehen beide Werte von Haus aus an jeden Besucher. Das ist kein Leck und war\nnie eines. Was einen Fremden davon abhält, mit einem öffentlichen Schlüssel\ndeine ganze Datenbank zu lesen, ist Row Level Security: die Regeln, die Zeile\nfür Zeile entscheiden, wer was sehen darf.",[10,345,346,347,351,352,40],{},"Diese Regeln sind also das, was du prüfen solltest, wenn du dir Sorgen machst,\nund\n",[329,348,350],{"href":349},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","sie einzuschalten ist nicht dasselbe wie geschützt zu sein",".\nDie ausführliche Fassung davon, warum ein Schlüssel öffentlich sicher ist, steht\nin\n",[329,353,355],{"href":354},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","welche API-Schlüssel im Frontend sicher sind",[29,357,359],{"id":358},"woher-weiß-ich-welcher-schlüssel-wirklich-in-meiner-app-gelandet-ist","Woher weiß ich, welcher Schlüssel wirklich in meiner App gelandet ist?",[10,361,362],{},"Aus dem Dashboard erfährst du das nicht. Es listet die Schlüssel auf, die dein\nProjekt hat, nicht den, der in deine App gewandert ist.",[10,364,365],{},"Das sind zwei verschiedene Fragen, und nur die zweite kann dir wehtun. Ein\nProjekt kann eine völlig gewöhnliche Einstellungsseite haben und trotzdem seinen\ngeheimen Schlüssel in einer Datei stehen haben, die jeder öffnen kann. Um das zu\nbeantworten, musst du den Schlüssel lesen, der tatsächlich in der App steht.",[10,367,368,172,371,374,375,378],{},[37,369,370],{},"In einem neueren Projekt liest du die ersten Zeichen.",[14,372,373],{},"sb_publishable_"," ist\nder, der dort hingehört. ",[14,376,377],{},"sb_secret_"," ist der, um den du dich heute kümmern\nsolltest.",[10,380,381,172,384,386,387,389,390,393,394,40],{},[37,382,383],{},"In einem älteren Projekt musst du in den Schlüssel hineinschauen.",[14,385,16],{}," und\n",[14,388,20],{}," sind JWTs: drei durch Punkte getrennte Blöcke, deren mittlerer zu\nlesbarem Klartext wird. Darin steht ein Feld ",[14,391,392],{},"role",", und dieses eine Wort ist\nder gesamte Unterschied zwischen beiden.\n",[329,395,396],{"href":354},"Wie du es liest",[231,398],{"alt":399,"caption":400,"src":401},"Links die Einstellungsseite mit vier Werten, wobei die Zeilen anon und service_role hervorgehoben sind. Zwei gestrichelte Linien laufen von diesen beiden Zeilen zusammen in einen einzelnen hervorgehobenen Platz in einem Codeblock rechts, der mit einem Fragezeichen markiert ist.","Das Dashboard zeigt dir, welche Schlüssel es gibt. Welcher davon in deiner App gelandet ist, kann dir nur deine App beantworten.","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fwhat-exists-vs-what-shipped-1600x700.png",[10,403,404,405,40],{},"Wenn du deine App nicht von Hand durchgehen willst: unser kostenloser Scan liest\ndeine Live-Seite von außen und benennt die Schlüssel, die er sehen kann, und ob\ndeine Tabellen einem Fremden antworten, der fragt. Das dauert etwa 20 Sekunden\nund braucht kein Konto: ",[329,406,408],{"href":407},"\u002F#scan","App scannen",[29,410,412],{"id":411},"was-wenn-der-geheime-schlüssel-schon-in-meiner-app-steckt","Was, wenn der geheime Schlüssel schon in meiner App steckt?",[10,414,415],{},"Kümmere dich um den Schlüssel selbst, bevor du Code anfasst, und bei Supabase\nheißt das womöglich nicht, was du erwartest.",[10,417,418,419,421],{},"Der übliche Rat lautet rotieren: neuen Schlüssel erzeugen, alten zurückziehen,\nund der Wert, der nach außen gelangt ist, funktioniert nicht mehr. Für die\nneueren Schlüssel gilt das weiterhin. Ein Projekt kann mehrere\n",[14,420,377],{},"-Schlüssel gleichzeitig halten und sie einzeln zurückziehen, ein\nAustausch bedeutet also keine Minute mehr, in der alles kaputt ist, was ihn\nbenutzt.",[10,423,424,425,431,432,434,435,439],{},"Für das ursprüngliche Paar gilt es überhaupt nicht. Supabase schreibt in den\neigenen Fehlerbehebungs-Notizen, dass sich\n",[329,426,430],{"href":427,"rel":428},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Ftroubleshooting\u002Frotating-anon-service-and-jwt-secrets-1Jq6yd",[429],"nofollow","die alten anon-, service_role- und JWT-Geheimnisse nicht mehr rotieren lassen",".\nEinen geleakten alten ",[14,433,20],{},"-Schlüssel unbrauchbar zu machen heißt: neue\nSchlüssel anlegen, App und Servercode darauf umstellen und dann das alte Paar\ndeaktivieren. ",[329,436,438],{"href":437},"\u002Fblog\u002Fsupabase-new-api-keys","Was diese Migration umfasst",", sind\neine Handvoll Schritte im Dashboard und ein ausgetauschter Wert in deiner App,\nund das geht an einem ruhigen Nachmittag deutlich leichter als an dem Tag, an\ndem du es brauchst.",[441,442,444],"callout",{"type":443},"warn",[10,445,446,449],{},[37,447,448],{},"Den Schlüssel aus deinem Code zu löschen schließt die Tür nicht."," Der alte\nWert steht immer noch in deiner Versionsgeschichte, in jedem Deployment, das du\nseitdem nicht neu gebaut hast, und in der zwischengespeicherten Kopie deiner\nSeite bei allen, die sie geladen haben, solange der Schlüssel aktiv war. Wer\neine dieser Kopien gesichert hat, kann sie morgen gegen deine Datenbank\neinsetzen.",[29,451,453],{"id":452},"was-jetzt-zu-tun-ist","Was jetzt zu tun ist",[455,456,457],"key-takeaways",{},[81,458,459,468,471,481,484],{},[84,460,461,462,464,465,467],{},"Öffne ",[37,463,39],{}," in deinem Projekt. Findest du das Projekt nicht, nimm die Referenz aus ",[14,466,75],{}," und gleiche sie mit deiner Dashboard-Liste ab.",[84,469,470],{},"Trag die Projekt-URL und den öffentlichen Schlüssel in deine App ein. Diese beiden, und sonst nichts.",[84,472,473,474,476,477,480],{},"Lies den Schlüssel, der wirklich in deiner App gelandet ist. ",[14,475,377],{}," vorne, oder ",[14,478,479],{},"\"role\": \"service_role\""," in einem älteren, ist der Fund, um den du dich heute kümmern solltest.",[84,482,483],{},"Steckt ein geheimer Schlüssel in deinem Frontend, mach ihn unbrauchbar, bevor du irgendetwas bearbeitest. In einem alten Projekt heißt das: neue Schlüssel anlegen und das alte Paar deaktivieren, und dafür gibt es keinen einzelnen Knopf.",[84,485,486],{},"Sieh dir Row Level Security an, solange du ohnehin im Dashboard bist. Ein öffentlicher Schlüssel ist nur wegen dieser Regeln sicher, und ohne sie liest er deine ganze Datenbank.",[10,488,489,490,494,495,40],{},"Wenn du das lieber als Liste durchgehst: die\n",[329,491,493],{"href":492},"\u002Fchecklist","10-Minuten-Sicherheitscheckliste"," deckt das ab und dazu die anderen\nDinge, die man in einer frisch gestarteten App abschalten sollte, und wir haben\neine Anleitung in einfacher Sprache für ",[329,496,498],{"href":497},"\u002Fis-your-supabase-app-safe","Supabase-Apps",{"title":500,"searchDepth":501,"depth":501,"links":502},"",3,[503,505,506,507,508,509,510,511,512],{"id":31,"depth":504,"text":32},2,{"id":61,"depth":504,"text":62},{"id":111,"depth":504,"text":112},{"id":241,"depth":504,"text":242},{"id":286,"depth":504,"text":287},{"id":336,"depth":504,"text":337},{"id":358,"depth":504,"text":359},{"id":411,"depth":504,"text":412},{"id":452,"depth":504,"text":453},"Sicherheitsgrundlagen","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcover-1200x630.png","Ein Einstellungsfenster: eine URL und ein anon-Schlüssel offen lesbar, ein service_role-Schlüssel und ein JWT-Wert hinter Punkten.","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.",false,"md",[520,523,526,529,532,535],{"q":521,"a":522},"Wo ist der service_role Key in Supabase?","Im Dashboard, in deinem Projekt, unter Settings → API Keys. In einem älteren Projekt steht er dort als service_role und ist hinter einer Anzeigen-Schaltfläche versteckt, in einem neueren ist es ein geheimer Schlüssel, der mit sb_secret_ beginnt. Ältere Anleitungen nennen dieselbe Seite Settings → API.",{"q":524,"a":525},"Wie sieht ein Supabase anon-Schlüssel aus?","In einem neueren Projekt ist es eine lange Zeichenfolge, die mit sb_publishable_ beginnt. In einem älteren ist es ein JWT: drei durch Punkte getrennte Blöcke, die mit eyJ anfangen, insgesamt meist ein paar hundert Zeichen lang. Der service_role-Schlüssel sieht genauso aus, und darum werden die beiden verwechselt.",{"q":527,"a":528},"Ist meine Supabase-Projekt-URL geheim?","Nein. Sie ist die Adresse, an die deine App jede Anfrage schickt, sie geht also von Haus aus an jeden Besucher, und es gibt keine Version deiner App, in der sie verborgen wäre. Sie zu finden ist kein Fund. Ob ein Fremder deine Daten lesen kann, entscheidet Row Level Security und nicht, ob er deine Adresse kennt.",{"q":530,"a":531},"Meine App wurde für mich gebaut und ich habe Supabase nie geöffnet. Wie komme ich rein?","Finde zuerst deine Projekt-Referenz: die kurze zufällige Zeichenfolge in der Adresse, die deine App ohnehin aufruft, https:\u002F\u002Fyourreference.supabase.co. Builder verbinden Supabase über deinen eigenen Account, das Projekt liegt also meistens in einem Dashboard, für das du dich einmal registriert und das du nie benutzt hast. Melde dich mit diesem Account bei supabase.com an und gleiche die Referenz mit der Projektliste ab.",{"q":533,"a":534},"Kann ich einen geleakten service_role-Schlüssel rotieren?","Nur wenn es einer der neueren sb_secret_-Schlüssel ist, von denen du mehrere gleichzeitig halten und einzeln zurückziehen kannst. Supabase hat mitgeteilt, dass sich die alten anon-, service_role- und JWT-Geheimnisse nicht mehr rotieren lassen. Einen geleakten alten Schlüssel unbrauchbar zu machen heißt daher: neue Schlüssel anlegen, App und Servercode darauf umstellen und dann das alte Paar deaktivieren.",{"q":536,"a":537},"Was ist SUPABASE_SERVICE_ROLE_KEY?","Das ist der Name der Umgebungsvariablen, unter dem dein Code den geheimen Schlüssel führt, also den, der auf einem älteren Projekt service_role heißt und auf einem neueren sb_secret_. Er gehört ausschließlich in serverseitige Konfiguration: eine Edge Function, einen Webhook-Handler, einen geplanten Job. Alles mit einem VITE_ oder NEXT_PUBLIC_ Präfix wird in das Browser-Bundle kompiliert, ein service_role-Schlüssel hinter einem solchen Namen ist also mit dem Deploy öffentlich.","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",[540,541,542,543,544,545,546],"wo ist der supabase service_role key","supabase service_role key finden","supabase anon key finden","supabase api keys","supabase anon key format","supabase projekt url","supabase key bekommen",{},true,"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","2026-08-28",{"title":5,"description":516},"blog\u002Fwhere-to-find-supabase-api-keys",[554,555,556],"Jeder Supabase-Schlüssel, auch service_role, liegt auf einer Seite: öffne dein Projekt im Dashboard, dann Settings → API Keys.","Dort stehen vier Werte. Projekt-URL und öffentlicher Schlüssel gehören in deine App, der geheime Schlüssel und der JWT-Wert nie.","Die Seite sagt dir, welche Schlüssel es gibt. Sie sagt dir nicht, welcher in deiner App gelandet ist, und nur die zweite Frage kann dir wehtun.","2026-09-05","vGR4mmdewwUTt0W32ytqAE54ZQENqRDAbyT2F7uAviQ",[560,566,571,577,583,589,596,602,608,614,615,621,627,633,639,645,651,657,663,668,673,679,684,689,695],{"path":561,"title":562,"description":563,"published":564,"category":513,"image":565,"draft":517},"\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":567,"title":568,"description":569,"published":557,"category":513,"image":570,"draft":517},"\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.","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":572,"title":573,"description":574,"published":575,"category":513,"image":576,"draft":517},"\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":578,"title":579,"description":580,"published":581,"category":513,"image":582,"draft":517},"\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 auf keine Domain beschränken. Er ist ein Bearer-Token, also gibt ihn jeder Finder für dein Geld aus.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":584,"title":585,"description":586,"published":587,"category":513,"image":588,"draft":517},"\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":590,"title":591,"description":592,"published":593,"category":594,"image":595,"draft":517},"\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","Backups","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":597,"title":598,"description":599,"published":600,"category":513,"image":601,"draft":517},"\u002Fblog\u002Freplit-secrets-explained","Secrets in Replit nutzen, und was trotzdem veröffentlicht wird","Secrets in Replit nutzen: was das Werkzeug abdeckt und was nicht. Ein Schlüssel, den dein Browser-Code liest, wird mit deiner App veröffentlicht.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":603,"title":604,"description":605,"published":606,"category":594,"image":607,"draft":517},"\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":609,"title":610,"description":611,"published":612,"category":513,"image":613,"draft":517},"\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":549,"title":5,"description":516,"published":550,"category":513,"image":538,"draft":517},{"path":616,"title":617,"description":618,"published":619,"category":513,"image":620,"draft":517},"\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":622,"title":623,"description":624,"published":625,"category":513,"image":626,"draft":517},"\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":628,"title":629,"description":630,"published":631,"category":594,"image":632,"draft":517},"\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":634,"title":635,"description":636,"published":637,"category":594,"image":638,"draft":517},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","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":640,"title":641,"description":642,"published":643,"category":513,"image":644,"draft":517},"\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":646,"title":647,"description":648,"published":649,"category":513,"image":650,"draft":517},"\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":652,"title":653,"description":654,"published":655,"category":594,"image":656,"draft":517},"\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":658,"title":659,"description":660,"published":661,"category":513,"image":662,"draft":517},"\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":664,"title":665,"description":666,"published":661,"category":513,"image":667,"draft":517},"\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":437,"title":669,"description":670,"published":671,"category":513,"image":672,"draft":517},"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":674,"title":675,"description":676,"published":677,"category":594,"image":678,"draft":517},"\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":349,"title":680,"description":681,"published":682,"category":513,"image":683,"draft":517},"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":685,"title":686,"description":687,"published":682,"category":594,"image":688,"draft":517},"\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":690,"title":691,"description":692,"published":693,"category":594,"image":694,"draft":517},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","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":354,"title":696,"description":697,"published":693,"category":513,"image":698,"draft":517},"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",1788681836865]