Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas

sábado, 7 de marzo de 2026

10 Ejercicios de SQL Resueltos: JOINs, Subconsultas y Agrupaciones (Nivel Universidad)

Las consultas SQL son el pan de cada día de cualquier Ingeniero de Software. Si estás cursando Bases de Datos, sabrás que el profesor no se conforma con un simple SELECT * FROM. Quieren ver si dominas los JOINs, las subconsultas y las funciones de agregación.

En larebelion.com hemos recopilado 10 ejercicios clásicos de exámenes de universidades como la UPM, UPC y UGR para que practiques y arrases en tu evaluación. Todas las soluciones están preparadas para motores estándar como PostgreSQL o MySQL.





1. Agrupación Básica: Total de Alumnos por Grado (UPM)

Enunciado: Dada la tabla alumnos con los campos id, nombre y id_grado, obtén el número total de alumnos matriculados en cada grado.

SELECT id_grado, COUNT(id) AS total_alumnos
FROM alumnos
GROUP BY id_grado;

2. INNER JOIN: Nombres de Alumnos y sus Grados (UGR)

Enunciado: Muestra el nombre del alumno y el nombre del grado que cursa. Tienes las tablas alumnos y grados.

SELECT a.nombre, g.nombre_grado
FROM alumnos a
INNER JOIN grados g ON a.id_grado = g.id;

3. GROUP BY con HAVING: Departamentos Grandes (UPC)

Enunciado: Obtén el nombre de los departamentos que tienen estrictamente más de 5 empleados trabajando en ellos.

SELECT d.nombre_depto, COUNT(e.id) AS num_empleados
FROM departamentos d
INNER JOIN empleados e ON d.id = e.id_depto
GROUP BY d.id, d.nombre_depto
HAVING COUNT(e.id) > 5;

4. LEFT JOIN: Profesores Sin Proyectos (UV)

Enunciado: Lista todos los profesores registrados. Si están dirigiendo un proyecto, muestra el nombre del proyecto; si no, muestra un valor nulo, pero el profesor debe aparecer.

SELECT p.nombre, pr.titulo_proyecto
FROM profesores p
LEFT JOIN proyectos pr ON p.id = pr.id_profesor;

5. Subconsulta en el WHERE: Salarios Superiores a la Media (UC3M)

Enunciado: Muestra los nombres de los empleados que tienen un salario superior al salario medio de toda la empresa.

SELECT nombre, salario
FROM empleados
WHERE salario > (
    SELECT AVG(salario)
    FROM empleados
);

6. Múltiples JOINs: Facturación Total de un Cliente (US)

Enunciado: Calcula cuánto dinero ha gastado en total el cliente con ID = 1001 cruzando las tablas clientes, pedidos y lineas_pedido.

SELECT c.nombre, SUM(lp.cantidad * lp.precio_unitario) AS total_gastado
FROM clientes c
INNER JOIN pedidos p ON c.id = p.id_cliente
INNER JOIN lineas_pedido lp ON p.id = lp.id_pedido
WHERE c.id = 1001
GROUP BY c.id, c.nombre;

7. NOT IN: Clientes Sin Pedidos en el Último Mes (UAM)

Enunciado: Encuentra el nombre y correo de los clientes que no han realizado ningún pedido en enero de 2024.

SELECT nombre, email
FROM clientes
WHERE id NOT IN (
    SELECT id_cliente
    FROM pedidos
    WHERE fecha_pedido >= '2024-01-01' AND fecha_pedido <= '2024-01-31'
);

8. Subconsulta Correlacionada: Empleados Mejor Pagados (UA)

Enunciado: Obtén el nombre de los empleados cuyo salario sea el máximo de su propio departamento.

SELECT e1.nombre, e1.salario, e1.id_depto
FROM empleados e1
WHERE e1.salario = (
    SELECT MAX(e2.salario)
    FROM empleados e2
    WHERE e1.id_depto = e2.id_depto
);

9. COUNT DISTINCT: Asignaturas Impartidas (URJC)

Enunciado: Calcula cuántas asignaturas *diferentes* ha impartido el profesor "Martínez" a lo largo de los años.

SELECT COUNT(DISTINCT id_asignatura) AS asignaturas_unicas
FROM docencia d
INNER JOIN profesores p ON d.id_profesor = p.id
WHERE p.apellidos = 'Martínez';

10. Actualización con Subconsulta (UMA)

Enunciado: Escribe una consulta UPDATE para aumentar en un 10% el sueldo base de todos los desarrolladores (categoría 'IT').

UPDATE empleados
SET salario = salario * 1.10
WHERE id_depto IN (
    SELECT id
    FROM departamentos
    WHERE nombre_depto = 'IT'
);

jueves, 4 de diciembre de 2025

Django Hit By SQL Injection and DoS Vulnerabilities

Recent security releases address two vulnerabilities affecting all supported Django versions, including the upcoming Django 6.0. These vulnerabilities pose significant risks to Django-based applications, potentially leading to SQL injection and denial-of-service (DoS) attacks. It's crucial for developers and security teams to understand and mitigate these risks promptly.

Django Hit By SQL Injection and DoS Vulnerabilities

The first vulnerability, CVE-2025-13372, is a high-severity SQL injection flaw affecting deployments using PostgreSQL. This vulnerability lies within the `FilteredRelation` class and how the ORM manages column aliases. An attacker could exploit this by crafting a malicious dictionary in applications that expose parameters ending in `QuerySet.annotate()` or `QuerySet.alias()`. This allows the attacker to inject SQL fragments into Django-generated queries, potentially enabling them to read, modify, or delete data, or gain broader access to the database than intended.

The second vulnerability, CVE-2025-64460, focuses on service availability, leading to a DoS attack. The flaw is within the XML serializer, specifically the `django.core.serializers.xml_serializer.getInnerText()` method. Due to inefficient string concatenation, a specially crafted XML document can cause the server to consume excessive time and resources during processing. This can lead to high CPU and memory usage, ultimately resulting in a denial of service.

Django has released patched versions 5.2.9, 5.1.15, and 4.2.27 to address these vulnerabilities. The Django team strongly advises upgrading to these versions as soon as possible. Furthermore, it is recommended to review logs for anomalous queries or unusual XML usage patterns and reinforce input validation and perimeter controls to minimize exposure.

Fuente Original: https://unaaldia.hispasec.com/2025/12/inyeccion-sql-y-dos-nuevas-vulnerabilidades-sacuden-el-ecosistema-django.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=inyeccion-sql-y-dos-nuevas-vulnerabilidades-sacuden-el-ecosistema-django

Artículos relacionados de LaRebelión:

Artículo generado mediante LaRebelionBOT

martes, 19 de agosto de 2025

EncryptHub Nuevo Grupo Ruso Ataca Microsoft SQL Server con Ransomware y Mineria de Criptomonedas

Un nuevo grupo de hackers rusos, denominado EncryptHub, ha sido descubierto explotando vulnerabilidades en servidores Microsoft SQL Server (MS-SQL) para infiltrarse en sistemas corporativos. El grupo despliega una serie de herramientas sofisticadas para minar criptomonedas, robar credenciales y finalmente, desplegar ransomware en los entornos críticos de las empresas afectadas.



El modus operandi de EncryptHub implica, en primera instancia, el acceso inicial a través de ataques de fuerza bruta y la explotación de servidores MS-SQL expuestos. Una vez dentro del sistema, el grupo se mueve lateralmente utilizando herramientas de administración legítimas para evitar ser detectado. El payload final consiste en la instalación de mineros de Monero y el despliegue de ransomware. Además, EncryptHub roba credenciales y utiliza túneles cifrados para la exfiltración de información confidencial.

Los investigadores de ASEC destacan la profesionalidad de EncryptHub, que reutiliza infraestructuras y comparte tácticas, técnicas y procedimientos (TTPs) con otros grupos de habla rusa, lo que sugiere una posible colaboración dentro de un ecosistema criminal compartido. La explotación de servidores MS-SQL mal configurados como vector de ataque no es nueva, pero la sistematización por parte de grupos como EncryptHub pone de manifiesto la importancia de asegurar adecuadamente estos sistemas.

Para mitigar el riesgo, se recomienda restringir el acceso remoto a instancias de MS-SQL, segmentar la red, aplicar parches de seguridad de manera prioritaria, monitorizar la actividad sospechosa en procesos de administración de bases de datos e implementar threat intelligence para detectar patrones de ataque asociados a EncryptHub. La defensa debe integrar parches, monitorización e inteligencia de amenazas para correlacionar señales tempranas de campañas como esta, dado que la cadena de suministro y los servicios expuestos en Internet siguen siendo vulnerables.

Fuente Original: https://unaaldia.hispasec.com/2025/08/encrypthub-nuevo-grupo-ruso-explota-la-cadena-de-suministro-de-microsoft-sql-server.html?utm_source=rss&utm_medium=rss&utm_campaign=encrypthub-nuevo-grupo-ruso-explota-la-cadena-de-suministro-de-microsoft-sql-server 

Artículos relacionados de LaRebelión:

Artículo generado mediante LaRebelionBOT

miércoles, 28 de octubre de 2020

Setup HSQLDB on MAC

A few days ago, I was involved in developing a practice for a University project where a Java application had to be built that communicated with an SQL instance. There is not much problem using standard SQL such as mySQL, MariaDB or PostgreSQL, but the export is a bit cumbersome. Doing some research on the Internet I found this wonderful HyperSQL solution, it is a functional Java based SQL database solution that you can easily save to your git repository like the rest of your application.

Let me detail step by step how we proceed with the installation and later I will publish some tricks.

Hsqldb Server

This is the preferred way of running a database server and the fastest one. A proprietary communications protocol is used for this mode. A command similar to those used for running tools and described above is used for running the server. The following example of the command for starting the server starts the server with one (default) database with files named "mydb.*".

java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:xdb -dbname.0 xdb

The command line argument -? can be used to get a list of available arguments.

Note that both "xdb" is used for both File and database name.


   Running Tools

All tools can be run in the standard way for archived Java classes. In the following example the AWT version of the Database Manager, the hsqldb.jar is located in the directory ../lib relative to the current directory.

 java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager

If hsqldb.jar is in the current directory, the command would change to:

java -cp hsqldb.jar org.hsqldb.util.DatabaseManager

Main classes for the Hsqldb tools
  • org.hsqldb.util.DatabaseManager
  • org.hsqldb.util.DatabaseManagerSwing
  • org.hsqldb.util.Transfer
  • org.hsqldb.util.QueryTool
  • org.hsqldb.util.SqlTool
Use these setting in the connection to setting to run the server.



Start the DB Manager Swing application

HSQL needs to be setup in JPA persistence.xml to perform connections.
screenshot hyperSQL




<persistence-unit name="Stocks" transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>nJTA</non-jta-data-source>
        <class>com.larebelion.db.stock</class>
        <properties>
        <!-- jdbc:hsqldb:mdb -->
        <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:hsql://localhost/mdb" />
        <property name="javax.persistence.jdbc.user" value="SA"/>
        <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
        <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='add', ForeignKeys=true)"/>
<property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/>        
     <property name="openjpa.jdbc.DBDictionary" value="hsql" />
<property name="openjpa.jdbc.Schema" value="PUBLIC" />
        </properties>   
    </persistence-unit> 
</persistence>