Cifrado de datos transparente (TDE)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

El cifrado de datos transparente (TDE) de SQL Server cifra los archivos de datos de SQL Server, Azure SQL Database y Azure Synapse Analytics. lo que se conoce como cifrado de datos en reposo.

Para ayudar a proteger una base de datos de usuario, se pueden tomar precauciones como las siguientes:

  • Diseñar un sistema seguro
  • Cifrar los recursos confidenciales
  • Crear un firewall en torno a los servidores de bases de datos

Con todo, alguien malintencionado que roba medios físicos como unidades o cintas de copia de seguridad puede restaurar la base de datos o conectarse a ella y examinar sus datos.

Una solución sería cifrar los datos confidenciales en la base de datos y usar un certificado para proteger las claves con las que esos datos se cifran. Esta solución impide que alguien que carezca de las claves use los datos. Este tipo de protección se debe planear de antemano.

TDE realiza el cifrado y descifrado de E/S en tiempo real de los archivos de datos y de registro. Este cifrado usa una clave de cifrado de la base de datos (DEK). El registro de arranque de la base de datos almacena la clave para que esté disponible durante la recuperación. La DEK es una clave simétrica, y está protegida por un certificado que la base de datos master del servidor almacena, o por una clave asimétrica que un módulo EKM protege.

TDE protege los datos en reposo, que son los archivos de datos y de registro. Permite cumplir muchas leyes, normativas y directrices establecidas en diversos sectores. Esto permite a los desarrolladores de software cifrar datos con algoritmos de cifrado AES y 3DES sin cambiar las aplicaciones existentes.

Nota:

TDE no está disponible para las bases de datos del sistema. No se puede usar para cifrar master, model o msdb. tempdb se cifra automáticamente cuando una base de datos de usuario habilita TDE, pero no se puede cifrar directamente.

TDE no proporciona cifrado para los canales de comunicaciones. Para obtener más información sobre cómo cifrar datos en los canales de comunicación, vea Configuración del Motor de base de datos de SQL Server para cifrar conexiones.

Temas relacionados::

Acerca de TDE

El cifrado de un archivo de base de datos se realiza en el nivel de página. Las páginas de una base de datos cifrada se cifran antes de escribirse en el disco y se descifran cuando se leen en la memoria. TDE no aumenta el tamaño de la base de datos cifrada.

Información aplicable a SQL Database

Cuando TDE se usa con Azure SQL Database, SQL Database crea automáticamente el certificado de nivel de servidor almacenado en la base de datos master. Para mover una base de datos de TDE en SQL Database, no es necesario descifrarla para la operación de traslado. Para más información sobre cómo usar TDE con SQL Database, consulte Cifrado de datos transparente para Azure SQL Database.

Información aplicable a SQL Server

Después de proteger una base de datos, puede restaurarla con el certificado correcto que corresponda. Para obtener más información acerca de los certificados, vea SQL Server Certificates and Asymmetric Keys.

Después de habilitar TDE, haga inmediatamente una copia de seguridad del certificado y su clave privada asociada. Si el certificado dejara de estar disponible, o si la base de datos restaura o conecta en otro servidor, necesitará copias de seguridad del certificado y de la clave privada o, de lo contrario, no podrá abrir la base de datos. También se debe realizar una copia de seguridad independiente de los certificados almacenados en una base de datos del sistema.

Conserve el certificado de cifrado aunque TDE esté deshabilitado en la base de datos. Si bien la base de datos no está cifrada, puede que algunas partes del registro de transacciones sigan protegidas. También puede necesitar el certificado en algunas operaciones hasta que haga una copia de seguridad completa de la base de datos.

Un certificado que ha excedido su fecha de expiración se puede seguir usando para cifrar y descifrar datos con TDE.

Jerarquía de cifrado

La API de protección de datos de Windows (DPAPI) se encuentra en la raíz del árbol de cifrado, protege la jerarquía de claves en el nivel de máquina y se usa para proteger la clave maestra de servicio (SMK) para la instancia del servidor de bases de datos. SmK protege la clave maestra de base de datos (DMK), que se almacena en el nivel de base de datos de usuario y protege los certificados y las claves asimétricas. Estas claves, a su vez, protegen las claves simétricas, que protegen los datos. TDE usa una jerarquía similar al certificado. Cuando se usa TDE, la DMK y el certificado deben almacenarse en la base de datos master. Una nueva clave, que solo se usa para TDE y se conoce como clave de cifrado de base de datos (DEK), se crea y almacena en la base de datos de usuario.

En la siguiente ilustración se muestra la arquitectura del cifrado TDE. Solo los elementos de nivel de base de datos (la clave de cifrado de base de datos y las partes de ALTER DATABASE) son configurables por el usuario cuando se usa TDE en SQL Database.

Diagrama que muestra la arquitectura de cifrado de datos transparente.

Habilitar TDE

Para usar TDE, siga estos pasos.

Se aplica a: SQL Server.

  1. Cree una clave maestra.
  2. Cree u obtenga un certificado protegido por la clave maestra.
  3. Cree una clave de cifrado de base de datos y protéjala con el certificado.
  4. Configure la base de datos para que use el cifrado.

En el siguiente ejemplo se muestra cómo cifrar y descifrar la base de datos AdventureWorks2022 con un certificado denominado MyServerCert instalado en el servidor.

USE master;
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';
GO

CREATE CERTIFICATE MyServerCert
    WITH SUBJECT = 'My DEK Certificate';
GO

USE AdventureWorks2022;
GO

CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_256
    ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO

ALTER DATABASE AdventureWorks2022
    SET ENCRYPTION ON;
GO

SQL Server programa las operaciones de cifrado y descifrado en subprocesos que se ejecutan en segundo plano. Para ver el estado de estas operaciones, use las vistas de catálogo y las vistas de administración dinámica de la tabla que se muestra más adelante en este artículo.

Precaución

Los archivos de copia de seguridad de las bases de datos que tienen TDE habilitado también se cifran con la DEK. En consecuencia, cuando se restauren estas copias de seguridad, el certificado que protege la DEK debe estar disponible. Por lo tanto, además de hacer copias de seguridad de la base de datos, asegúrese de conservar también copias de seguridad de los certificados de servidor. Si los certificados dejan de estar disponible, perderá los datos.

Para obtener más información, consulte SQL Server Certificates and Asymmetric Keys.

Comandos y funciones

Para que en las siguientes instrucciones se acepten certificados TDE, use una clave maestra de base de datos para cifrarlos. Si solamente se cifran con una contraseña, las instrucciones los rechazarán como sistemas de cifrado.

Importante

Si protege los certificados con contraseña después de que TDE los use, la base de datos dejará de estar accesible cuando se reinicie.

En la siguiente tabla encontrará vínculos y explicaciones de los comandos y funciones de TDE:

Comando o función Fin
CREATE DATABASE ENCRYPTION KEY Crea una clave que cifra una base de datos.
ALTER DATABASE ENCRYPTION KEY Cambia la clave que cifra una base de datos.
DROP DATABASE ENCRYPTION KEY Quita la clave que cifra una base de datos.
Opciones de ALTER DATABASE SET Explica la opción ALTER DATABASE que se utiliza para habilitar TDE

Vistas de catálogo y vistas de administración dinámica

En la tabla siguiente se muestran las vistas de catálogo y las vistas de administración dinámica de TDE (DMV).

Vista de catálogo o vista de administración dinámica Fin
sys.databases Vista de catálogo que muestra información sobre las bases de datos
sys.certificates Vista de catálogo que muestra los certificados de una base de datos
sys.dm_database_encryption_keys Vista de administración dinámica que proporciona información sobre las claves de cifrado y el estado de cifrado de una base de datos

Permisos

Cada una de las características y comandos de TDE tiene sus propios requisitos de permisos, como se describe en las tablas mostradas anteriormente.

Para ver los metadatos relacionados con TDE, se requiere el permiso VIEW DEFINITION en un certificado.

Consideraciones

Mientras se realiza el examen del proceso de nuevo cifrado para una operación de cifrado de base de datos, las operaciones de mantenimiento de la base de datos están deshabilitadas. Puede configurar la base de datos en modo de usuario único si quiere realizar la operación de mantenimiento. Para obtener más información, consulta Establecer una base de datos en modo de usuario único.

Para encontrar el estado del cifrado de una base de datos, use la vista de administración dinámica sys.dm_database_encryption_keys. Para obtener más información, consulta la sección Vistas de catálogo y vistas de administración dinámica, anteriormente en este artículo.

En TDE, se cifran todos los archivos y grupos de archivos de una base de datos. Si algún grupo de archivos de una base de datos está marcado como READ ONLY, se producirá un error en la operación de cifrado de la base de datos.

Si una base de datos se usa en una creación de reflejo de la base de datos o en un trasvase de registros, se cifran ambas bases de datos. Las transacciones del registro se cifran cuando se envíen entre ellas.

Importante

Los índices de texto completo se cifran cuando una base de datos esté configurada para cifrarse. Estos índices creados en SQL Server 2005 (9.x) y versiones anteriores, se importan a la base de datos con SQL Server 2008 (10.0.x) o versiones posteriores y se cifran con TDE.

Sugerencia

Para supervisar los cambios en el estado TDE de una base de datos, usa SQL Server Audit o la auditoría para Azure SQL Database. En SQL Server, el seguimiento de TDE se realiza en el grupo de acción de auditoría DATABASE_OBJECT_CHANGE_GROUP, que está en Grupos de acciones y acciones de SQL Server Audit.

Limitaciones

Durante el cifrado inicial de la base de datos, un cambio de clave o un descifrado de una base de datos no se pueden realizar las siguientes operaciones:

  • Quitar un archivo de un grupo de archivos de una base de datos
  • Quitar una base de datos
  • Dejar sin conexión una base de datos
  • Separar la base de datos.
  • Pasar la base de datos o el grupo de archivos al estado READ ONLY

No se permiten las siguientes operaciones durante las instrucciones CREATE DATABASE ENCRYPTION KEY, ALTER DATABASE ENCRYPTION KEY, DROP DATABASE ENCRYPTION KEY y ALTER DATABASE...SET ENCRYPTION.

  • Quitar un archivo de un grupo de archivos de una base de datos
  • Quitar una base de datos
  • Dejar sin conexión una base de datos
  • Separar la base de datos.
  • Pasar la base de datos o el grupo de archivos al estado READ ONLY
  • Usar un comando ALTER DATABASE
  • Iniciar una copia de seguridad de base de datos o de archivos de base de datos
  • Iniciar una restauración de base de datos o de archivos de base de datos
  • Crear una instantánea

Las siguientes operaciones o condiciones impedirán las instrucciones CREATE DATABASE ENCRYPTION KEY, ALTER DATABASE ENCRYPTION KEY, DROP DATABASE ENCRYPTION KEY y ALTER DATABASE...SET ENCRYPTION.

  • La base de datos o alguno de sus grupos de archivos son de solo lectura.
  • Se está ejecutando un comando ALTER DATABASE.
  • Se está haciendo una copia de seguridad de los datos.
  • Una base de datos está sin conexión o en restauración.
  • Se está realizando una instantánea.
  • Se están realizando tareas de mantenimiento en la base de datos.

Al crear archivos de base de datos, la inicialización instantánea de archivos no estará disponible si TDE está habilitado.

Para cifrar una DEK con una clave asimétrica, la clave asimétrica debe estar en un proveedor extensible de administración de claves.

Examen de TDE

Para habilitar TDE en una base de datos, SQL Server debe realizar un examen de cifrado. Este examen lee cada página de los archivos de datos en el grupo de búferes y, tras ello, vuelve a escribir las páginas cifradas en el disco.

Para proporcionarle más control sobre el examen de cifrado, SQL Server 2019 (15.x) incluye el examen de TDE, que tiene sintaxis de suspensión y reanudación. Así, el examen se puede pausar cuando la carga de trabajo del sistema sea muy intensa o durante las horas críticas del negocio y reanudarlo más adelante.

Use la siguiente sintaxis para poner en pausa el análisis de cifrado TDE:

ALTER DATABASE <db_name> SET ENCRYPTION SUSPEND;

De igual modo, use la siguiente sintaxis para reanudarlo:

ALTER DATABASE <db_name> SET ENCRYPTION RESUME;

La columna encryption_scan_state se ha agregado a la vista de administración dinámica sys.dm_database_encryption_keys. En ella se muestra el estado actual del examen de cifrado. También hay una columna nueva llamada encryption_scan_modify_date, que contiene la fecha y la hora del último cambio de estado del examen de cifrado.

Si la instancia de SQL Server se reinicia mientras su examen de cifrado está en pausa, se registrará un mensaje en el registro de errores al iniciarse. El mensaje indica que un examen existente está en pausa.

Importante

La característica de examen de TDE Suspender y Reanudar no está disponible actualmente en Azure SQL Database, Azure SQL Managed Instance y Azure Synapse Analytics.

TDE y los registros de transacciones

TDE protege los archivos de datos y los archivos de registro en reposo. Cifrar toda la base de datos después de habilitar TDE en una base de datos sin cifrar es una operación de datos considerable y el tiempo que tarda depende de los recursos del sistema en los que se ejecuta esta base de datos. La DMV sys.dm_database_encryption_keys se puede usar para determinar el estado de cifrado de una base de datos.

Cuando se activa TDE, el motor de base de datos fuerza la creación de un nuevo registro de transacciones, que se cifrará mediante la clave de cifrado de la base de datos. No se cifra ningún registro generado por transacciones anteriores o transacciones de larga duración actuales intercaladas entre el cambio de estado de TDE.

Los registros de transacciones se pueden supervisar mediante la DMV sys.dm_db_log_info , que también muestra si el archivo de registro está cifrado o no mediante la columna vlf_encryptor_thumbprint que está disponible en Azure SQL y SQL Server 2019 (15.x) y versiones posteriores. Esta es una consulta de ejemplo para encontrar el estado del cifrado del archivo de registro en la columna encryption_state de la vista sys.dm_database_encryption_keys:

USE AdventureWorks2022;
GO

/* The value 3 represents an encrypted state
   on the database and transaction logs. */
SELECT *
FROM sys.dm_database_encryption_keys
WHERE encryption_state = 3;
GO

Para obtener más información sobre la arquitectura de los archivos de registro de SQL Server, vea el Registro de transacciones.

Antes de que cambies una DEK, la DEK anterior cifra todos los datos escritos en el registro de transacciones.

Si cambias una DEK dos veces, debes realizar una copia de seguridad de registros antes de poder volver a cambiar la DEK.

TDE y la base de datos del sistema tempdb

La base de datos del sistema tempdb se cifra si alguna otra base de datos de la instancia de está cifrada con TDE. Este cifrado podría tener un efecto en el rendimiento de las bases de datos no cifradas de la misma instancia de SQL Server. Para obtener más información sobre la base de datos del sistema tempdb, vea Base de datos tempdb.

TDE y la replicación

La replicación no replica automáticamente los datos de una base de datos habilitada para TDE en un formato cifrado. Habilite TDE por separado si quiere proteger las bases de datos de suscriptor y de distribución.

La replicación de instantáneas puede almacenar datos en archivos intermedios sin cifrar, como archivos BCP, como también lo hace la distribución de datos inicial para la replicación transaccional y de mezcla. Durante dicha replicación, se puede habilitar el cifrado para proteger el canal de comunicación.

Para más información, consulte Configuración del Motor de base de datos de SQL Server para el cifrado de las conexiones.

TDE y grupos de disponibilidad.

Puede agregar una base de datos cifrada a un Grupo de disponibilidad AlwaysOn.

Para cifrar las bases de datos que forman parte de un grupo de disponibilidad, cree la clave maestra y los certificados, o bien la clave asimétrica (EKM) en todas las réplicas secundarias antes de crear la clave de cifrado de base de datos en la réplica principal.

Si se usa un certificado para proteger la DEK, realiza una copia de seguridad del certificado en la réplica principal y, después, crea el certificado desde un archivo en todas las réplicas secundarias antes de crear la DEK en la réplica principal.

TDE y los datos FILESTREAM

Los datos FILESTREAM no se cifran ni siquiera cuando TDE se habilita.

TDE y copias de seguridad

Los certificados se usan normalmente en cifrado de datos transparente para proteger la DEK. El certificado debe crearse en la base de datos master. Los archivos de copia de seguridad de las bases de datos que tienen habilitado TDE también se cifran mediante la DEK. Como consecuencia, al restaurar estas copias de seguridad debe estar disponible el certificado que protege la DEK. Esto significa que, además de hacer copias de seguridad de la base de datos, tiene que mantener copias de seguridad de los certificados del servidor para evitar la pérdida de datos. Si el certificado deja de estar disponible, se perderán los datos.

Eliminación de TDE

Use la instrucción ALTER DATABASE para quitar el cifrado de la base de datos.

ALTER DATABASE <db_name> SET ENCRYPTION OFF;

Para ver el estado de la base de datos, use la vista de administración dinámica sys.dm_database_encryption_keys.

Nota:

Aunque el proceso de cifrado está en curso, ALTER DATABASE no se permiten instrucciones en la base de datos. Hasta que finalice el proceso de cifrado, no podrá iniciar el descifrado de la base de datos.

Espera a que finalice el descifrado antes de quitar la DEK mediante DROP DATABASE ENCRYPTION KEY.

Importante

Realice una copia de seguridad de la clave maestra y el certificado que se usan para TDE en una ubicación segura. La clave maestra y el certificado son necesarios para restaurar las copias de seguridad que se han realizado al cifrar la base de datos con TDE. Después de quitar la DEK, realiza una copia de seguridad de registros seguida de una nueva copia de seguridad completa de la base de datos descifrada.

TDE y la extensión del grupo de búferes

Cuando una base de datos se cifra con TDE, los archivos relacionados con la extensión del grupo de búferes (BPE) no se cifran. Con esos archivos, use herramientas de cifrado como BitLocker o EFS en el nivel del sistema de archivos.

TDE y OLTP en memoria

TDE se puede habilitar en una base de datos que tenga objetos de OLTP en memoria. En SQL Server 2016 (13.x) y Azure SQL Database, los registros y los datos olTP en memoria se cifran si habilita TDE. En SQL Server 2014 (12.x), los registros de OLTP en memoria se cifran si TDE está habilitado, pero no los archivos del grupo de archivos MEMORY_OPTIMIZED_DATA.

Directrices para administrar certificados usados en TDE

Debes realizar una copia de seguridad del certificado y la clave maestra de base de datos cuando la base de datos está habilitada para TDE y se usa en trasvase de registros o creación de reflejo de la base de datos. También se debe realizar una copia de seguridad independiente de los certificados almacenados en una base de datos del sistema.

El certificado usado para proteger la DEK nunca debe quitarse de la base de datos master. Al hacerlo, la base de datos cifrada dejará de estar accesible.

Se genera un mensaje de advertencia como el siguiente (error 33091) después de ejecutar CREATE DATABASE ENCRYPTION KEY si el certificado usado en el comando aún no se ha incluido en una copia de seguridad.

Advertencia

No se ha realizado una copia de seguridad del certificado usado para cifrar la clave de cifrado de la base de datos. Debería hacer inmediatamente una copia de seguridad del certificado y de la clave privada asociada con el certificado. Si el certificado no está disponible o si debe restaurar o adjuntar la base de datos en otro servidor, debe tener copias de seguridad del certificado y la clave privada o no podrá abrir la base de datos.

La consulta siguiente se puede usar para identificar los certificados usados en TDE que no se han realizado copias de seguridad desde el momento en que se creó.

SELECT pvt_key_last_backup_date,
       Db_name(dek.database_id) AS encrypteddatabase,
       c.name AS Certificate_Name
FROM sys.certificates AS c
     INNER JOIN sys.dm_database_encryption_keys AS dek
         ON c.thumbprint = dek.encryptor_thumbprint;

Si la columna pvt_key_last_backup_date es NULL, la base de datos correspondiente a esa fila se ha habilitado para TDE, pero no se ha realizado una copia de seguridad del certificado usado para proteger su DEK. Para obtener más información sobre la copia de seguridad de un certificado, consulta BACKUP CERTIFICATE.