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.
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.
- Si usa la versión global de Azure, reemplace el argumento
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 esEF5C8E094D2A4A769998D93440D8115D
.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 esReplaceWithAADClientSecret
.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;
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
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
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.
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.
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.
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.
- Si usa la versión global de Azure, reemplace el argumento
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 esEF5C8E094D2A4A769998D93440D8115D
.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 esReplace-With-AAD-Client-Secret
. La cadena final para el argumentoSECRET
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;
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
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 porCONTOSO_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
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