Modelado físico avanzado relacional de bases de datos

Las funciones de seguridad y encriptación en SQL permiten proteger datos sensibles mediante hash, cifrado y otras técnicas de autenticación. A continuación, veremos las funciones más utilizadas en MySQL y PostgreSQL, ya que SQLite tiene soporte limitado para estas funcionalidades.


1. MD5() - Generación de Hash MD5

La función MD5() genera un hash de 128 bits a partir de una cadena de texto.

Ejemplo:

1-- MySQL, PostgreSQL
2SELECT MD5('password123');

Esto devuelve un hash hexadecimal que representa la entrada de manera única.

Nota: MD5 no es seguro para almacenar contraseñas debido a vulnerabilidades conocidas.


2. SHA() y SHA2() - Generación de Hash Seguro

  • SHA1() genera un hash SHA-1 de 160 bits (obsoleto por vulnerabilidades).
  • SHA2() genera un hash SHA-2 con distintas longitudes (224, 256, 384, 512 bits).

Ejemplo:

1-- MySQL
2SELECT SHA1('password123');
3SELECT SHA2('password123', 256);
1-- PostgreSQL
2SELECT digest('password123', 'sha256');

PostgreSQL usa pgcrypto y la función digest() para generar hashes seguros.


3. CRYPT() - Hash con Salt (PostgreSQL)

CRYPT() genera un hash con un salt aleatorio para aumentar la seguridad.

Ejemplo:

1-- PostgreSQL (requiere extensión pgcrypto)
2SELECT crypt('password123', gen_salt('bf'));

Esto devuelve un hash seguro con algoritmo Blowfish (bf).


4. AES_ENCRYPT() y AES_DECRYPT() - Cifrado Simétrico (Solo en MySQL)

MySQL permite cifrar y descifrar datos con AES de 256 bits.

Ejemplo:

1-- MySQL
2SELECT AES_ENCRYPT('Mensaje Secreto', 'clave_secreta');
3SELECT AES_DECRYPT(AES_ENCRYPT('Mensaje Secreto', 'clave_secreta'), 'clave_secreta');

Esto cifra y luego descifra un mensaje con la clave proporcionada.


5. PGP_SYM_ENCRYPT() y PGP_SYM_DECRYPT() - Cifrado Simétrico en PostgreSQL

PostgreSQL permite cifrado PGP con una clave secreta.

Ejemplo:

1-- PostgreSQL (requiere pgcrypto)
2SELECT PGP_SYM_ENCRYPT('Mensaje Secreto', 'clave_secreta');
3SELECT PGP_SYM_DECRYPT(PGP_SYM_ENCRYPT('Mensaje Secreto', 'clave_secreta'), 'clave_secreta');

Esto cifra y descifra datos de forma segura usando PGP.


6. RANDOM_BYTES() - Generación de Datos Aleatorios

Se utiliza para generar claves seguras y valores aleatorios.

Ejemplo:

1-- PostgreSQL (requiere pgcrypto)
2SELECT encode(gen_random_bytes(16), 'hex');

Esto genera una clave aleatoria en formato hexadecimal.

En MySQL se usa:

1-- MySQL
2SELECT UUID();

Esto genera un identificador único aleatorio.