[{"data":1,"prerenderedAt":927},["ShallowReactive",2],{"blog-it-supabase-backup-auth-users":3,"blog-index-it":578},{"id":4,"title":5,"body":6,"category":534,"cover":535,"coverAlt":536,"description":537,"draft":538,"extension":539,"faq":540,"image":557,"keywords":558,"meta":567,"navigation":568,"ogTitle":5,"path":569,"published":570,"seo":571,"stem":572,"tldr":573,"updated":570,"__hash__":577},"blog_it\u002Fblog\u002Fsupabase-backup-auth-users.md","Perché nel tuo dump Supabase non ci sono utenti",{"type":7,"value":8,"toc":522},"minimark",[9,13,21,35,38,43,46,63,84,87,93,97,102,122,125,135,142,145,150,154,160,214,217,223,226,236,240,243,252,258,261,267,270,276,289,300,306,312,316,319,325,331,334,355,359,362,374,388,394,401,405,442,449,453,456,461,496,504,511],[10,11,12],"p",{},"Hai fatto la cosa giusta. Hai cercato come fare il backup di un database\nSupabase, hai lanciato il comando che hai trovato e hai messo il file in un\nposto sicuro.",[10,14,15,16,20],{},"Poi un giorno ti serve. Rigiochi il file in un progetto nuovo e il ripristino\nfinisce senza un solo errore. Ogni tabella che hai mai creato è lì, e ognuna di\nesse è vuota. I tuoi utenti stanno anche peggio: la parte del database in cui\nvivono, uno schema chiamato ",[17,18,19],"code",{},"auth",", non ha mai raggiunto il file.",[10,22,23,24,31,32,34],{},"Ecco la parte che quasi ogni guida salta: ",[25,26,27,30],"strong",{},[17,28,29],{},"supabase db dump"," da solo non è una\ncopia dei tuoi dati."," Senza altri flag scrive la forma del tuo database e\nniente del suo contenuto, e ",[17,33,19],{}," lo lascia fuori perfino da quello. Supabase\npubblica il backup come tre comandi, e i tuoi account viaggiano nel terzo.",[10,36,37],{},"Aiuta pensare a un albergo. Le tue tabelle sono le stanze e tutto quello che ci\nsta dentro. Il registro alla reception, quello con il nome di ogni ospite, è\ndell'albergo. E una pianta ti mostra ogni stanza dell'edificio senza metterci\ndentro un solo ospite.",[39,40,42],"h2",{"id":41},"un-backup-di-supabase-contiene-i-miei-utenti","Un backup di Supabase contiene i miei utenti?",[10,44,45],{},"Dipende da quale comando ha scritto il file, e il comando che lanciano quasi\ntutti non li contiene.",[10,47,48,49,51,52,55,56,59,60,62],{},"I tuoi utenti non sono righe di una delle tue tabelle. Supabase li tiene in un\ncassetto a parte dello stesso database, lo schema ",[17,50,19],{},", insieme alle loro\npassword hashate, ai provider con cui hanno fatto accesso e alle sessioni che\nhanno aperte. Le tue tabelle stanno in un cassetto chiamato ",[17,53,54],{},"public",", e ogni\ncolonna ",[17,57,58],{},"user_id"," che c'è dentro è un riferimento verso ",[17,61,19],{},".",[10,64,65,66,68,69,71,72,75,76,83],{},"Uno schema è esattamente questo: un cassetto con un nome dentro un database.\n",[17,67,54],{}," è tuo. ",[17,70,19],{}," è di Supabase, e lo è anche ",[17,73,74],{},"storage",", che tiene la riga\nche descrive ogni file caricato. La documentazione di Supabase chiama questi i\nsuoi schemi gestiti e dice che\n",[77,78,82],"a",{"href":79,"rel":80},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Flocal-development\u002Fcli-workflows",[81],"nofollow","di norma non serve scaricarli a meno che tu non li abbia modificati",",\ned è il motivo per cui gli strumenti li trattano diversamente dalle tue tabelle.",[10,85,86],{},"Questa divisione è ciò che permette a un comando di produrre due file che si\nsomigliano e contengono cose del tutto diverse.",[88,89],"diagram",{"alt":90,"caption":91,"src":92},"Un file di dump la cui freccia raggiunge un pannello pieno con quattro tabelle accese, con una spunta. Una seconda freccia si ferma a un muro tratteggiato davanti a un pannello tratteggiato che porta il marchio Supabase, e quel pannello contiene una scheda rigata con tre persone accanto a quattro immagini pallide. Sul muro c'è una croce.","Lanciato da solo, il comando di dump copia la forma del tuo cassetto e si ferma al confine dei due che gestisce Supabase.","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fwhere-the-dump-stops-1600x620.png",[39,94,96],{"id":95},"cosa-scrive-il-comando-di-dump-da-solo","Cosa scrive il comando di dump da solo",[10,98,99,100,62],{},"La pianta. Nessuna riga, e niente da ",[17,101,19],{},[10,103,104,105,108,109,114,115,118,119,62],{},"La pagina di riferimento di Supabase per il comando lo dice in due frasi. Lancia\n",[17,106,107],{},"pg_dump"," con flag aggiuntivi per escludere gli schemi gestiti da Supabase, e\ntra quelli ignorati\n",[77,110,113],{"href":111,"rel":112},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Freference\u002Fcli\u002Fsupabase-db-dump",[81],"ci sono auth, storage e quelli creati dalle estensioni",".\nLa stessa pagina dice poi che il dump predefinito non contiene dati né ruoli\npersonalizzati, e che li ottieni chiedendoli con ",[17,116,117],{},"--data-only"," e ",[17,120,121],{},"--role-only",[10,123,124],{},"Quindi questo, che è quello che hai probabilmente lanciato:",[126,127,132],"pre",{"className":128,"code":130,"language":131},[129],"language-text","supabase db dump --db-url \"postgresql:\u002F\u002F…your connection string…\" -f backup.sql\n","text",[17,133,130],{"__ignoreMap":134},"",[10,136,137,138,141],{},"produce un file pieno di istruzioni ",[17,139,140],{},"CREATE TABLE",". Ogni colonna, ogni indice,\nogni policy che hai scritto sulle tue tabelle, e nemmeno una riga di niente.",[10,143,144],{},"Il motivo per cui questo è peggio di un file palesemente vuoto è che funziona.\nNon sembra nemmeno piccolo: ogni definizione di tabella, ogni indice e ogni\npolicy che hai mai scritto stanno lì dentro, e per una app vera è un sacco di\ntesto. Un backup vuoto si annuncia da solo. Questo si ripristina pulito, e la\nprima cosa che ti dice il contrario è una pagina di accesso che nessun account\nriesce a superare.",[88,146],{"alt":147,"caption":148,"src":149},"Due file affiancati. Quello di sinistra è tratteggiato e contiene due griglie di tabella vuote accanto a un contorno vuoto dove dovrebbe stare una scheda, ed è barrato. Quello di destra contiene le stesse due tabelle con le righe piene e, al posto del contorno vuoto, una scheda rigata con tre persone. Ha una spunta.","Lo stesso comando scrive entrambi. Quale dei due hai in mano dipende da un flag, ed entrambi si ripristinano senza un errore.","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fthe-plan-and-the-contents-1600x620.png",[39,151,153],{"id":152},"come-controllo-il-dump-che-ho-già","Come controllo il dump che ho già?",[10,155,156,157,159],{},"Aprilo in un editor di testo e cerca ",[17,158,19],{},". Quello che salta fuori mette il tuo\nfile in uno di tre gruppi.",[161,162,163,176,193],"ol",{},[164,165,166,169,170,172,173,175],"li",{},[25,167,168],{},"Nessuna corrispondenza."," Lo schema ",[17,171,19],{}," non è in questo file in nessuna\nforma. È quello che scrive un ",[17,174,29],{}," nudo.",[164,177,178,192],{},[25,179,180,181,184,185,188,189,62],{},"Corrispondenze, ma solo in righe che iniziano con ",[17,182,183],{},"CREATE",", ",[17,186,187],{},"ALTER"," o\n",[17,190,191],{},"GRANT"," Hai il disegno del registro e nessuno dentro.",[164,194,195,209,210,213],{},[25,196,197,198,201,202,205,206],{},"Una riga ",[17,199,200],{},"COPY \"auth\".\"users\""," oppure ",[17,203,204],{},"COPY auth.users",", con righe di dati\nsotto fino a una riga che contiene ",[17,207,208],{},"\\."," Oppure una sequenza di righe che\niniziano con ",[17,211,212],{},"INSERT INTO \"auth\".\"users\"",". I tuoi account ci sono.",[10,215,216],{},"Se preferisci farlo da riga di comando, due grep rispondono alla stessa domanda:",[126,218,221],{"className":219,"code":220,"language":131},[129],"grep -c 'auth.*users' backup.sql\ngrep -n 'COPY .*auth.*users\\|INSERT INTO .*auth.*users' backup.sql\n",[17,222,220],{"__ignoreMap":134},[10,224,225],{},"Il primo dice se lo schema ha raggiunto il file. Il secondo dice se ci sono\narrivate le persone. Uno zero da entrambi, su un file su cui contavi, è meglio\nscoprirlo oggi che la mattina in cui ti serve.",[10,227,228,229,231,232,62],{},"Cerca anche ",[17,230,74],{}," già che ci sei, e leggi con attenzione quello che trovi.\nQuelle righe sono la lista dei tuoi file caricati, che è una cosa diversa dai\nfile, e\n",[77,233,235],{"href":234},"\u002Fblog\u002Fsupabase-storage-backup","nessun backup di database su nessun piano contiene quelli",[39,237,239],{"id":238},"come-esporto-gli-utenti-auth-di-supabase","Come esporto gli utenti auth di Supabase?",[10,241,242],{},"Con il comando dei dati, che è un comando diverso da quello che scrive lo\nschema.",[10,244,245,246,251],{},"La\n",[77,247,250],{"href":248,"rel":249},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fmigrating-within-supabase\u002Fbackup-restore",[81],"guida a backup e ripristino","\ndi Supabase pubblica il backup come tre file, e vale la pena vederli insieme\nperché la forma è la risposta:",[126,253,256],{"className":254,"code":255,"language":131},[129],"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":134},[10,259,260],{},"La seconda riga è quella che viene lanciata da sola. La terza è quella con\ndentro i tuoi utenti.",[10,262,263,264,266],{},"Questi due fatti sembrano una contraddizione e non lo sono. La frase sulla\npagina di riferimento di Supabase riguardo all'esclusione di ",[17,265,19],{}," descrive il\ndump dello schema, e il dump dei dati percorre anche quello schema.",[10,268,269],{},"Se vuoi solo gli account, nomina lo schema e ottieni quel cassetto da solo:",[126,271,274],{"className":272,"code":273,"language":131},[129],"supabase db dump --db-url \"postgresql:\u002F\u002F…\" -f users.sql --data-only --use-copy --schema auth\n",[17,275,273],{"__ignoreMap":134},[10,277,278,285,286,288],{},[25,279,280,281,284],{},"Prima di fidarti di uno qualsiasi di questi, aggiungi ",[17,282,283],{},"--dry-run"," e leggi\nquello che torna."," Stampa il comando ",[17,287,107],{}," che lo strumento sta per\nlanciare senza lanciarlo, così vedi con i tuoi occhi quali schemi sono inclusi e\nquali esclusi sulla versione che hai installato. Leggi quell'output una volta e\nnon dovrai più credere a questo articolo, né a nessun altro, il che conta\nperché i flag si spostano davvero tra le release e il file ha lo stesso aspetto\nin entrambi i casi.",[10,290,291,292,299],{},"C'è anche la via diretta, ed\n",[77,293,295,296,298],{"href":294},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","è a questo che serve un ",[17,297,107],{}," semplice",":\nnomina i cassetti che vuoi e se li prende.",[126,301,304],{"className":302,"code":303,"language":131},[129],"pg_dump \"postgresql:\u002F\u002F…\" --schema public --schema auth --schema storage \\\n  --no-owner --file backup.sql\n",[17,305,303],{"__ignoreMap":134},[10,307,308,309,311],{},"Una cosa da notare sul file di schema, perché spiega perché tutto questo è\ndiviso. Un progetto Supabase nuovo arriva con uno schema ",[17,310,19],{}," già costruito,\nnella versione che il servizio di accesso fa girare oggi. Rigiocarci sopra la\nversione del tuo vecchio progetto metterebbe un disegno più vecchio sopra uno\nche funziona. Quello che vuoi portare dall'altra parte è il contenuto del\nregistro, ed è quello che tiene il file di dati.",[39,313,315],{"id":314},"cosa-si-rompe-quando-rimetti-dentro-gli-utenti","Cosa si rompe quando rimetti dentro gli utenti",[10,317,318],{},"Due cose, e Supabase le documenta entrambe.",[10,320,321,324],{},[25,322,323],{},"I trigger, che possono cifrare una colonna due volte."," Il comando di\nripristino della guida di Supabase ha in mezzo un'istruzione facile da leggere\ncome riempitivo:",[126,326,329],{"className":327,"code":328,"language":131},[129],"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":134},[10,332,333],{},"Quella riga in mezzo spegne i trigger per tutta la durata, e la guida dice che\nsta lì per impedire che le colonne vengano cifrate una seconda volta mentre\nentrano. Rigioca un file di dati senza di lei e le password arrivano già\nmescolate da un processo che era già stato applicato, e niente dopo lo disfa.",[10,335,336,339,340,343,344,347,348,343,351,354],{},[25,337,338],{},"Proprietà e permessi, che fermano il rigioco."," Un dump preso da un progetto\nSupabase porta righe che si riferiscono a ruoli che il progetto nuovo non ti\nlascia toccare. Le note di risoluzione dei problemi della stessa guida dicono di\ncommentare qualsiasi riga che contenga ",[17,341,342],{},"ALTER ... OWNER TO \"supabase_admin\""," in\n",[17,345,346],{},"schema.sql",", e una riga precisa ",[17,349,350],{},"GRANT \"postgres\" TO \"cli_login_postgres\"",[17,352,353],{},"roles.sql",". Entrambe sono una modifica di testo prima di partire, ed entrambe\nfermano il rigioco con la riga su cui si è inceppato stampata sullo schermo.",[39,356,358],{"id":357},"i-miei-utenti-devono-rifare-il-login","I miei utenti devono rifare il login?",[10,360,361],{},"Le loro password passano. Le loro sessioni no, a meno che tu non porti con loro\nuna cosa in più.",[10,363,364,365,367,368,373],{},"Supabase dice che puoi migrare ogni tabella dello schema ",[17,366,19],{},",\n",[77,369,372],{"href":370,"rel":371},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Ftroubleshooting\u002Fmigrating-auth-users-between-projects",[81],"utenti e loro password hashate compresi",",\nquindi nessuno deve reimpostare una password che aveva già. Nessuna password è\nleggibile in nessun momento di tutto questo; quello che si sposta è il suo hash.",[10,375,376,377,118,380,383,384,62],{},"Una sessione è un'altra cosa. È provata da un token firmato con il segreto JWT\ndel tuo progetto, e ogni progetto ha il suo. Supabase dice che se il progetto\nnuovo firma con un altro segreto, ogni token già presente nel browser di\nqualcuno diventa invalido e a quella persona viene chiesto di accedere di nuovo.\nPuoi evitarlo mettendo il segreto del vecchio progetto su quello nuovo, e sulla\nstessa pagina c'è scritto il prezzo: cambiare il segreto JWT rigenera le chiavi\n",[17,378,379],{},"anon",[17,381,382],{},"service_role"," di quel progetto, quindi alla tua app vanno date quelle\nnuove prima che possa parlare con qualcosa. Quale chiave è quale, e quale di\nloro può stare nella tua app, è\n",[77,385,387],{"href":386},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","la cosa su cui essere sicuro prima di incollarne una",[10,389,390,391,393],{},"Quindi la versione onesta è che un ripristino di solito chiede a tutti di\naccedere una volta. Quella è una mail al supporto. Non è un account perso, e la\ndifferenza tra le due cose è se lo schema ",[17,392,19],{}," era nel tuo file.",[10,395,396,397,400],{},"Tre cose continuano a non esserci, qualunque cosa tu faccia con i flag. I tuoi\nfile caricati, perché Storage tiene i byte fuori dal database e\n",[77,398,399],{"href":234},"nessun dump su nessun piano li raggiunge",". Le\ntue edge function, che sono un download a parte e le cui import map, nota\nSupabase, non vengono prese automaticamente. E le impostazioni del tuo progetto,\nche sono configurazione e non dati e si riscrivono a mano.",[39,402,404],{"id":403},"cosa-fare-questa-settimana","Cosa fare questa settimana",[406,407,408],"key-takeaways",{},[409,410,411,417,426,432,439],"ul",{},[164,412,413,414,416],{},"Prendi il file di backup più recente che hai e cercaci dentro ",[17,415,19],{},". Gruppo uno, due o tre della sezione qui sopra, e lo saprai in un minuto.",[164,418,419,420,118,422,425],{},"Se è gruppo uno o due, prendi oggi un dump dei dati con ",[17,421,117],{},[17,423,424],{},"--use-copy",", e tienilo accanto al file di schema invece che al suo posto. Ti servono entrambi.",[164,427,428,429,431],{},"Aggiungi ",[17,430,283],{}," al comando su cui ti fermi e leggi l'output una volta, così sai quali cassetti prende la tua versione dello strumento.",[164,433,434,435,438],{},"Scriviti l'ordine del ripristino dove lo ritrovi: roles, poi schema, poi ",[17,436,437],{},"SET session_replication_role = replica",", poi data.",[164,440,441],{},"Ripristina una volta in un progetto usa e getta, e poi prova ad accedere come un utente vero. È l'unico controllo che verifica la cosa di cui parla questo articolo.",[10,443,444,445,448],{},"Farlo una volta a mano vale la pena comunque tu finisca per fare i backup,\nperché finché non hai aperto un dump hai avuto solo la parola backup. Se\ncontinuare a mano è un'altra domanda, e\n",[77,446,447],{"href":294},"le tre vie e quanto costa ciascuna","\nè il posto in cui si risponde.",[39,450,452],{"id":451},"dove-si-colloca-reeve-care","Dove si colloca Reeve Care",[10,454,455],{},"Care prende la copia secondo un calendario, e il registro è dentro.",[88,457],{"alt":458,"caption":459,"src":460},"Un pannello Reeve Care con due righe. Nella prima, un contorno tratteggiato di account contiene un database e un registro di persone, ed entrambi lo lasciano su una freccia verso un file chiuso a chiave che viene riletto con una lente e spuntato. Nella seconda, una scheda con un pulsante rimanda le righe del database dentro l'account mentre il registro al suo interno resta acceso e intatto.","La copia tiene le tue tabelle e i tuoi account. Il pulsante di ripristino rimette le tue tabelle e lascia gli account dove sono.","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcare-the-register-comes-too-1600x560.png",[409,462,463,474,484,490],{},[164,464,465,169,468,470,471,473],{},[25,466,467],{},"I tuoi account sono nella copia.",[17,469,19],{}," viaggia con le tue tabelle, perché una copia di una app Supabase senza i suoi utenti è una copia della metà. Le righe ",[17,472,74],{}," che descrivono i tuoi file vengono anche loro, e i file stessi appena colleghi una credenziale Storage.",[164,475,476,479,480,483],{},[25,477,478],{},"Il pulsante di ripristino rimette le tue tabelle e lascia stare gli account."," Rigiocare ",[17,481,482],{},"auth.users"," su un progetto vivo scollega tutti e riporta indietro account che qualcuno aveva cancellato apposta, quindi quella resta una richiesta con una persona sopra. Così premere il pulsante nel panico non può scollegare i clienti che stavi cercando di aiutare.",[164,485,486,489],{},[25,487,488],{},"La copia viene riletta prima di contare come presa."," La data sulla tua dashboard è l'ultima volta che una copia è stata aperta e verificata, mai il momento in cui un lavoro è partito o un file è atterrato.",[164,491,492,495],{},[25,493,494],{},"Il ripristino prende prima un'istantanea dello stato attuale",", così il ripristino stesso ha un annulla.",[10,497,498,499,503],{},"Care parte da €49 al mese per una app. È un prezzo di listino, e la\n",[77,500,502],{"href":501},"\u002Fpricing","pagina dei prezzi"," a volte sta sotto la cifra qui e mai sopra.",[10,505,506,507,62],{},"Come una copia viene presa, controllata e rimessa è disegnato passo per passo\nsulla ",[77,508,510],{"href":509},"\u002Fsupabase-backups","pagina dei backup Supabase",[10,512,513,514,516,517,521],{},"Prima di chiudere questa scheda, apri il tuo dump più recente e cercaci dentro\n",[17,515,19],{},". È il modo più veloce per scoprire se quello che stavi chiamando backup\nti restituirebbe i tuoi clienti, e se la risposta è no,\n",[77,518,520],{"href":519},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","ripristinarne uno come si deve"," è la\nprossima cosa da leggere.",{"title":134,"searchDepth":523,"depth":523,"links":524},3,[525,527,528,529,530,531,532,533],{"id":41,"depth":526,"text":42},2,{"id":95,"depth":526,"text":96},{"id":152,"depth":526,"text":153},{"id":238,"depth":526,"text":239},{"id":314,"depth":526,"text":315},{"id":357,"depth":526,"text":358},{"id":403,"depth":526,"text":404},{"id":451,"depth":526,"text":452},"Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcover-1200x630.png","Un file sigillato con tre righe di dati, e accanto un registro rigato di persone rimasto fuori e tagliato dal bordo della cornice.","Lancia supabase db dump da solo e ottieni la forma del tuo database e nessuna delle sue righe, senza lo schema auth in cui vivono i tuoi utenti.",false,"md",[541,543,546,548,551,554],{"q":42,"a":542},"Dipende da quale comando ha scritto il file. I tuoi utenti vivono in uno schema chiamato auth, che appartiene al servizio di accesso. Un supabase db dump nudo lascia fuori auth e non contiene nessuna riga di niente, perché il dump predefinito è solo lo schema. La metà dati del dump, un secondo comando con il flag --data-only, è quella che porta i tuoi utenti. Supabase pubblica il backup come tre comandi esattamente per questo.",{"q":544,"a":545},"Perché auth.users manca dal mio dump?","Perché quasi sicuramente hai lanciato il dump dello schema. Supabase documenta che il comando esclude i suoi schemi gestiti, che tra quelli ignorati ci sono auth e storage, e che il dump predefinito non contiene dati del tutto. È voluto: un progetto nuovo arriva con il proprio schema auth già costruito dal servizio di accesso, quindi rigiocarci sopra una copia più vecchia sostituirebbe qualcosa che funziona. Quello che vuoi spostare è il contenuto, e lo porta il dump dei dati.",{"q":239,"a":547},"Con il comando dei dati, che è separato dal comando dello schema. Lancia supabase db dump con --data-only e --use-copy per scrivere un file di dati, e le tabelle di auth vengono con lui. Se vuoi solo gli account, aggiungi --schema auth e ottieni un file che contiene quello schema soltanto. Prima di fidarti di uno dei due, aggiungi --dry-run: stampa il comando pg_dump che la CLI sta per lanciare senza lanciarlo, così leggi quali schemi sono inclusi nella versione che hai.",{"q":549,"a":550},"Le password sopravvivono a un ripristino Supabase?","Sì, se lo schema auth era nel file. Supabase dice che puoi migrare ogni tabella dello schema auth, password hashate comprese, così nessuno deve reimpostarle o ricrearle. L'unica cosa che può rovinarle è rigiocare i dati senza prima disattivare i trigger, ed è per questo che Supabase mette SET session_replication_role = replica in mezzo al suo stesso comando di ripristino. Salta quella riga e una colonna già cifrata viene cifrata una seconda volta mentre entra.",{"q":552,"a":553},"I miei utenti resteranno collegati dopo un ripristino?","No, se il progetto nuovo firma con un altro segreto. Una sessione è provata da un token firmato con il segreto JWT del progetto, e Supabase dice che un segreto nuovo rende invalidi i token esistenti, quindi a tutti viene chiesto di accedere di nuovo. Puoi portarti dietro il vecchio segreto e tenerli collegati, ma Supabase dice anche che cambiare il segreto JWT rigenera le chiavi anon e service_role di quel progetto, quindi la tua app ha bisogno di quelle nuove.",{"q":555,"a":556},"Cos'altro lascia fuori un dump di Supabase?","I tuoi file caricati, prima di tutto. Storage tiene una riga nel tuo database per ogni file e il file stesso da un'altra parte, quindi nessun dump di database su nessun piano contiene i byte. Le edge function sono un download a parte, e Supabase nota che le import map e i file deno.json non vengono presi automaticamente. Le impostazioni del progetto, i provider auth e i segreti sono configurazione e non dati e vivono nella dashboard, quindi si riscrivono a mano in un progetto nuovo.","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",[559,560,561,562,563,564,565,566],"supabase backup auth users","esportare utenti supabase","supabase db dump schema auth","migrare utenti auth supabase","backup supabase senza utenti","supabase auth.users export","ripristinare utenti supabase","supabase dump esclude auth",{},true,"\u002Fblog\u002Fsupabase-backup-auth-users","2026-09-23",{"title":5,"description":537},"blog\u002Fsupabase-backup-auth-users",[574,575,576],"Supabase pubblica il suo backup come tre comandi. Quello che hai probabilmente lanciato è il secondo, e i tuoi utenti stanno nel terzo.","Lancia supabase db dump senza altri flag e ottieni la forma delle tue tabelle e niente del loro contenuto, e lo schema auth in cui vivono i tuoi utenti resta fuori perfino da quello.","Una sola ricerca nel file che hai già ti dice quale di tre cose stai tenendo in mano.","VgX9pqfhOi9xq5Jsxg61tPaVeohLKKNxITHALeuoVAs",[579,586,592,598,604,610,616,622,628,634,640,646,652,658,664,670,675,681,687,688,694,700,706,712,718,724,730,736,741,747,753,759,765,771,777,783,789,795,801,807,813,819,825,831,837,843,849,855,861,866,872,878,884,890,895,901,907,913,918,923],{"path":580,"title":581,"description":582,"published":583,"category":584,"image":585,"draft":538},"\u002Fblog\u002Fbase44-security-scan","Scansione di sicurezza Base44: ciò che vede solo lei","La scansione di sicurezza Base44 controlla sette tipi di problema dall’interno. Ecco la metà che legge e che nessun altro legge, e quella che non guarda mai.","2026-10-10","Basi della sicurezza","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":587,"title":588,"description":589,"published":590,"category":584,"image":591,"draft":538},"\u002Fblog\u002Fapi-key-leaked-what-to-do","La tua chiave API è trapelata. L'ordine in cui muoverti","Una chiave API è trapelata e non sai da cosa cominciare. Non tutte le chiavi nel frontend lo sono, e l'ordine conta più della velocità.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":593,"title":594,"description":595,"published":596,"category":584,"image":597,"draft":538},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" senza disattivare RLS","\"Infinite recursion detected in policy for relation\" significa che la tua policy ha interrogato la tabella che protegge. Ecco come rompere il cerchio.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":599,"title":600,"description":601,"published":602,"category":584,"image":603,"draft":538},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" su Supabase, e la correzione sbagliata","\"No API key found in request\" significa che la tua richiesta è arrivata a Supabase senza chiave. Quasi tutte le risposte indicano le regole del database.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":605,"title":606,"description":607,"published":608,"category":584,"image":609,"draft":538},"\u002Fblog\u002Fis-base44-safe","Base44 è sicuro? Cosa abbiamo trovato in 5.442 app","Base44 è sicuro? Abbiamo passato nove controlli su 5.442 app Base44 online. Quasi tutte hanno preso B, per motivi che il proprietario non ha mai scelto.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":611,"title":612,"description":613,"published":614,"category":584,"image":615,"draft":538},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","Nascondere una chiave API: spostala in una Edge Function Supabase","Nascondere una chiave API vuol dire toglierla dal browser, e una Edge Function Supabase è il posto più piccolo dove metterla. Due passaggi contano di più.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":617,"title":618,"description":619,"published":620,"category":584,"image":621,"draft":538},"\u002Fblog\u002Fenv-file-exposed-on-your-server","Il tuo file .env è esposto? I dodici percorsi da provare","Il tuo file .env è esposto sul tuo server web? Dodici indirizzi te lo dicono, e una risposta significa che tutto quello che contiene è già pubblico.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":623,"title":624,"description":625,"published":626,"category":584,"image":627,"draft":538},"\u002Fblog\u002Fis-v0-safe","Sicurezza di v0: tutte le 1.790 app v0 analizzate hanno preso A","La sicurezza di v0 misurata su 1.790 app v0 online: tutte hanno preso A. Solo 17 nominavano un database, ed è soprattutto questo che misura quella A.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":629,"title":630,"description":631,"published":632,"category":584,"image":633,"draft":538},"\u002Fblog\u002Fis-bolt-safe","Bolt è sicuro? Cosa abbiamo trovato in 1.123 app Bolt","Bolt è sicuro? Abbiamo passato 1.123 app Bolt online per nove controlli. L’hosting era pulito. I rilievi erano chiavi e tabelle aperte dentro le app.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":635,"title":636,"description":637,"published":638,"category":584,"image":639,"draft":538},"\u002Fblog\u002Fis-supabase-down-or-your-app","Supabase è down o è la tua app? Come capirlo","Supabase è down o è la tua app? Un progetto in pausa, un database pieno e un tuo errore sembrano la stessa cosa. Quattro controlli li separano.","2026-10-01","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",{"path":641,"title":642,"description":643,"published":644,"category":584,"image":645,"draft":538},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","Supabase crittografa i miei dati? Sì. Ecco da cosa protegge","Supabase crittografa i dati? Sì: AES-256 a riposo, TLS in transito, SOC 2 e ISO 27001. Cosa copre ciascuno, e la fuga di dati che nessuno di questi ferma.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":647,"title":648,"description":649,"published":650,"category":584,"image":651,"draft":538},"\u002Fblog\u002Fsupabase-free-plan-limits","Supabase: prezzi e limiti del piano gratuito, uno per uno","Prezzi e limiti del piano gratuito di Supabase: 500 MB di database, 5 GB di egress e nessun backup. Cosa succede a ogni soglia e cosa cambia Pro a $25.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":653,"title":654,"description":655,"published":656,"category":534,"image":657,"draft":538},"\u002Fblog\u002Ftest-your-supabase-backup","Testa il tuo backup di Supabase prima del giorno in cui serve","Come testare il tuo backup di Supabase: ripristinarlo in un progetto di prova, contare le righe, accedere e cercare la riga che manca a un file troncato.","2026-09-28","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":659,"title":660,"description":661,"published":662,"category":534,"image":663,"draft":538},"\u002Fblog\u002Fsupabase-backup-github-action","Backup gratis di Supabase con una GitHub Action, e il tranello","Un backup di Supabase con una GitHub Action è gratis e va bene per molte app. Il workflow, la connection string giusta e l'egress di ogni esecuzione.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":665,"title":666,"description":667,"published":668,"category":534,"image":669,"draft":538},"\u002Fblog\u002Fdownload-your-supabase-backup","Perché non puoi scaricare il tuo backup di Supabase","Non puoi scaricare il tuo backup di Supabase su un progetto recente, perché la copia giornaliera è uno snapshot fisico. Come verificarlo e tenere una copia tua.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":671,"title":672,"description":673,"published":668,"category":584,"image":674,"draft":538},"\u002Fblog\u002Fsupabase-permission-denied-for-table","Supabase \"permission denied for table\": il grant mancante","Dal 30 ottobre una nuova tabella di Supabase risponde \"permission denied for table\" finché non concedi l'accesso. Il grant della mail è metà della soluzione.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":676,"title":677,"description":678,"published":679,"category":584,"image":680,"draft":538},"\u002Fblog\u002Fopen-api-endpoint-exposed","Un endpoint API aperto è un problema di sicurezza? Leggi il JSON","La tua scansione ha segnalato un endpoint API aperto. Quanto conti dipende da che cosa è tornato, e la maggior parte di quelli trovati era della piattaforma.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":682,"title":683,"description":684,"published":685,"category":584,"image":686,"draft":538},"\u002Fblog\u002Flovable-security-scan","Scansione di sicurezza Lovable: cosa non può dimostrare","Scansione di sicurezza Lovable: cosa controllano Quick scan e Deep scan, quando parte ciascuno, e l’unica cosa che nessuna scansione dall’interno dimostra.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":569,"title":5,"description":537,"published":570,"category":534,"image":557,"draft":538},{"path":689,"title":690,"description":691,"published":692,"category":584,"image":693,"draft":538},"\u002Fblog\u002Fdomain-and-certificate-expiry","Dominio scaduto, sito offline: cosa succede adesso","Il tuo dominio è scaduto e il sito è offline. Il conto alla rovescia che parte, perché il certificato è il problema minore, e come controllarli entrambi.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":695,"title":696,"description":697,"published":698,"category":584,"image":699,"draft":538},"\u002Fblog\u002Fis-lovable-safe","Lovable è sicuro? Cosa abbiamo trovato in 18.554 app Lovable","Lovable è sicuro? Abbiamo passato 18.554 app Lovable online per nove controlli. La piattaforma è risultata la più pulita di cinque. I rilievi stavano nelle app.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":701,"title":702,"description":703,"published":704,"category":584,"image":705,"draft":538},"\u002Fblog\u002Fvibe-coded-app-security-checklist","La checklist di sicurezza del vibe coding, in nove controlli","Una checklist di sicurezza del vibe coding in nove voci, ognuna verificabile dall’esterno sulla tua app dal vivo, e ognuna con un test di una riga.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":707,"title":708,"description":709,"published":710,"category":584,"image":711,"draft":538},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Una chiave segreta Stripe nel frontend può muovere denaro","Una chiave segreta Stripe esposta nel tuo frontend può rimborsare, addebitare e leggere ogni scheda cliente che hai. La tua chiave pk_live_ ci sta bene.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":713,"title":714,"description":715,"published":716,"category":584,"image":717,"draft":538},"\u002Fblog\u002Fvite-and-next-public-env-vars","Variabili d’ambiente Vite esposte: il prefisso vuol dire pubblica","Variabili d’ambiente Vite esposte: la tua app ha fatto ciò che il prefisso chiedeva. VITE_ e NEXT_PUBLIC_ vogliono dire pubblica, e l’IA non sapeva il costo.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":719,"title":720,"description":721,"published":722,"category":584,"image":723,"draft":538},"\u002Fblog\u002Fbase44-source-maps","Sicurezza Base44: cosa segnala uno scan e cosa tocca a te sistemare","Sicurezza Base44 su 5.438 app scansionate: tre segnalazioni su quasi tutte sono della piattaforma, la source map è il badge di Base44, la tua parte è corta.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":725,"title":726,"description":727,"published":728,"category":584,"image":729,"draft":538},"\u002Fblog\u002Fis-cursor-ai-safe","Cursor AI è sicuro? L’editor, il codice e l’app che hai pubblicato","Cursor AI è sicuro? Tre domande in una ricerca: cosa tiene Cursor, cosa sbaglia il codice che scrive, e se l’app che hai pubblicato è aperta.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":731,"title":732,"description":733,"published":734,"category":584,"image":735,"draft":538},"\u002Fblog\u002Fis-replit-safe","Replit è sicuro? Cosa abbiamo trovato in 3.042 app Replit online","Replit è sicuro? Abbiamo passato 3.042 app Replit online per nove controlli esterni. I rilievi stavano nell’app pubblicata, non nell’host.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":234,"title":737,"description":738,"published":739,"category":534,"image":740,"draft":538},"Supabase storage backup: la copia del database non ha nessun file","Un Supabase storage backup è un lavoro a parte. I backup del database tengono la lista dei tuoi file e nessuno dei file, quindi ogni upload resta rotto.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":742,"title":743,"description":744,"published":745,"category":534,"image":746,"draft":538},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Point-in-time recovery di Supabase: prezzo e limiti","Il point-in-time recovery di Supabase riavvolge il database a qualsiasi secondo della settimana scorsa. $100 al mese oltre a Pro, e copre solo il database.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":748,"title":749,"description":750,"published":751,"category":534,"image":752,"draft":538},"\u002Fblog\u002Fsupabase-project-paused-recover","Progetto Supabase in pausa? I tuoi dati sono ancora lì","Supabase ha messo in pausa il tuo progetto dopo una settimana senza attività. Non è cancellato niente, Ripristina è accanto al nome e hai un anno di tempo.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":754,"title":755,"description":756,"published":757,"category":584,"image":758,"draft":538},"\u002Fblog\u002Fsafest-ai-app-builder","Qual è il builder di app con IA più sicuro? 30.998 app testate","Qual è il builder di app con IA più sicuro? Abbiamo scansionato 30.998 app online di Lovable, Base44, Replit, v0 e Bolt. Non è il builder a decidere il voto.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":760,"title":761,"description":762,"published":763,"category":584,"image":764,"draft":538},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Attiva Row Level Security su ogni tabella Supabase, poi verificalo","Attivare Row Level Security su Supabase senza una policy chiude del tutto la tabella. Una policy senza il flag non fa nulla. Ecco lo SQL, e la verifica.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":766,"title":767,"description":768,"published":769,"category":584,"image":770,"draft":538},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": cosa non vede l'avviso","Supabase segnala \"RLS disabled in public\" come errore. Non dice nulla della policy di lettura che lascia la tua tabella altrettanto aperta.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":772,"title":773,"description":774,"published":775,"category":584,"image":776,"draft":538},"\u002Fblog\u002Frotate-supabase-service-role-key","Come ruotare una chiave service_role Supabase trapelata","Supabase dice di chiudere prima la falla. Altre guide dicono di ruotare subito. Quale sia giusto dipende da dove è finita la tua chiave service_role.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":778,"title":779,"description":780,"published":781,"category":584,"image":782,"draft":538},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Scanner di sicurezza per vibe coding a confronto, il nostro incluso","Il miglior scanner di sicurezza per vibe coding dipende da tre domande che nessun elenco di funzioni affronta. Dieci strumenti a confronto, con i prezzi.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":784,"title":785,"description":786,"published":787,"category":584,"image":788,"draft":538},"\u002Fblog\u002Fsupabase-security-checker","Supabase security checker: i cinque controlli da fare da soli","Un Supabase security checker legge la tua app pubblicata invece delle impostazioni del progetto. Ecco i cinque controlli che esegue e come farli da solo.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":790,"title":791,"description":792,"published":793,"category":584,"image":794,"draft":538},"\u002Fblog\u002Fvibe-coding-security-scanner","Scanner di sicurezza per vibe coding: cosa si perde","Uno scanner di sicurezza per vibe coding legge la tua app dal vivo, da fuori. Cosa copre, le quattro cose che non può vedere e come leggere il risultato.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":796,"title":797,"description":798,"published":799,"category":584,"image":800,"draft":538},"\u002Fblog\u002Fmissing-security-headers","Intestazioni di sicurezza mancanti: quando contano","Le intestazioni di sicurezza mancanti sono il rilievo che il nostro scanner stampa più spesso. Da cosa proteggono e quando sono la riga meno urgente.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":802,"title":803,"description":804,"published":805,"category":584,"image":806,"draft":538},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","La tua chiave API OpenAI è esposta nel frontend. Ruotala.","Una chiave API OpenAI esposta nel frontend non si può legare a nessun dominio. Ruotala oggi, sposta la chiamata sul tuo server e metti un tetto di spesa.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":808,"title":809,"description":810,"published":811,"category":584,"image":812,"draft":538},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","Chiave API esposta nel frontend: cosa spediscono 30.998 app","Una chiave API esposta nel tuo frontend è quasi sempre una chiave di Google Maps. Abbiamo scansionato 30.998 app vibe-coded e contato cosa esce davvero.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":814,"title":815,"description":816,"published":817,"category":534,"image":818,"draft":538},"\u002Fblog\u002Fsupabase-backup-tools-compared","Strumenti di backup Supabase a confronto, il nostro incluso","Quattro tipi di strumento di backup Supabase, cosa copia davvero ognuno, e il caso in cui una GitHub Action gratuita batte il pagare chiunque, noi inclusi.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":820,"title":821,"description":822,"published":823,"category":584,"image":824,"draft":538},"\u002Fblog\u002Freplit-secrets-explained","Come usare i secret su Replit, e cosa viene comunque pubblicato","Come usare i secret su Replit: aggiungerne uno, rileggerlo e risolvere le due cause dell'undefined. E le chiavi che lo strumento non riesce a proteggere.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":826,"title":827,"description":828,"published":829,"category":534,"image":830,"draft":538},"\u002Fblog\u002Fback-up-supabase-free-tier","Backup del piano gratuito Supabase: farne uno senza terminale","Sul piano gratuito Supabase non esistono backup: la copia la fai tu. Come farne uno dalla dashboard e che cosa si lascia dietro la via del CSV.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":832,"title":833,"description":834,"published":835,"category":584,"image":836,"draft":538},"\u002Fblog\u002Fis-supabase-secure","Supabase è sicuro? Sì. Il tuo progetto è un'altra questione","Supabase è sicuro? La piattaforma è certificata, cifrata e sottoposta a pentest. La loro documentazione dice dove finisce quello e iniziano le tue impostazioni.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":838,"title":839,"description":840,"published":841,"category":584,"image":842,"draft":538},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Dove trovare le chiavi API di Supabase: anon, service_role e URL","L'URL del progetto, la chiave anon e la chiave service_role stanno su una pagina della dashboard. Ecco dove si trova e quale dei quattro va nella tua app.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":844,"title":845,"description":846,"published":847,"category":584,"image":848,"draft":538},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","New row violates row-level security policy su Supabase. E adesso?","\"New row violates row-level security policy\" significa che Supabase ha rifiutato una scrittura. La soluzione veloce riapre la tabella a chiunque.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":850,"title":851,"description":852,"published":853,"category":584,"image":854,"draft":538},"\u002Fblog\u002Fcors-wildcard-security-risk","Un wildcard CORS è un rischio di sicurezza? Quasi mai.","Un wildcard CORS è un rischio di sicurezza? Di solito è il valore predefinito del tuo builder e non consegna nulla che il tuo server non desse già a chiunque.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":856,"title":857,"description":858,"published":859,"category":534,"image":860,"draft":538},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","Il branching di Supabase non è un backup. Va solo in avanti.","Perché il branching di Supabase non è un backup: un branch parte senza i tuoi dati e un merge sposta solo lo schema. A cosa serve davvero e cosa usare invece.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":519,"title":862,"description":863,"published":864,"category":534,"image":865,"draft":538},"Come ripristinare un backup Supabase, e cosa si rompe dopo","Come ripristinare un backup Supabase dalla dashboard o da un file di dump, che cosa sostituisce il ripristino e perché la tua app può restare rotta lo stesso.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":867,"title":868,"description":869,"published":870,"category":584,"image":871,"draft":538},"\u002Fblog\u002Fsupabase-storage-bucket-public","Il tuo bucket Supabase Storage è pubblico. È un problema?","Un bucket Supabase Storage pubblico significa che chi ha l'URL di un file può aprirlo. Non significa che qualcuno possa elencare quello che c'è dentro.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":873,"title":874,"description":875,"published":876,"category":584,"image":877,"draft":538},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Una chiave API Google nel frontend è un problema?","Una chiave API Google esposta nel frontend è la chiave che il nostro scanner trova più spesso, e di solito va bene così. Lo decide una impostazione gratuita.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":879,"title":880,"description":881,"published":882,"category":534,"image":883,"draft":538},"\u002Fblog\u002Fai-agent-deleted-my-database","Un agente IA ha cancellato i miei dati Supabase. Cosa recupero?","Un agente IA ha cancellato dati dal tuo database. Quello che puoi recuperare era già deciso prima che partisse, e i prossimi minuti decidono il resto.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":885,"title":886,"description":887,"published":888,"category":584,"image":889,"draft":538},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","Chiunque può leggere il tuo database Supabase? 3.680 app testate","Chiunque può leggere il tuo database Supabase senza fare login? Abbiamo scansionato 30.998 app online create con i builder IA e misurato quante rispondono sì.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":891,"title":892,"description":893,"published":888,"category":584,"image":894,"draft":538},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source map esposte: la tua app sta pubblicando il codice originale","Una source map esposta permette a chiunque di leggere il codice originale della tua app, commenti inclusi. Il controllo da 30 secondi e cosa conta davvero.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":896,"title":897,"description":898,"published":899,"category":584,"image":900,"draft":538},"\u002Fblog\u002Fsupabase-new-api-keys","Le nuove chiavi API di Supabase: quale va nella tua app?","Supabase ha sostituito anon e service_role con chiavi pubblicabili e segrete. Quale sta bene nella tua app, e quale non deve starci mai?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":902,"title":903,"description":904,"published":905,"category":534,"image":906,"draft":538},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","Supabase fa il backup del mio database? Dipende dal tuo piano.","Supabase fa il backup del tuo database? Ogni giorno sui piani a pagamento, mai su quello gratuito. Come capire cosa hai e cosa quella copia non copre.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":908,"title":909,"description":910,"published":911,"category":584,"image":912,"draft":538},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","Supabase Row Level Security è attivo. La tabella resta pubblica.","Attivare Supabase Row Level Security non protegge una tabella. Lo fanno le policy, e quella che ha rimesso in piedi la tua app può far entrare chiunque.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":914,"title":915,"description":916,"published":911,"category":534,"image":917,"draft":538},"\u002Fblog\u002Fversion-history-is-not-a-backup","La cronologia delle versioni non è un backup dei tuoi dati.","Lovable e Bolt tengono una cronologia delle versioni del codice. Il tuo database è un servizio a parte, e tornare indietro non ti restituisce i dati.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":294,"title":919,"description":920,"published":921,"category":534,"image":922,"draft":538},"Tre modi per fare il backup di un database Supabase, e cosa manca","Il pannello, pg_dump e un servizio gestito. Che cosa salva davvero ciascuno, cosa lascia fuori senza dirlo e quale sopravvive alla perdita dell'account.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":386,"title":924,"description":925,"published":921,"category":584,"image":926,"draft":538},"Quali chiavi API sono sicure nel browser e quali no","La tua chiave anon di Supabase è fatta per essere pubblica. La chiave service_role no, e ignora ogni regola che imposti. Come distinguerle.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1791618973729]