Fundamentos de seguridad
¿Qué es Supabase? La base de datos que eligió tu builder
Qué es Supabase: la base de datos, el login y el almacenamiento de archivos de tu app. Supabase lleva los servidores; las reglas sobre tus filas son tuyas.

En resumen
- ¿Qué es Supabase? Es donde tu app guarda todo lo que tiene que recordar: tus usuarios y sus contraseñas, las filas detrás de cada lista y los archivos que sube la gente.
- Tu builder casi con seguridad lo eligió por ti mientras creaba el proyecto, y por eso nadie te explicó nunca qué hay dentro.
- Supabase lleva las máquinas. Las reglas sobre quién puede leer qué filas son tuyas, y en una tabla creada con SQL empiezan apagadas.
Tu app funciona. En algún punto de sus ajustes, en un correo sobre una factura o en mitad de un mensaje de Lovable, está la palabra Supabase. Antes o después tienes que averiguar qué es, y el motivo rara vez es la curiosidad: un escaneo mencionó tu proyecto de Supabase, un desarrollador preguntó en qué plan estás, o tu app dejó de guardar cosas y la respuesta está ahí dentro.
Entonces: qué es Supabase. Las demás explicaciones responden a eso como una elección entre herramientas, que es la pregunta que se hace un desarrollador antes de empezar un proyecto. Tú nunca hiciste esa elección. La hizo tu builder en los segundos que tardó en crear el proyecto, y por eso nadie te acompañó nunca por la cosa que ahora guarda todos los datos de tus usuarios.
Esta es la versión para alguien que ya tiene uno.
¿Qué es Supabase, en una frase?
Es donde tu app guarda todo lo que tiene que recordar.
Tus usuarios y sus contraseñas. Las filas detrás de cada lista que muestra tu app. Las imágenes y documentos que sube la gente. Cuando alguien se registra a las dos de la mañana, ese registro aterriza en tu proyecto de Supabase y sigue ahí después de que se cierre la pestaña del navegador.
Debajo está Postgres, una base de datos en uso en producción desde los años noventa que no te va a dar sorpresas. Lo que añade Supabase es todo lo de alrededor: un sistema de login, un sitio para archivos y una forma de que tu app pida datos directamente desde el navegador sin que tú escribas un servidor.
Ahí, en lo último, empiezan tus propias decisiones.
Las cuatro piezas que tienes de verdad
Cuatro, y tu app probablemente está usando al menos dos.
- La base de datos. Tablas de filas: tus usuarios, tus pedidos, tus publicaciones. La parte que la gente quiere decir cuando dice "Supabase".
- Auth. Registrarse, iniciar sesión, restablecer una contraseña. Si tu app tiene cuentas, viven aquí.
- Storage. Archivos subidos, en buckets con nombre. Fotos de perfil, adjuntos, exportaciones.
- Edge functions. Trozos pequeños de código que corren en los servidores de Supabase en vez de en el navegador de tu visitante. Puede que tu app no tenga ninguna, y aun así hay un buen motivo para fijarse en ellas, más abajo.
Tu panel lista más de esas cuatro. Deja el resto en paz hasta que lo que estés construyendo lo necesite.
¿De qué se ocupa Supabase y qué es cosa mía?
Supabase se ocupa de las máquinas. Tú te ocupas de las reglas.
La línea está más arriba de lo que supone casi todo el mundo. Piensa en el proyecto como un local que alquilas. El casero mantiene el edificio, la electricidad y la puerta de la calle. Lo que guardas dentro, y a quién dejas entrar, nunca fue cosa suya.
| Lo que lleva Supabase | Lo que es tuyo |
|---|---|
| Los servidores, la versión de Postgres y las actualizaciones | Qué filas puede leer cada visitante |
| Backups diarios de tu base de datos en los planes de pago, guardados una semana | Si existe una copia en algún sitio al que tu propio proyecto no llegue |
| Cifrar tus datos en sus discos y de camino a tu app | Quién tiene tus claves y cuál de ellas está en tu app |
| Que el sistema de login siga funcionando | Qué archivos de un bucket puede listar cualquiera |
Nada de la columna izquierda falla en silencio: si Supabase tiene una caída, te enteras por tus usuarios en cuestión de minutos. La columna derecha es donde las cosas salen mal sin ruido alguno, porque no se rompe nada. Tu app sigue funcionando exactamente igual que ayer.
¿Mis datos de Supabase son privados por defecto?
Depende de cómo se creó cada tabla, y la forma en que las crea un builder es la que las deja abiertas.
La documentación de Supabase es directa al respecto. Dice que el Table Editor activa Row Level Security por ti cuando creas una tabla en el Dashboard, y que cuando creas una tabla con SQL la activas tú. Row Level Security es el ajuste por tabla que decide qué filas puede leer un visitante. Tu builder escribe SQL, así que una tabla que creó tu builder llega con ese ajuste apagado.
La frase siguiente de la misma página dice qué deja eso: una tabla del esquema
public es alcanzable a través de la Data API, y mientras no actives Row Level
Security y escribas una política, cualquiera que tenga la clave publishable de
tu proyecto puede leer y escribir todas sus filas. Esa clave está en tu app,
donde le corresponde, y cualquiera puede leerla de la página.
Así que lo que hay que ir a mirar es la cerradura de cada tabla, y va por tabla en vez de por proyecto. Cómo activarla y qué es una política es el paso a paso. También contamos cuántas veces falta: 2.096 de las 3.680 apps cuya base de datos Supabase nos respondió tenían al menos una tabla entregando sus filas a un desconocido.
Si prefieres verlo desde fuera en vez de repasar una lista de tablas, nuestro escaneo gratuito le hace a tu proyecto la pregunta que le haría el navegador de un desconocido y te enseña qué contestó. Tarda unos 20 segundos y no necesita cuenta: escanea tu app gratis.
Dónde están tus claves y cuál es pública
Tu página de ajustes de API tiene valores de dos clases, y solo una de las dos pertenece a tu app.
Una clave que empieza por sb_publishable_, llamada anon en un proyecto más
antiguo, está pensada para ser pública y por sí sola no hace más que decir a qué
proyecto pertenece una petición. Una clave que empieza por sb_secret_, llamada
service_role en un proyecto más antiguo, pasa de largo por delante de todas
las reglas que pongas. Supabase lo dice sin rodeos: una clave secreta se salta
Row Level Security, así que hay que mantenerla en el servidor. Ese es también el
buen motivo para fijarse en las edge functions, porque una function es donde
puede ocurrir el trabajo que necesita una clave secreta sin que la clave se
acerque a un navegador.
Dónde está esa página y qué hace cada valor cubre las ubicaciones, y qué claves son seguras en el frontend cubre cómo distinguir dos claves casi idénticas.
Cómo seguir siendo tuyo después de publicar
Lo que encuentres hoy describe la app de hoy. La siguiente tabla que añada tu builder llega con el mismo ajuste por defecto que la anterior, y nadie te manda un mensaje al respecto.
Reeve Monitor vuelve a hacer las preguntas de este artículo, de forma programada:
- las nueve comprobaciones cada hora, en hasta tres apps
- si la app está en pie, cada 60 segundos
- un mensaje cuando un resultado cambia, para que una tabla que se abrió anoche te llegue antes que a un desconocido
- un informe mensual de lo que vio
Reeve Care además guarda una copia de tu base de datos Supabase. Esa es la segunda línea de la columna derecha de arriba, hecha por ti.
- una copia cifrada de tu base de datos Supabase cada noche, guardada donde tu proyecto no llega
- cada copia se verifica antes de contar, contando las filas de cada tabla
- una restauración con un clic cuando la necesites
- también tus archivos subidos, en cuanto conectes una credencial de Storage
- todo lo que hace Monitor
Una tabla que un desconocido puede leer es algo que encuentra una comprobación. Una migración que corrió al revés, o un agente con acceso a tu base de datos, vacía la tabla en su lugar, y así se ve eso desde dentro.
Qué revisar una vez, hoy
Qué hacer
- Entra en Supabase y abre tu propio proyecto. La cuenta es tuya aunque la creara tu builder, y en el panel está cada una de las respuestas de abajo.
- Lee la cerradura de cada tabla en Authentication → Policies. Una tabla con Row Level Security desactivada entrega sus filas a cualquiera que tenga la clave que ya está en tu app, y una política que se lo permite todo a todos cuenta como desactivada.
- Abre Settings → API Keys y averigua cuáles de tus valores son publishable y cuáles secret. Si alguna secreta ha estado alguna vez en tu app, cámbiala en Supabase antes de quitarla del código.
- Mira tus buckets de storage. Un bucket marcado como público le lista todos sus archivos a cualquiera que pregunte, incluidos los que tu app no enseña nunca.
- Guarda una copia de la base de datos en un sitio al que tu proyecto no llegue, porque nada de la lista de arriba devuelve una tabla borrada.
Empieza por las cerraduras de las tablas, porque es lo único de esta lista que un desconocido puede estar usando ya. Si prefieres trabajarlo todo como una lista, la checklist de seguridad en 10 minutos cubre eso y los demás ajustes que conviene leer en una app recién publicada. ¿Es seguro Supabase? se ocupa de la otra pregunta con la que llega la gente, que es si todo esto fue buena idea.
Preguntas frecuentes
¿Qué es Supabase en palabras sencillas?
Es donde tu app guarda todo lo que tiene que recordar, en servidores que mantiene otra persona. Tus usuarios y sus contraseñas, las filas detrás de cada lista que muestra tu app y los archivos que sube la gente viven todos en tu proyecto de Supabase. Está construido sobre Postgres, una base de datos en uso en producción desde los años noventa, con un sistema de login, almacenamiento de archivos y una forma de que tu app pida datos directamente desde el navegador añadidos alrededor.
¿Supabase es una base de datos?
Contiene una, y es más que una. La base de datos es Postgres y es la parte que la gente quiere decir cuando dice Supabase. A su alrededor hay otros tres servicios que tu app puede estar usando: Auth para iniciar sesión, Storage para los archivos subidos y Edge Functions para código que corre en servidores de Supabase en vez de en el navegador de tu visitante. Tu panel lista más de esos cuatro, y puedes dejar el resto en paz hasta que algo lo necesite.
¿Eligió Supabase por mí el builder de mi app?
Casi con seguridad, sí. Lovable, Bolt, v0, Cursor, Replit y Windsurf recurren todos a un Postgres alojado en cuanto tu app necesita recordar algo, y Supabase es la respuesta habitual. Puede que pulsaras un botón que decía conectar una base de datos, o puede que tu builder creara el proyecto sin preguntar. En cualquier caso la cuenta es tuya y puedes entrar en ella, que es lo primero que conviene hacer.
¿Qué partes de la seguridad de Supabase son cosa mía?
Supabase lleva los servidores, la versión de Postgres, las actualizaciones, el cifrado en sus discos y el propio sistema de login. Tuyas son las reglas: qué filas puede leer cada visitante, qué archivos de un bucket son públicos, quién tiene tus claves y cuál de ellas está en tu app, y si existe una copia de tus datos en algún sitio al que tu proyecto no llegue. Nada de la primera lista falla en silencio. Todo lo de la segunda puede estar mal durante meses mientras tu app funciona perfectamente.
¿Mis datos de Supabase son privados por defecto?
Depende de cómo se creó cada tabla. La documentación de Supabase dice que el Table Editor activa Row Level Security por ti cuando creas una tabla en el Dashboard, y que cuando creas una tabla con SQL la activas tú. Un builder escribe SQL, así que las tablas que creó por ti llegan con ese ajuste apagado. Mientras siga apagado y no haya una política escrita, Supabase dice que cualquiera que tenga tu clave publishable puede leer y escribir todas las filas de esa tabla, y esa clave está en tu app, donde cualquiera puede leerla.