Contenido verificado asociado a este RA
Unidad 1: Ecosistema de Bases de Datos en Entornos Web
Identifica los Sistemas Gestores de Bases de Datos (SGBD) más comunes en aplicaciones web, como MySQL/MariaDB y PostgreSQL, y analiza su arquitectura de integración con lenguajes de servidor como PHP. Se explica el rol de los conectores y extensiones (drivers) y cómo verificar su correcta instalación y configuración en el servidor.
Unidad 2: Conexión Segura y Gestión de Datos (CRUD)
Configura la conexión a un SGBD desde un lenguaje de servidor, gestionando credenciales de forma segura. Se abordan las operaciones CRUD (Crear, Leer, Actualizar, Borrar) para manipular datos y se introducen las consultas preparadas como mecanismo fundamental de seguridad para prevenir la inyección SQL.
Unidad 3: Gestión de Estructuras y Rendimiento
Utiliza el lenguaje de servidor para ejecutar sentencias DDL (Data Definition Language) que permiten crear y modificar la estructura de la base de datos, como tablas y bases de datos. Se analizan técnicas básicas para verificar el funcionamiento y optimizar el rendimiento del sistema, incluyendo la gestión de usuarios y permisos en el SGBD.
Conceptos clave
SGBD Relacional (SQL)SGBD No Relacional (NoSQL)Driver/Extensión de base de datos (ej. PDO, mysqli, pgsql)Stack LAMP/LEMPphpinfo()PDO (PHP Data Objects)DSN (Data Source Name)CRUD (Create, Read, Update, Delete)Inyección SQLConsultas Preparadas (Prepared Statements)Manejo de excepciones (try-catch)DDL (Data Definition Language)DML (Data Manipulation Language)Principio de Mínimo PrivilegioPermisos/Privilegios de SGBD (GRANT, REVOKE)Índices de base de datosOptimización de consultas (Query Performance)Slow Query Log
Errores que conviene evitar
- {"error":"Intentar usar funciones de un SGBD (ej. `mysqli_connect()`) sin que la extensión correspondiente esté habilitada en el servidor.","causa":"El entorno del servidor PHP no ha sido configurado con todos los módulos necesarios para el proyecto. Es común en despliegues nuevos o al migrar de un hosting a otro con diferente configuración.","correccion":"Verificar la configuración del servidor con `phpinfo()` o `php -m` en la línea de comandos. Instalar la extensión que falta (ej. `php-mysql`) y reiniciar el servicio web."}
- {"error":"Concatenar variables de usuario directamente en las consultas SQL.","causa":"Desconocimiento del riesgo de inyección SQL o falsa sensación de seguridad por haber 'validado' los datos previamente con otras funciones.","correccion":"Utilizar siempre consultas preparadas con marcadores de posición para cualquier dato que no sea 100% estático y controlado por el programador. Es la única defensa robusta contra la inyección SQL."}
- {"error":"Almacenar las credenciales de la base de datos en un fichero accesible públicamente desde la web.","causa":"Falta de una estructura de proyecto adecuada. Colocar el fichero de configuración (ej. `config.php`) dentro del directorio raíz del servidor web (`public_html`, `www`).","correccion":"Estructurar el proyecto para que los ficheros con información sensible (credenciales, claves de API) se encuentren fuera del directorio raíz público. El script principal los incluirá usando una ruta del sistema de ficheros (ej. `require '../config/db.php';`)."}
- {"error":"Utilizar el usuario 'root' del SGBD en el fichero de configuración de la aplicación web.","causa":"Comodidad durante el desarrollo y olvido de cambiarlo para producción. Es un riesgo de seguridad catastrófico.","correccion":"Crear siempre un usuario específico para la aplicación con los mínimos privilegios necesarios. Si la aplicación es comprometida, el atacante tendrá un control limitado sobre la base de datos, previniendo que pueda dañar otras bases de datos en el mismo servidor o escalar privilegios."}
- {"error":"Una página que lista muchos registros tarda mucho en cargar y consume muchos recursos del servidor.","causa":"Generalmente, se debe a una consulta `SELECT` sobre una tabla grande sin un índice en la columna usada en el `WHERE` o a la falta de paginación, intentando traer miles de filas a la vez.","correccion":"Analizar la consulta con `EXPLAIN` en el SGBD para ver su plan de ejecución. Añadir índices en las columnas de búsqueda. Implementar paginación en la aplicación (usando `LIMIT` y `OFFSET` en la consulta SQL) para mostrar los resultados en bloques manejables (ej. 20 por página)."}