[{"data":1,"prerenderedAt":896},["ShallowReactive",2],{"blog-de-supabase-permission-denied-for-table":3,"blog-index-de":545},{"id":4,"title":5,"body":6,"category":504,"cover":505,"coverAlt":506,"description":507,"draft":508,"extension":509,"faq":510,"image":525,"keywords":526,"meta":533,"navigation":534,"ogTitle":535,"path":536,"published":537,"seo":538,"stem":539,"tldr":540,"updated":537,"__hash__":544},"blog_de\u002Fblog\u002Fsupabase-permission-denied-for-table.md","Supabase \"permission denied for table\": der fehlende Grant",{"type":7,"value":8,"toc":492},"minimark",[9,18,26,31,34,57,60,70,73,76,80,87,107,151,154,160,163,202,206,209,216,225,229,232,238,241,247,262,267,275,279,282,298,301,352,356,359,367,370,394,398,403,437,444,448,486],[10,11,12,13,17],"p",{},"Wenn deine App auf Supabase läuft, hast du wahrscheinlich eine E-Mail zum 30. Oktober bekommen. Darin steht, dass sich für deine bestehenden Tabellen\nnichts ändert, und dann bekommst du drei SQL-Statements in die Hand gedrückt.\nOder es ist schon November: Du hast Lovable, Bolt oder Cursor um eine neue\nFunktion gebeten, der neue Bildschirm bleibt leer, und irgendwo in der Konsole\nsteht eine Meldung mit ",[14,15,16],"code",{},"permission denied for table",". Beides ist dieselbe\nSupabase-Änderung, nur von zwei Seiten des Datums aus gesehen.",[10,19,20,21,25],{},"Hier ist der Teil, den die E-Mail weglässt: ",[22,23,24],"strong",{},"Das SQL, das sie dir zeigt, ist\nnur die halbe Lösung."," Führ diese Hälfte allein aus, auf der falschen Tabelle,\nund deine App läuft wieder, während die neue Tabelle ihre Zeilen jedem gibt, der\ndanach fragt.",[27,28,30],"h2",{"id":29},"was-bedeutet-permission-denied-for-table-in-supabase","Was bedeutet \"permission denied for table\" in Supabase?",[10,32,33],{},"Es bedeutet, dass die Art von Besucher, die die Anfrage stellt, überhaupt keinen\nZugriff auf diese Tabelle bekommen hat. Die Datenbank hat also abgelehnt, bevor\nsie sich auch nur eine Zeile angesehen hat.",[10,35,36,37,40,41,44,45,48,49,52,53,56],{},"Supabase ordnet jede Anfrage einer ",[22,38,39],{},"Rolle"," zu, also der Art von Besucher, von\nder sie kommt. ",[14,42,43],{},"anon"," ist jemand, der nicht angemeldet ist. ",[14,46,47],{},"authenticated"," ist\njemand, der angemeldet ist. ",[14,50,51],{},"service_role"," ist dein eigener Servercode mit dem\ngeheimen Schlüssel. Ein ",[22,54,55],{},"Grant"," ist die Anweisung, die einer dieser Rollen\nZugriff auf eine Tabelle in Postgres gibt, der Datenbank, auf der Supabase\nläuft. Ohne Grant kein Zugriff, egal was du sonst geschrieben hast.",[10,58,59],{},"Fehlt der Grant, antwortet Supabase so, meist als 401 oder 403:",[61,62,67],"pre",{"className":63,"code":65,"language":66},[64],"language-text","{\n  \"code\": \"42501\",\n  \"message\": \"permission denied for table comments\",\n  \"hint\": \"Grant the required privileges to the current role with: GRANT SELECT ON public.comments TO anon;\"\n}\n","text",[14,68,65],{"__ignoreMap":69},"",[10,71,72],{},"Der Hinweis ist der nützliche Teil. Er nennt die Rolle, die abgewiesen wurde,\nund genau das Statement, das sie hereinlassen würde.",[10,74,75],{},"Stell dir jede Tabelle als Raum vor. Der Grant ist die Tür, und für jede Rolle\ngibt es eine eigene Tür. Row Level Security, die Regeln pro Zeile, die du\nvielleicht schon kennst, entscheidet, welche Schubladen ein Besucher öffnen\ndarf, wenn er drinnen ist. \"Permission denied for table\" heißt, dass jemand vor\neiner geschlossenen Tür steht. Bis zu deinen Regeln ist er nie gekommen.",[27,77,79],{"id":78},"was-ändert-sich-am-30-oktober","Was ändert sich am 30. Oktober?",[10,81,82,83,86],{},"Neue Tabellen im ",[14,84,85],{},"public","-Schema, dem Tabellenordner, den dein Builder benutzt,\nsolange ihm niemand etwas anderes sagt, kommen ab dann mit geschlossenen Türen\nan.",[10,88,89,90,92,93,95,96,98,99,106],{},"Bisher hat Supabase bei jeder neuen Tabelle automatisch alle drei Türen\ngeöffnet: Lesen, Hinzufügen, Ändern und Löschen, für ",[14,91,43],{},", ",[14,94,47],{}," und\n",[14,97,51],{}," gleichermaßen. Eine Tabelle war von deiner App aus erreichbar,\nsobald sie existierte, und deine Row-Level-Security-Regeln waren das Einzige\nzwischen einem Fremden und ihren Zeilen. Das\n",[100,101,105],"a",{"href":102,"rel":103},"https:\u002F\u002Fsupabase.com\u002Fchangelog\u002F45329-breaking-change-tables-not-exposed-to-data-and-graphql-api-automatically",[104],"nofollow","Changelog","\nvon Supabase nennt den Grund ohne Umschweife: Agenten und KI-Plattformen legen\nheute Tabellen an, ohne dass jemand die Änderung prüft, und die automatischen\nGrants haben Tabellen offengelegt, die \"a developer forgot to protect\", die also\njemand zu schützen vergessen hatte.",[108,109,110,123],"table",{},[111,112,113],"thead",{},[114,115,116,120],"tr",{},[117,118,119],"th",{},"Datum",[117,121,122],{},"Was passiert ist oder passiert",[124,125,126,135,143],"tbody",{},[114,127,128,132],{},[129,130,131],"td",{},"28. April 2026",[129,133,134],{},"Neue Projekte konnten die automatischen Grants beim Anlegen abwählen.",[114,136,137,140],{},[129,138,139],{},"30. Mai 2026",[129,141,142],{},"Der Verzicht auf automatische Grants wurde schrittweise Standard für neue Projekte.",[114,144,145,148],{},[129,146,147],{},"30. Oktober 2026",[129,149,150],{},"Auch bestehende Projekte bekommen sie nicht mehr.",[10,152,153],{},"Wenn dein Projekt nach Ende Mai angelegt wurde, funktioniert es vielleicht schon\nso, denn Supabase hat den neuen Standard in den Wochen nach diesem Datum nach\nund nach für neue Projekte eingeführt.",[155,156],"diagram",{"alt":157,"caption":158,"src":159},"Eine Zeitleiste mit einer Markierung bei 2026-10-30. Davor stehen drei Tabellen mit offenen Türen: Zwei haben ein Vorhängeschloss über ihren Zeilen, die dritte hat keins und ihre Zeilen sind bernsteinfarben. Danach stehen zwei neue Tabellen mit geschlossenen Türen.","Tabellen, die am 30. Oktober existieren, behalten ihre Türen, auch eine, die für Fremde offen stand. Nur die Tabellen, die danach entstehen, beginnen mit geschlossener Tür.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fbefore-and-after-october-30-1600x620.png",[10,161,162],{},"Drei Details solltest du vor dem Stichtag kennen:",[164,165,166,184,196],"ul",{},[167,168,169,175,176,179,180,183],"li",{},[22,170,171,172,174],{},"Nur das ",[14,173,85],{},"-Schema."," Storage und die Anmeldung haben ihre Tabellen in\neigenen Schemas, ",[14,177,178],{},"storage"," und ",[14,181,182],{},"auth",", und laut Supabase bleiben deren Grants\nund Voreinstellungen, wie sie sind.",[167,185,186,189,190,192,193,195],{},[22,187,188],{},"Auch der geheime Schlüssel wird abgewiesen."," Die automatischen Grants\ngalten auch für ",[14,191,51],{},". Eine Edge Function (Servercode, den Supabase\nfür dich ausführt), die deinen geheimen Schlüssel benutzt, bekommt deshalb bei\neiner neuen Tabelle denselben Fehler, bis ",[14,194,51],{}," einen eigenen Grant\nhat.",[167,197,198,201],{},[22,199,200],{},"Eine gelöschte und neu angelegte Tabelle ist eine neue Tabelle."," Grants\ngehören zur Tabelle selbst und verschwinden mit ihr, wenn sie gelöscht wird.\nBaut dein Builder eine Tabelle neu, um sie zu ändern, beginnt die neu gebaute\nmit geschlossener Tür.",[27,203,205],{"id":204},"geht-meine-app-am-30-oktober-kaputt","Geht meine App am 30. Oktober kaputt?",[10,207,208],{},"Nicht an diesem Tag. Sie geht kaputt, wenn zum ersten Mal etwas eine neue\nTabelle anlegt, ohne auch den Grant anzulegen.",[10,210,211,212,215],{},"Für die meisten, die das hier lesen, ist dieses Etwas ihr Builder. Du bittest um\neinen Kommentarbereich. Der Builder schreibt eine Migration, also die Datei mit\nDatenbankänderungen, die er für dich ausführt, und die Migration legt eine\nTabelle ",[14,213,214],{},"comments"," an. Schreibt er die Grants gleich mit, siehst du diesen\nFehler nie. Tut er es nicht, zeigt der Kommentarbereich nichts an, oder das\nSpeichern eines Kommentars scheitert, oder eine rote Meldung erscheint, je\nnachdem, wie deine App mit Fehlern umgeht. Jeder Bildschirm, den du schon\nhattest, läuft weiter.",[10,217,218,219,224],{},"Supabase veröffentlicht einen ",[100,220,223],{"href":221,"rel":222},"https:\u002F\u002Fsupabase.com\u002Fblog\u002Fsupabase-agent-skills",[104],"Agent Skill","\nfür KI-Coding-Tools, der den Grant-Schritt enthält. Ob dein Builder ihn benutzt,\nentscheidet dein Builder. Geh also sicherheitshalber davon aus, dass die nächste\nTabelle, die er anlegt, mit geschlossener Tür ankommen kann.",[27,226,228],{"id":227},"kann-ich-den-grant-aus-der-fehlermeldung-gefahrlos-ausführen","Kann ich den GRANT aus der Fehlermeldung gefahrlos ausführen?",[10,230,231],{},"Erst wenn für die Tabelle Row Level Security eingeschaltet ist und eine Regel\nfür sie existiert. Der Grant entscheidet, wer durch die Tür kommt. Welche\nSchubladen jemand öffnet, entscheidet er nicht.",[10,233,234,235,237],{},"Der Schlüssel, mit dem deine App ihre Anfragen an Supabase stellt, steckt in\ndeiner App. Ein Grant an ",[14,236,43],{}," heißt also, dass jeder Besucher, angemeldet oder\nnicht, diese Tabelle jetzt nach Zeilen fragen darf. Mit einer Regel bekommt er\ndie Zeilen, die die Regel erlaubt. Mit ausgeschalteter Row Level Security\nbekommt er jede Zeile der Tabelle, und an deiner App sieht nichts anders aus.",[10,239,240],{},"Die E-Mail zeigt drei Grants und hört auf. Das Changelog von Supabase zeigt drei\nSchritte und sagt, man solle \"treat these three steps as a unit\", sie also als\nEinheit behandeln:",[61,242,245],{"className":243,"code":244,"language":66},[64],"-- 1. wer die Tabelle erreichen darf\ngrant select on public.orders to authenticated;\ngrant select, insert, update, delete on public.orders to service_role;\n\n-- 2. die Regeln pro Zeile einschalten\nalter table public.orders enable row level security;\n\n-- 3. die Regel selbst\ncreate policy \"Customers read their own orders\"\n  on public.orders\n  for select\n  to authenticated\n  using (auth.uid() = user_id);\n",[14,246,244],{"__ignoreMap":69},[10,248,249,250,252,253,258,259,261],{},"In diesem Beispiel gibt es keine Zeile für ",[14,251,43],{},", und das ist Absicht.\nNiemand, der abgemeldet ist, sollte eine Tabelle mit Bestellungen erreichen.\nDie Tür für Fremde bleibt also zu, und angemeldete Kunden bekommen nur den\nLesezugriff, den ihr Bildschirm braucht. Die Regel grenzt das dann auf ihre\neigenen Zeilen ein. Supabase selbst rät,\n",[100,254,257],{"href":255,"rel":256},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fapi\u002Fsecuring-your-api",[104],"jeder Rolle nur das Nötigste zu geben",".\nEin Grant an ",[14,260,43],{}," gehört auf eine Tabelle, deren Zeilen für alle gedacht sind,\netwa die Kommentare unter einem öffentlichen Beitrag.",[155,263],{"alt":264,"caption":265,"src":266},"Drei Bahnen, jede eine Anfrage von anon an dieselbe Tabelle. In der ersten ist die Tür zu, der Pfeil endet an ihr, daneben der Code 42501. In der zweiten ist die Tür offen, der Pfeil endet an einem Balken für Row Level Security, und zwei Zeilen der Tabelle leuchten auf. In der dritten ist die Tür offen, der Balken ist nur ein gestrichelter Umriss, und jede Zeile leuchtet bernsteinfarben.","Der Grant entscheidet, ob eine Anfrage die Tabelle erreicht. Die Regeln dahinter entscheiden, wie viel sie mitnimmt. Eine offene Tür ohne Regeln dahinter gibt die ganze Tabelle heraus.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fthe-door-and-the-rules-1600x760.png",[10,268,269,270,274],{},"Wenn du sehen willst, auf welcher Seite dieses Bildes deine Tabellen stehen,\nstellt unser kostenloser Scan deiner Live-App die Frage, die ein Fremder stellen\nwürde, zählt die Zeilen, die er bekäme, ohne eine davon abzurufen, und braucht\ndafür etwa 20 Sekunden ohne Konto: ",[100,271,273],{"href":272},"\u002Fsecurity-scanner","scanne deine App",".",[27,276,278],{"id":277},"warum-die-row-level-security-lösungen-diesen-fehler-nicht-berühren","Warum die Row-Level-Security-Lösungen diesen Fehler nicht berühren",[10,280,281],{},"Weil zuerst der Grant geprüft wird. Eine Anfrage, die an der Tür abgewiesen\nwird, erreicht deine Regeln nie. Die Regeln zu ändern, ändert also nichts am\nFehler.",[10,283,284,285,288,289,293,294,297],{},"Das ist wichtig, weil der Code geteilt ist. ",[14,286,287],{},"42501"," gibt Postgres auch zurück,\nwenn Row Level Security ein Speichern ablehnt, wie bei\n",[100,290,292],{"href":291},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","new row violates row-level security policy",".\nEin Assistent, der sich nur am Code orientiert, greift womöglich zu den\nLösungen, die zu jenem Fehler gehören: Row Level Security ausschalten oder eine\nRegel mit ",[14,295,296],{},"using (true)"," hinzufügen, die alle durchlässt. Keine von beiden lässt\ndiesen Fehler verschwinden. Beide bleiben zurück, wenn der Grant schließlich\nkommt, und dann steht die Tür offen vor Schubladen ohne Schloss.",[10,299,300],{},"Die Worte in der Meldung unterscheiden die beiden, auch wenn die Nummer es nicht\ntut:",[108,302,303,316],{},[111,304,305],{},[114,306,307,310,313],{},[117,308,309],{},"Die Meldung lautet",[117,311,312],{},"Welches Schloss abgelehnt hat",[117,314,315],{},"Was es behebt",[124,317,318,330,342],{},[114,319,320,324,327],{},[129,321,322],{},[14,323,16],{},[129,325,326],{},"die Tür (der Grant)",[129,328,329],{},"ein Grant für die Rolle, die der Hinweis nennt",[114,331,332,336,339],{},[129,333,334],{},[14,335,292],{},[129,337,338],{},"die Regeln",[129,340,341],{},"eine Policy, die diese Zeile erlaubt",[114,343,344,347,349],{},[129,345,346],{},"kein Fehler, und die Liste ist leer",[129,348,338],{},[129,350,351],{},"eine Lese-Policy für diese Rolle",[27,353,355],{"id":354},"was-der-30-oktober-nicht-behebt","Was der 30. Oktober nicht behebt",[10,357,358],{},"Jede Tabelle, die du schon hast. Sie behält genau den Zugriff, den sie heute\nhat, auch eine Tabelle, die ein Fremder in diesem Moment lesen kann.",[10,360,361,362,366],{},"Die Änderung betrifft Tabellen, die es noch nicht gibt. Bisher kam jede neue\nTabelle mit offenen Türen an. Eine App, die vor dem 30. Oktober gebaut wurde,\nkann also eine haben, bei der nie jemand die Schlösser angebracht hat: Row Level\nSecurity nie eingeschaltet, oder\n",[100,363,365],{"href":364},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","eingeschaltet unter einer Regel, die alle hereinlässt",".\nDer 30. Oktober lässt diese Räume genau so, wie sie sind.",[10,368,369],{},"Drei Stellen zeigen dir, wo du stehst:",[371,372,373,379,385],"ol",{},[167,374,375,378],{},[22,376,377],{},"Die Einstellungsseite der Data API",", die in der E-Mail verlinkt ist. Im\nDashboard liegt sie unter Integrations, dann Data API, und sie listet auf,\nwelche deiner Tabellen überhaupt erreichbar sind.",[167,380,381,384],{},[22,382,383],{},"Der Security Advisor",", der laut Supabase die Tabellen auflistet, die du\nvor der Änderung prüfen solltest.",[167,386,387,390,391,274],{},[22,388,389],{},"Der Blick von außen."," Keine der beiden ersten Stellen sagt dir, was ein\nFremder zurückbekommt. Dafür fragst du deine Live-App so, wie ein Fremder es\ntun würde, und genau ",[100,392,393],{"href":272},"das macht unser Scan",[27,395,397],{"id":396},"wie-reeve-die-tabellen-im-blick-behält-die-du-hinzufügst","Wie Reeve die Tabellen im Blick behält, die du hinzufügst",[10,399,400],{},[22,401,402],{},"Nach dem 30. Oktober ist jede Tabelle, die dein Builder hinzufügt, eine neue\nEntscheidung darüber, wer durch die Tür kommt. Reeve prüft die Antwort von\naußen, und Monitor prüft sie immer wieder.",[164,404,405,413,423],{},[167,406,407,410,411,274],{},[22,408,409],{},"Der kostenlose Scan"," fragt jede Tabelle, die deine App nennt, wie viele\nZeilen ein Besucher ohne Login bekäme, liest die Zahl und hört dort auf, ohne\neine Zeile abzurufen. Etwa 20 Sekunden, kein Konto:\n",[100,412,273],{"href":272},[167,414,415,418,419,422],{},[22,416,417],{},"Reeve Monitor"," führt jede Stunde alle neun Prüfungen für bis zu drei Apps\naus und schickt dir an dem Tag eine E-Mail, an dem sich deine Note\n",[22,420,421],{},"verschlechtert",". Ein Deployment, das etwas geöffnet hat, wartet also nicht\ndarauf, dass du nachsehen kommst.",[167,424,425,428,429,432,433,274],{},[22,426,427],{},"Care"," führt dieselben Prüfungen aus und bewahrt eine verschlüsselte Kopie\ndeiner ",[22,430,431],{},"Supabase","-Datenbank außerhalb deines Supabase-Kontos auf. Baut die\nLösung eines Assistenten eine Tabelle neu, gibt es eine Kopie, zu der du\nzurückkehren kannst.\n",[100,434,436],{"href":435},"\u002Fsupabase-backups","Wie die Kopie entsteht und zurückgespielt wird",[10,438,439,440,274],{},"Was jeder Tarif umfasst, steht auf der ",[100,441,443],{"href":442},"\u002Fpricing","Preisseite",[27,445,447],{"id":446},"was-du-vor-dem-30-oktober-tun-solltest","Was du vor dem 30. Oktober tun solltest",[449,450,451],"key-takeaways",{},[164,452,453,456,463,469,477,483],{},[167,454,455],{},"Lass die Tabellen, die du schon hast, in Ruhe, wenn du nur willst, dass deine App weiterläuft. Sie behalten ihre Grants.",[167,457,458,459,462],{},"Bitte deinen Builder, bei jeder neuen Tabelle den Grant, ",[14,460,461],{},"enable row level security"," und eine Policy in dieselbe Migration zu schreiben, als eine einzige Änderung.",[167,464,465,466,468],{},"Wenn der Fehler auftaucht, lies, welche Rolle der Hinweis nennt. ",[14,467,43],{}," heißt jeder Besucher deiner App.",[167,470,471,472,474,475,274],{},"Gib ",[14,473,43],{}," auf einer Tabelle nichts, solange Row Level Security nicht an ist und keine Regel existiert. Tabellen mit Menschen oder Bestellungen brauchen meist überhaupt keinen Grant für ",[14,476,43],{},[167,478,479,480,482],{},"Lehne jede Lösung ab, die Row Level Security ausschaltet oder ",[14,481,296],{}," hinzufügt, um einen Berechtigungsfehler zu beseitigen. Keine von beiden berührt ihn.",[167,484,485],{},"Prüf, was ein Fremder aus den Tabellen lesen kann, die du schon hast. Der 30. Oktober lässt sie, wie sie sind.",[10,487,488,489,491],{},"Fang mit der Tabelle an, die ein Fremder am liebsten lesen würde, meist die mit\nMenschen darin, und ",[100,490,273],{"href":272},", um zu sehen, was sie\nheute herausgibt.",{"title":69,"searchDepth":493,"depth":493,"links":494},3,[495,497,498,499,500,501,502,503],{"id":29,"depth":496,"text":30},2,{"id":78,"depth":496,"text":79},{"id":204,"depth":496,"text":205},{"id":227,"depth":496,"text":228},{"id":277,"depth":496,"text":278},{"id":354,"depth":496,"text":355},{"id":396,"depth":496,"text":397},{"id":446,"depth":496,"text":447},"Sicherheitsgrundlagen","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcover-1200x630.png","Eine Reihe von Türen zu Datenbanktabellen. Die älteren stehen offen und zeigen erleuchtete Zeilen, die neueste am Ende ist zu.","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.",false,"md",[511,514,516,519,522],{"q":512,"a":513},"Hört meine Supabase-App am 30. Oktober auf zu funktionieren?","Nein. Jede Tabelle, die am 30. Oktober existiert, behält den Zugriff, den sie hat, und Supabase hat bestätigt, dass diese Grants nicht entzogen werden. Was sich ändert, ist die nächste Tabelle, die nach diesem Datum angelegt wird. Sie ist für deine App zunächst unerreichbar, bis jemand Zugriff auf sie erteilt. Das Erste, was kaputtgeht, ist also die erste neue Funktion, die eine neue Tabelle braucht.",{"q":30,"a":515},"Es bedeutet, dass die Art von Besucher, die die Anfrage stellt, überhaupt keinen Zugriff auf diese Tabelle bekommen hat. Deine Datenbank hat also abgelehnt, bevor sie sich auch nur eine Zeile angesehen hat. Die Meldung kommt von Postgres, der Datenbank, auf der Supabase läuft, mit dem Code 42501, und erreicht deine App meist als 401 oder 403. Supabase hängt einen Hinweis an, der genau das GRANT-Statement nennt, das diesen Besucher hereinlassen würde.",{"q":517,"a":518},"Kann ich das GRANT-Statement aus der Fehlermeldung gefahrlos ausführen?","Erst wenn für die Tabelle Row Level Security eingeschaltet ist und eine Regel für sie existiert. Ein Grant an anon erlaubt jedem Besucher deiner App, die Tabelle nach Zeilen zu fragen, denn der Schlüssel, mit dem diese Anfragen gestellt werden, steckt in deiner App. Mit einer Regel bekommen sie die Zeilen, die die Regel erlaubt. Ohne Regel und mit ausgeschalteter Row Level Security bekommen sie alle.",{"q":520,"a":521},"Betrifft die Änderung Storage, die Anmeldung oder meine Edge Functions?","Storage und die Anmeldung liegen in eigenen Schemas, storage und auth, und laut Supabase bleiben deren Grants und Voreinstellungen, wie sie sind. Bei Edge Functions ist es anders. Eine, die deinen geheimen Schlüssel benutzt, braucht für jede neue Tabelle trotzdem einen Grant, denn die wegfallenden Standard-Grants galten auch für service_role und nicht nur für die zwei Rollen, die deine Besucher benutzen.",{"q":523,"a":524},"Kann ich das alte Verhalten wieder einschalten?","Supabase dokumentiert einen Weg dafür, als Einstellung auf der Data-API-Seite im Dashboard oder als SQL, und rät davon ab. Ist es an, ist jede neue Tabelle für jeden Besucher erreichbar, sobald sie existiert, und Row Level Security ist das Einzige, was zwischen einem Fremden und ihren Zeilen steht. So hat jedes Projekt vor der Änderung funktioniert.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",[527,528,529,530,531,532],"supabase permission denied for table","supabase grant neue tabellen","supabase änderung 30 oktober data api","supabase 42501","supabase neue tabellen automatisch freigeben","supabase default privileges public schema",{},true,"Supabase \"permission denied for table\" ab dem 30. Oktober","\u002Fblog\u002Fsupabase-permission-denied-for-table","2026-09-26",{"title":5,"description":507},"blog\u002Fsupabase-permission-denied-for-table",[541,542,543],"Ab dem 30. Oktober 2026 antwortet eine neue Tabelle in deinem Supabase-Projekt mit \"permission denied for table\", bis jemand Zugriff auf sie erteilt. Die Tabellen, die du schon hast, funktionieren genau so weiter wie heute.","Ein Grant entscheidet, ob eine Anfrage eine Tabelle überhaupt erreicht. Welche Zeilen sie zurückbekommt, entscheidet weiterhin Row Level Security. Wer anon Zugriff auf eine Tabelle ohne Regeln gibt, macht jede Zeile für jeden lesbar.","Die Änderung schließt nichts, was schon offen ist. Prüf heute, was ein Fremder lesen kann, und danach wieder nach jeder neuen Tabelle.","sGSyqFRts_NkR8aVG1kVrOsFRo-AC2c6wFvN320Thck",[546,552,558,564,570,576,582,588,594,600,606,612,618,625,631,636,637,643,649,655,661,667,673,679,685,691,697,703,709,715,721,727,733,739,745,751,757,763,769,775,781,787,793,799,805,811,816,822,828,834,840,846,852,858,863,869,875,880,885,891],{"path":547,"title":548,"description":549,"published":550,"category":504,"image":551,"draft":508},"\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","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":553,"title":554,"description":555,"published":556,"category":504,"image":557,"draft":508},"\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":559,"title":560,"description":561,"published":562,"category":504,"image":563,"draft":508},"\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":565,"title":566,"description":567,"published":568,"category":504,"image":569,"draft":508},"\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":571,"title":572,"description":573,"published":574,"category":504,"image":575,"draft":508},"\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":577,"title":578,"description":579,"published":580,"category":504,"image":581,"draft":508},"\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":583,"title":584,"description":585,"published":586,"category":504,"image":587,"draft":508},"\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":589,"title":590,"description":591,"published":592,"category":504,"image":593,"draft":508},"\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":595,"title":596,"description":597,"published":598,"category":504,"image":599,"draft":508},"\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":601,"title":602,"description":603,"published":604,"category":504,"image":605,"draft":508},"\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":607,"title":608,"description":609,"published":610,"category":504,"image":611,"draft":508},"\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":613,"title":614,"description":615,"published":616,"category":504,"image":617,"draft":508},"\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":619,"title":620,"description":621,"published":622,"category":623,"image":624,"draft":508},"\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","Backups","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":626,"title":627,"description":628,"published":629,"category":623,"image":630,"draft":508},"\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":632,"title":633,"description":634,"published":537,"category":623,"image":635,"draft":508},"\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.","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":536,"title":5,"description":507,"published":537,"category":504,"image":525,"draft":508},{"path":638,"title":639,"description":640,"published":641,"category":504,"image":642,"draft":508},"\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":644,"title":645,"description":646,"published":647,"category":504,"image":648,"draft":508},"\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":650,"title":651,"description":652,"published":653,"category":623,"image":654,"draft":508},"\u002Fblog\u002Fsupabase-backup-auth-users","Warum in deinem Supabase-Dump keine Nutzer stehen","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.","2026-09-23","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":656,"title":657,"description":658,"published":659,"category":504,"image":660,"draft":508},"\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":662,"title":663,"description":664,"published":665,"category":504,"image":666,"draft":508},"\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":668,"title":669,"description":670,"published":671,"category":504,"image":672,"draft":508},"\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":674,"title":675,"description":676,"published":677,"category":504,"image":678,"draft":508},"\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":680,"title":681,"description":682,"published":683,"category":504,"image":684,"draft":508},"\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":686,"title":687,"description":688,"published":689,"category":504,"image":690,"draft":508},"\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":692,"title":693,"description":694,"published":695,"category":504,"image":696,"draft":508},"\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":698,"title":699,"description":700,"published":701,"category":504,"image":702,"draft":508},"\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":704,"title":705,"description":706,"published":707,"category":623,"image":708,"draft":508},"\u002Fblog\u002Fsupabase-storage-backup","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":710,"title":711,"description":712,"published":713,"category":623,"image":714,"draft":508},"\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":716,"title":717,"description":718,"published":719,"category":623,"image":720,"draft":508},"\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":722,"title":723,"description":724,"published":725,"category":504,"image":726,"draft":508},"\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":728,"title":729,"description":730,"published":731,"category":504,"image":732,"draft":508},"\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":734,"title":735,"description":736,"published":737,"category":504,"image":738,"draft":508},"\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":740,"title":741,"description":742,"published":743,"category":504,"image":744,"draft":508},"\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":746,"title":747,"description":748,"published":749,"category":504,"image":750,"draft":508},"\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":752,"title":753,"description":754,"published":755,"category":504,"image":756,"draft":508},"\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":758,"title":759,"description":760,"published":761,"category":504,"image":762,"draft":508},"\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":764,"title":765,"description":766,"published":767,"category":504,"image":768,"draft":508},"\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":770,"title":771,"description":772,"published":773,"category":504,"image":774,"draft":508},"\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":776,"title":777,"description":778,"published":779,"category":504,"image":780,"draft":508},"\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":782,"title":783,"description":784,"published":785,"category":623,"image":786,"draft":508},"\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":788,"title":789,"description":790,"published":791,"category":504,"image":792,"draft":508},"\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":794,"title":795,"description":796,"published":797,"category":623,"image":798,"draft":508},"\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":800,"title":801,"description":802,"published":803,"category":504,"image":804,"draft":508},"\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":806,"title":807,"description":808,"published":809,"category":504,"image":810,"draft":508},"\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":291,"title":812,"description":813,"published":814,"category":504,"image":815,"draft":508},"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":817,"title":818,"description":819,"published":820,"category":504,"image":821,"draft":508},"\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":823,"title":824,"description":825,"published":826,"category":623,"image":827,"draft":508},"\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":829,"title":830,"description":831,"published":832,"category":623,"image":833,"draft":508},"\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":835,"title":836,"description":837,"published":838,"category":504,"image":839,"draft":508},"\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":841,"title":842,"description":843,"published":844,"category":504,"image":845,"draft":508},"\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":847,"title":848,"description":849,"published":850,"category":623,"image":851,"draft":508},"\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":853,"title":854,"description":855,"published":856,"category":504,"image":857,"draft":508},"\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":859,"title":860,"description":861,"published":856,"category":504,"image":862,"draft":508},"\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":864,"title":865,"description":866,"published":867,"category":504,"image":868,"draft":508},"\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":870,"title":871,"description":872,"published":873,"category":623,"image":874,"draft":508},"\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":364,"title":876,"description":877,"published":878,"category":504,"image":879,"draft":508},"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":881,"title":882,"description":883,"published":878,"category":623,"image":884,"draft":508},"\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":886,"title":887,"description":888,"published":889,"category":623,"image":890,"draft":508},"\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":892,"title":893,"description":894,"published":889,"category":504,"image":895,"draft":508},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","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]