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

Se aplica a:SQL Server

Las actividades de cifrado de SQL Server comunes con una clave asimétrica protegida por Azure Key Vault incluyen las siguientes tres áreas:

  • Cifrado de datos transparente con una clave asimétrica desde el Almacén de claves de Azure

  • Cifrado de copias de seguridad con una clave asimétrica desde Key Vault

  • Cifrado de nivel de columna con una clave asimétrica desde el Almacén de claves

Complete las partes de I a IV del tema Setup Steps for Extensible Key Management Using the Azure Key Vault(Pasos de instalación de Administración extensible de claves con el Almacén de claves de Azure) antes de seguir los pasos de este tema.

Nota:

Las versiones 1.0.0.440 y anteriores se han reemplazado y ya no se admiten en entornos de producción. Actualice a la versión 1.0.1.0 o posterior visitando el Centro de descarga de Microsoft y con las instrucciones de la sección "Actualización del conector de SQL Server" de la página Conector de SQL Server, apéndice.

Nota:

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

Cifrado de datos transparente con una clave asimétrica desde el Almacén de claves de Azure

Después de completar las partes I a IV del tema Setup Steps for Extensible Key Management Using the Azure Key Vault (Pasos de instalación de Administración extensible de claves con el Almacén de claves de Azure), use la clave del Almacén de claves de Azure para cifrar la clave de cifrado de la base de datos con TDE. Para más información sobre cómo girar claves mediante PowerShell, vea Rotación del protector de Cifrado de datos transparente (TDE) mediante PowerShell.

Importante

No elimine las versiones anteriores de la clave después de una sustitución. Cuando las claves se sustituyen, algunos datos siguen cifrados con las claves anteriores como, por ejemplo, las copias de seguridad de base de datos más antiguas, las copias de seguridad de los archivos de registro y los archivos de registro de transacciones.

Necesitará crear una credencial y un inicio de sesión, además de una clave de cifrado de base de datos, que cifrará los datos y registros de la base de datos. Para cifrar una base de datos, es necesario tener el permiso CONTROL en la base de datos. En el siguiente gráfico se muestra la jerarquía de la clave de cifrado al usar Azure key vault.

Diagram showing the hierarchy of the encryption key when using the 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 usa las credenciales de aplicación de Microsoft Entra para acceder a Key Vault durante la carga de la base de datos. Se recomienda crear otro id. de cliente y secreto, como se describe en el Paso 1, para el motor de base de datos, con el fin de limitar los permisos de Key Vault que se conceden.

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

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

      • Si usa la versión global de Azure, reemplace el argumento IDENTITY por el nombre de Azure Key Vault de la parte II.
      • Si usa una nube privada de Azure (por ejemplo, Azure Government, Azure operado por 21Vianet o Azure Alemania), reemplace el argumento IDENTITY por el URI de almacén que se devolvió en la parte II, paso 3. No incluya "https://" en el URI de almacén.
    • Reemplace la primera parte del argumento SECRET por el identificador de cliente de aplicación de Microsoft Entra del paso 1. En este ejemplo, el id. de cliente es EF5C8E094D2A4A769998D93440D8115D.

      Importante

      Debe quitar los guiones de Client ID.

    • Complete la segunda parte del argumento SECRET con el secreto de cliente de la parte I. En este ejemplo, el secreto de cliente de la parte 1 es ReplaceWithAADClientSecret.

    • La cadena final del argumento SECRET es una secuencia larga 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. Creación de 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 base de datos (DEK)

    La DEK cifrará los archivos de registros y datos en la instancia de la base de datos y se cifrará con la clave asimétrica del Almacén de claves de Azure. La DEK puede crearse con cualquier algoritmo compatible con SQL Server y cualquier longitud de clave.

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

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

    Con Management Studio, compruebe que se ha activado TDE conectándose a la base de datos con el Explorador de objetos. Haga clic con el botón derecho en la base de datos, seleccione Tareasy haga clic en Administrar cifrado de base de datos.

    Screenshot showing Object Explorer with Tasks > Manage Database Encryption selected.

    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.

    Screenshot of the Manage Database Encryption dialog box with the Set Database Encryption On option selected and a yellow banner that says Now TDE is turned on.

    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 con una clave asimétrica desde Key Vault

Las copias de seguridad cifradas se admiten a partir de SQL Server 2014 (12.x). En el ejemplo siguiente, se crea y se restaura una copia de seguridad cifrada con una clave de cifrado de datos protegida por la clave asimétrica en el Almacén de claves.
El motor de base de datos usa las credenciales de aplicación de Microsoft Entra para acceder a Key Vault durante la carga de la base de datos. Se recomienda crear otro id. de cliente y secreto, como se describe en el Paso 1, para el motor de base de datos, con el fin de limitar los permisos de Key Vault que se conceden.

  1. Crear una credencial de SQL Server para el motor de base de datos para usar con el cifrado de copia 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.

      • Si usa la versión global de Azure, reemplace el argumento IDENTITY por el nombre de Azure Key Vault de la parte II.
      • Si usa una nube privada de Azure (por ejemplo, Azure Government, Microsoft Azure operado por 21Vianet o Azure Alemania), reemplace el argumento IDENTITY por el URI de almacén que se devolvió en la parte II, paso 3. No incluya "https://" en el URI de almacén.
    • Reemplace la primera parte del argumento SECRET por el identificador de cliente de aplicación de Microsoft Entra del paso 1. En este ejemplo, el id. de cliente es EF5C8E094D2A4A769998D93440D8115D.

      Importante

      Debe quitar los guiones de Client ID.

    • Complete la segunda parte del argumento SECRET con el secreto de cliente de la parte I. En este ejemplo, el secreto de cliente de la parte I es Replace-With-AAD-Client-Secret. La cadena final para el argumento SECRET será una secuencia larga 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 copia 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 puede usar la misma clave asimétrica para el cifrado de copias de seguridad si ya ha usado esa clave para TDE (ejemplo anterior) o el cifrado de nivel de columna (ejemplo siguiente).

    En este ejemplo se usa la clave asimétrica CONTOSO_KEY_BACKUP almacenada en el Almacén de claves, que se puede importar o crear anteriormente para la base de datos maestra, como se describe en la Parte IV, Paso 5, más arriba.

    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. Copia de seguridad de la base de datos

    Realice una copia de seguridad de la base de datos especificando el cifrado con la clave asimétrica guardada en el almacén de claves.

    En el ejemplo siguiente, tenga en cuenta que si la base de datos ya se ha cifrado con TDE y la clave asimétrica CONTOSO_KEY_BACKUP es diferente de la clave asimétrica de TDE, la copia de seguridad se cifrará tanto por la clave asimétrica TDE como por CONTOSO_KEY_BACKUP. La instancia de SQL Server de destino necesitará 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 la base de datos cifrada con TDE, la instancia de SQL Server de destino debe disponer primero de una copia de la clave asimétrica de Key Vault usada para el cifrado. Así es como se lograría:

    • Si la clave asimétrica original que se usa para TDE ya no está en Key Vault, restaure la copia de seguridad de la clave de Key Vault o vuelva a importar la clave desde un HSM local. Importante: Para que la huella digital de la clave coincida con la huella digital registrada en la copia de seguridad de la base de datos, la clave debe tener el mismo nombre de clave de Key Vault que tenía originalmente.

    • Aplique los pasos 1 y 2 a la instancia de SQL Server de destino.

    • Una vez que la instancia de SQL Server de destino tenga acceso a las claves asimétricas usadas para cifrar la copia de seguridad, restaure la base de datos en el servidor.

    Código de muestra de la restauración:

    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 copias de seguridad, vea BACKUP (Transact-SQL).

Cifrado de nivel de columna con una clave asimétrica desde el Almacén de claves

En el ejemplo siguiente, se crea una clave simétrica protegida por la clave asimétrica en el Almacén de claves. Luego, se usa la clave simétrica para cifrar los datos de la base de datos.

Importante

No puede usar la misma clave asimétrica para el cifrado de nivel de columna si ya ha usado esa clave para el cifrado de copia de seguridad.

En este ejemplo se usa la clave asimétrica CONTOSO_KEY_COLUMNS almacenada en el Almacén de claves, que se puede importar o crear anteriormente, como se describe en el Paso 3, sección 3 de Setup Steps for Extensible Key Management Using the Azure Key Vault(Pasos de instalación de Administración extensible de claves con el Almacén de claves de Azure). Para usar esta clave asimétrica en la base de datos de ContosoDatabase , debe ejecutar de nuevo la instrucción CREATE ASYMMETRIC KEY para proporcionar a la base de datos de ContosoDatabase 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;  

Consulte también

Setup Steps for Extensible Key Management Using the Azure Key Vault
Administración extensible de claves con Azure Key Vault
EKM provider enabled (opción de configuración del servidor)
Mantenimiento y solución de problemas del conector de SQL Server