queryLab · software_de_entrenamiento en espera
SQL · DCL · seguridad

[SQL] Seguridad: permisos e inyección SQL

GRANT/REVOKE, qué es la inyección SQL y cómo se previene.

El sublenguaje DCL (Data Control Language) gestiona permisos: GRANT concede y REVOKE retira privilegios sobre objetos de la base. Es la primera capa de seguridad: cada usuario solo debería poder hacer lo justo (principio de mínimo privilegio).

La amenaza más famosa contra una base de datos es la inyección SQL: cuando una aplicación construye consultas pegando texto del usuario directamente en el SQL, un atacante puede inyectar código y alterar la consulta.

⚠ el errorEl error: concatenar entrada del usuario dentro del texto SQL ("... WHERE x='" + entrada + "'"). Abre la puerta a la inyección.
✓ la defensaLa solución: consultas parametrizadas / prepared statements, validación de entradas, mínimo privilegio con GRANT/REVOKE, y un ORM que parametrice por ti. En este simulador, además, cada sesión corre en una copia aislada en el navegador: no hay servidor que atacar.

Práctica · ejecuta cada bloque

01Permisos (conceptual)
Así se concede solo lectura a un usuario. En este simulador no hay usuarios, pero es la sintaxis estándar que verás en Oracle/MySQL.
sql-seguridad.sql
Presiona «ejecutar» para ver el resultado.
02Cómo se ve un ataque
Si el login arma ... WHERE user='[texto]' pegando lo que escribe el usuario, este texto malicioso vuelve la condición siempre verdadera. Nunca construyas SQL así.
sql-seguridad.sql
Presiona «ejecutar» para ver el resultado.
03La defensa correcta
Se usan consultas parametrizadas (prepared statements): el valor viaja por un canal aparte y nunca se interpreta como código. El ? es un parámetro, no texto pegado.
sql-seguridad.sql
Presiona «ejecutar» para ver el resultado.

▸ Ejercicios

  1. Explica con tus palabras por qué ' OR '1'='1 rompe un login mal hecho.
  2. Reescribe mentalmente una consulta vulnerable usando un parámetro ?.
  3. Enumera tres defensas contra la inyección SQL vistas en esta lección.
← anterior fin →