Uso del conector de SQL Server con las características de cifrado de SQL

Se aplica a:SQL Server

Las actividades comunes de cifrado de SQL Server que utilizan una clave asimétrica protegida por Azure Key Vault se engloban en las siguientes tres áreas:

  • Cifrado transparente de datos (TDE) mediante el uso de una clave asimétrica de Azure Key Vault.
  • Cifrar copias de seguridad usando una clave asimétrica de la bóveda de claves.
  • Cifrado a nivel de columna usando una clave asimétrica de la bóveda de claves.

Completa los pasos 1 a 4 de configurar Cifrado de datos transparente con Azure Key Vault para SQL Server antes de seguir los pasos de este artículo.

Nota:

Las versiones 1.0.0.440 y anteriores se han reemplazado y ya no se admiten en entornos de producción. Actualiza a la versión 1.0.1.0 o posterior. Descargue la versión actual desde el Centro de descarga de Microsoft y siga las instrucciones de la sección "Actualización de SQL Server Connector" de Mantenimiento y solución de problemas de SQL Server Connector.

Nota:

Microsoft Entra ID conocido anteriormente como Azure Active Directory (Azure AD).

Cifrado de datos transparente utilizando una clave asimétrica de Azure Key Vault

Después de completar los pasos 1 al 4 de configurar Cifrado de datos transparente con Azure Key Vault para SQL Server, utiliza la clave de Azure Key Vault para cifrar la clave de cifrado de la base de datos con TDE. Para más información sobre cómo rotar claves usando PowerShell, consulte Rotar el protector Cifrado de datos transparente (TDE) usando PowerShell.

Importante

No elimine las versiones anteriores de la clave después de una sustitución. Cuando se rotan las claves, algunos datos siguen cifrados con las claves anteriores, como copias de seguridad antiguas de bases de datos, archivos de registro respaldados y archivos de registro de transacciones.

Debe crear una credencial y un inicio de sesión, y crear una clave de cifrado de la base de datos que cifre los datos y los registros de la base de datos. El cifrado de una base de datos requiere el permiso CONTROL en la base de datos. El siguiente gráfico muestra la jerarquía de la clave de cifrado cuando se utiliza Azure Key Vault.

Diagrama que muestra la jerarquía de la clave de cifrado al usar Azure Key Vault.

  1. Crear una credencial de SQL Server para el motor de base de datos que se usará para TDE

    El Motor de base de datos utiliza las credenciales de la aplicación de Microsoft Entra para acceder al almacén de claves durante la carga de la base de datos. Para limitar los permisos de la bóveda de claves que concedes, crea otro ID de cliente y un secreto, como se describe en el Paso 1: Configurar el modelo de autenticación, para el Motor de base de datos.

    Modifique el script de Transact-SQL siguiente como se indica a continuación:

    • Edite el argumento IDENTITY (ContosoDevKeyVault) para dirigirlo a Azure Key Vault.

    • Sustituye la primera parte del SECRET argumento por el ID de cliente de la aplicación Microsoft Entra del Paso 1: Configurar el modelo de autenticación. En este ejemplo, el id. de cliente es EF5C8E094D2A4A769998D93440D8115D.

      Importante

      Debe quitar los guiones de Client ID.

    • Completa la segunda parte del SECRET argumento con el Secreto del Cliente del paso 1. En este ejemplo, el Secreto del Cliente es ReplaceWithAADClientSecret.

    • La cadena final del SECRET argumento es una larga secuencia de letras y números, sin guiones.

    USE master;  
    CREATE CREDENTIAL Azure_EKM_TDE_cred   
        WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret'   
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;  
    
  2. Crear un inicio de sesión de SQL Server para el motor de base de datos para TDE

    Cree un inicio de sesión de SQL Server y agréguele la credencial del Paso 1. En este ejemplo de Transact-SQL se usa la misma clave que se importó anteriormente.

    USE master;  
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it loads a database   
    -- encrypted by TDE.  
    CREATE LOGIN TDE_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY;  
    GO   
    
    -- Alter the TDE Login to add the credential for use by the   
    -- Database Engine to access the key vault  
    ALTER LOGIN TDE_Login   
    ADD CREDENTIAL Azure_EKM_TDE_cred ;  
    GO  
    
  3. Crear la clave de cifrado de la base de datos (DEK)

    El DEK cifra tus datos y archivos de registro en la instancia de la base de datos, y a su vez está cifrado por la clave asimétrica de Azure Key Vault. Puedes crear el DEK usando cualquier algoritmo o longitud de clave que SQL Server soporte.

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. Activa el TDE

    -- Alter the database to enable transparent data encryption.  
    ALTER DATABASE ContosoDatabase   
    SET ENCRYPTION ON;  
    GO  
    

    Usando Management Studio, verifica que TDE esté activado conectándote a tu base de datos con Explorador de objetos. Haga clic con el botón derecho en la base de datos, seleccione Tareas y, a continuación, seleccione Administrar cifrado de base de datos.

    Captura de pantalla en la que se muestra el Explorador de objetos con la opción Tareas > Administrar cifrado de base de datos seleccionada.

    En el cuadro de diálogo Administrar cifrado de base de datos , confirme que TDE está activado y qué clave asimétrica está cifrando la DEK.

    Captura de pantalla del cuadro de diálogo Administrar cifrado de base de datos con la opción Activar cifrado de base de datos seleccionada y con un mensaje en amarillo que indica

    También puede ejecutar el siguiente script de Transact-SQL. Un estado de cifrado de 3 indica que la base de datos está cifrada.

    USE MASTER  
    SELECT * FROM sys.asymmetric_keys  
    
    -- Check which databases are encrypted using TDE  
    SELECT d.name, dek.encryption_state   
    FROM sys.dm_database_encryption_keys AS dek  
    JOIN sys.databases AS d  
         ON dek.database_id = d.database_id;  
    

    Nota:

    La base de datos de tempdb se cifra automáticamente cuando cualquier base de datos habilita TDE.

Cifrado de copias de seguridad usando una clave asimétrica de la bóveda de claves

Las copias de seguridad cifradas se admiten a partir de SQL Server 2014 (12.x). El siguiente ejemplo crea y restaura una copia de seguridad cifrada con una clave de cifrado de datos que la clave asimétrica en la bóveda de claves protege.

El Motor de base de datos utiliza las credenciales de la aplicación Microsoft Entra para acceder al almacén de claves durante la carga de la base de datos. Para limitar los permisos de la bóveda de claves que concedes, crea otro ID de cliente y un secreto, como se describe en el Paso 1: Configurar el modelo de autenticación, para el Motor de base de datos.

  1. Crea una credencial de SQL Server para que el Motor de base de datos la use para cifrado de copias de seguridad

    Modifique el script de Transact-SQL siguiente como se indica a continuación:

    • Edite el argumento IDENTITY (ContosoDevKeyVault) para dirigirlo a Azure Key Vault.

    • Sustituye la primera parte del SECRET argumento por el ID de cliente de la aplicación Microsoft Entra del Paso 1: Configurar el modelo de autenticación. En este ejemplo, el id. de cliente es EF5C8E094D2A4A769998D93440D8115D.

      Importante

      Debe quitar los guiones de Client ID.

    • Completa la segunda parte del argumento SECRET con el Client Secret del paso 1. En este ejemplo, el Client Secret es Replace-With-AAD-Client-Secret. La cadena final del argumento SECRET es una larga secuencia de letras y números, sin guiones.

      USE master;  
      
      CREATE CREDENTIAL Azure_EKM_Backup_cred   
          WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
          SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret'   
      FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;    
      
  2. Crear un inicio de sesión de SQL Server para el Motor de base de datos para el cifrado de copias de seguridad

    Cree un inicio de sesión de SQL Server que el motor de base de datos usará para cifrar las copias de seguridad, después agréguele la credencial del paso 1. En este ejemplo de Transact-SQL se usa la misma clave que se importó anteriormente.

    Importante

    No puedes usar la misma clave asimétrica para cifrado de respaldo si ya la has usado para TDE (el ejemplo anterior), o cifrado a nivel de columna (el siguiente ejemplo).

    Este ejemplo utiliza la CONTOSO_KEY_BACKUP clave asimétrica almacenada en la bóveda de llaves, que puedes importar o crear antes para la master base de datos, como se describe en el Paso 2: Crear una bóveda de llaves.

    USE master;  
    
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it is encrypting the backup.  
    CREATE LOGIN Backup_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP;  
    GO   
    
    -- Alter the Encrypted Backup Login to add the credential for use by   
    -- the Database Engine to access the key vault  
    ALTER LOGIN Backup_Login   
    ADD CREDENTIAL Azure_EKM_Backup_cred ;  
    GO  
    
  3. Haz una copia de seguridad de la base de datos

    Haz una copia de seguridad de la base de datos, especificando el cifrado con la clave asimétrica almacenada en la bóveda de claves.

    En el siguiente ejemplo, hay que tener en cuenta que si la base de datos ya estaba cifrada con TDE, y la clave asimétrica CONTOSO_KEY_BACKUP es diferente de la clave asimétrica TDE, la copia de seguridad se cifra tanto con la clave asimétrica TDE como con CONTOSO_KEY_BACKUP. La instancia de SQL Server objetivo necesita ambas claves para descifrar la copia de seguridad.

    USE master;  
    
    BACKUP DATABASE [DATABASE_TO_BACKUP]  
    TO DISK = N'[PATH TO BACKUP FILE]'   
    WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,   
    ENCRYPTION(ALGORITHM = AES_256,   
    SERVER ASYMMETRIC KEY = [CONTOSO_KEY_BACKUP]);  
    GO  
    
  4. Restaurar la base de datos

    Para restaurar una copia de seguridad de base de datos cifrada con TDE, la instancia de SQL Server destino debe primero tener una copia de la clave asimétrica del vault utilizada para el cifrado. Para proporcionar esa copia:

    • Si la clave asimétrica original usada para TDE ya no está en el bóveda de claves, restaura la copia de seguridad de la clave del bóveda de claves o reimportala desde un HSM local. Para que la huella digital de la clave coincida con la huella registrada en la copia de seguridad de la base de datos, la clave debe usar el mismo nombre de clave de la bóveda de claves que tenía originalmente.

    • Aplica los pasos 1 y 2 en la instancia de SQL Server objetivo.

    • Después de que la instancia de SQL Server objetivo tenga acceso a las claves asimétricas usadas para cifrar la copia de seguridad, restaura la base de datos en el servidor.

    Código de ejemplo para restaurar:

    RESTORE DATABASE [DATABASE_TO_BACKUP]  
    FROM DISK = N'[PATH TO BACKUP FILE]'   
        WITH FILE = 1, NOUNLOAD, REPLACE;  
    GO  
    

    Para obtener más información sobre las opciones de copia de seguridad, vea BACKUP (Transact-SQL).

Cifrado a nivel de columna mediante una clave asimétrica de la bóveda de claves

En el siguiente ejemplo, se crea una clave simétrica protegida por la clave asimétrica en el Almacén de claves. La clave simétrica cifra entonces los datos de la base de datos.

Importante

No puedes usar la misma clave asimétrica para cifrado a nivel de columna si ya has usado esa clave para cifrado de respaldo.

Este ejemplo utiliza la CONTOSO_KEY_COLUMNS clave asimétrica almacenada en el almacén de claves, que puedes importar o crear antes, como se describe en el Paso 2: Crear un almacén de claves. Para usar esta clave asimétrica en la ContosoDatabase base de datos, ejecuta la CREATE ASYMMETRIC KEY sentencia de nuevo para dar a la ContosoDatabase base de datos una referencia a la clave.

USE [ContosoDatabase];  
GO  
  
-- Create a reference to the key in the key vault  
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS   
FROM PROVIDER [AzureKeyVault_EKM_Prov]  
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',  
CREATION_DISPOSITION = OPEN_EXISTING;  
  
-- Create the data encryption key.  
-- The data encryption key can be created using any SQL Server   
-- supported algorithm or key length.  
-- The DEK will be protected by the asymmetric key in the key vault  
  
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY  
    WITH ALGORITHM=AES_256  
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
DECLARE @DATA VARBINARY(MAX);  
  
--Open the symmetric key for use in this session  
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY   
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
--Encrypt syntax  
SELECT @DATA = ENCRYPTBYKEY  
    (  
    KEY_GUID('DATA_ENCRYPTION_KEY'),   
    CONVERT(VARBINARY,'Plain text data to encrypt')  
    );  
  
-- Decrypt syntax  
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));  
  
--Close the symmetric key  
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;