La encriptación de datos en bases de datos SQL

La encriptación de datos es una medida esencial en la seguridad de bases de datos SQL, ya que protege la confidencialidad de la información almacenada. La encriptación convierte los datos en un formato codificado que solo puede ser descifrado mediante una clave de encriptación. En el contexto de SQL Server, se pueden utilizar diversas estrategias de encriptación.

Encriptación a nivel de columna

La encriptación a nivel de columna en SQL Server permite proteger datos específicos dentro de una columna individual. Una implementación típica utiliza claves de cifrado simétricas para minimizar el impacto en el rendimiento.

Encriptación a nivel de base de datos completa

La característica Transparent Data Encryption (TDE) permite encriptar toda la base de datos, incluidos los archivos de respaldo. TDE utiliza una clave de cifrado de base de datos (DEK) almacenada en la raíz de la base de datos del sistema.

Encriptación de archivos de respaldo

Para encriptar archivos de respaldo, SQL Server permite especificar opciones de encriptación durante el proceso de respaldo. Es necesario un certificado o una clave asimétrica para este propósito.

La encriptación de datos en SQL Server es una herramienta poderosa para proteger información confidencial y cumplir con normativas de seguridad de datos.

El código SQL para encriptar datos en MySQL/MariaDB y PostgreSQL es el siguiente:

  • MySQL/MariaDB
-- Crear una tabla con una columna encriptada
CREATE TABLE usuarios (
   id INT PRIMARY KEY AUTO_INCREMENT,
   nombre VARCHAR(255),
   email VARBINARY(255)
);
-- Encriptar un dato usando AES_ENCRYPT
INSERT INTO usuarios (nombre, email)
VALUES ('Juan', AES_ENCRYPT('juan@example.com', 'clave_secreta'));
-- Desencriptar un dato usando AES_DECRYPT
SELECT id, nombre, AES_DECRYPT(email, 'clave_secreta') AS email
FROM usuarios;
  • PostgreSQL
-- Habilitar el módulo pgcrypto
CREATE EXTENSION pgcrypto;
-- Crear una tabla con una columna encriptada
CREATE TABLE usuarios (
   id SERIAL PRIMARY KEY,
   nombre TEXT,
   email BYTEA
);
-- Encriptar un dato usando pgp_sym_encrypt
INSERT INTO usuarios (nombre, email)
VALUES ('Juan', pgp_sym_encrypt('juan@example.com', 'clave_secreta'));
-- Desencriptar un dato usando pgp_sym_decrypt
SELECT id, nombre, pgp_sym_decrypt(email, 'clave_secreta') AS email
FROM usuarios;