Knowledge center Programación Entornos de programación

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.

Para encriptar una columna que contiene números de tarjetas de crédito, se puede utilizar la función EncryptByKey.

-- Crear una clave simétrica
USE [NombreBaseDatos];
CREATE SYMMETRIC KEY ClaveEjemplo
WITH ALGORITHM = AES_256
ENCRYPTION BY PASSWORD = 'passwordSeguro';
GO
-- Abrir la clave simétrica
OPEN SYMMETRIC KEY ClaveEjemplo
DECRYPTION BY PASSWORD = 'passwordSeguro';
GO
-- Encriptar los datos de la columna
UPDATE TablaClientes
SET NumeroTarjetaCredito = EncryptByKey(Key_GUID('ClaveEjemplo'), NumeroTarjetaCredito);
GO
   

Para desencriptar los datos en la consulta, se emplea la función DecryptByKey después de abrir la clave de cifrado:

-- Desencriptar los datos de la columna
SELECT ClienteID, 
      CONVERT(varchar, DecryptByKey(NumeroTarjetaCredito)) AS NumeroTarjetaCredito
FROM TablaClientes;
GO
-- Cerrar la clave simétrica
CLOSE SYMMETRIC KEY ClaveEjemplo;
GO
   
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.

Para habilitar TDE, hay que seguir estos pasos:

-- Crear un Certificado y una clave maestra en la base de datos maestra
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'passwordSeguro';
GO
CREATE CERTIFICATE CertificadoTDE
WITH SUBJECT = 'Certificado TDE para NombreBaseDatos';
GO
-- Crear la clave de cifrado de base de datos y protegerla con el certificado
USE [NombreBaseDatos];
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE CertificadoTDE;
GO
-- Habilitar TDE en la base de datos
ALTER DATABASE [NombreBaseDatos]
SET ENCRYPTION ON;
GO
   
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.

- Crear un certificado para encriptación de respaldo en la base de datos maestra
USE master;
CREATE CERTIFICATE CertificadoRespaldo
WITH SUBJECT = 'Certificado para encriptación de respaldos';
GO
-- Realizar un respaldo encriptado utilizando el certificado
BACKUP DATABASE [NombreBaseDatos]
TO DISK = 'Ruta/RespaldoNombreBaseDatos.bak'
WITH COMPRESSION,
    ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = CertificadoRespaldo);
GO
   

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;

 

Esta píldora formativa está extraída del Curso online de Administración de bases de datos SQL .

¿Te gusta el contenido de esta píldora de conocimiento?

No pierdas tu oportunidad y ¡continúa aprendiendo!

Política de privacidad

ADR Formación utiliza cookies propias y de terceros para fines analíticos anónimos, guardar las preferencias que selecciones y para el funcionamiento general de la página.

Puedes aceptar todas las cookies pulsando el botón "Aceptar" o configurarlas o rechazar su uso pulsando el botón "Configurar".

Puedes obtener más información y volver a configurar tus preferencias en cualquier momento en la Política de cookies