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.
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í.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.Presiona «ejecutar» para ver el resultado.
▸ Ejercicios
- Explica con tus palabras por qué
' OR '1'='1rompe un login mal hecho. - Reescribe mentalmente una consulta vulnerable usando un parámetro
?. - Enumera tres defensas contra la inyección SQL vistas en esta lección.
← anterior
fin →