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.