Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
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.- Si usa la versión global de Azure, reemplace el argumento
IDENTITYpor el nombre de Azure Key Vault de Paso 2: Creación de un almacén de claves. - Si usas una nube privada de Azure, por ejemplo Azure Government, Azure operado por 21Vianet o Azure Alemania, sustituye el argumento
IDENTITYpor el URI de Vault devuelto en Create a key vault and key by using PowerShell. No incluyahttps://en el URI de la bóveda de claves.
- Si usa la versión global de Azure, reemplace el argumento
Sustituye la primera parte del
SECRETargumento 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 esEF5C8E094D2A4A769998D93440D8115D.Importante
Debe quitar los guiones de Client ID.
Completa la segunda parte del
SECRETargumento con el Secreto del Cliente del paso 1. En este ejemplo, el Secreto del Cliente esReplaceWithAADClientSecret.La cadena final del
SECRETargumento 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;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 ; GOCrear 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; GOActiva el TDE
-- Alter the database to enable transparent data encryption. ALTER DATABASE ContosoDatabase SET ENCRYPTION ON; GOUsando 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.
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
tempdbse 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.
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.- Si usa la versión global de Azure, reemplace el argumento
IDENTITYpor el nombre de Azure Key Vault de Paso 2: Creación de un almacén de claves. - Si usas una nube privada de Azure, por ejemplo Azure Government, Microsoft Azure operado por 21Vianet o Azure Alemania, sustituye el argumento
IDENTITYpor el URI del almacén devuelto en Crear un almacén de claves y una clave mediante PowerShell. No incluyahttps://en el URI de la bóveda de claves.
- Si usa la versión global de Azure, reemplace el argumento
Sustituye la primera parte del
SECRETargumento 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 esEF5C8E094D2A4A769998D93440D8115D.Importante
Debe quitar los guiones de Client ID.
Completa la segunda parte del argumento
SECRETcon el Client Secret del paso 1. En este ejemplo, el Client Secret esReplace-With-AAD-Client-Secret. La cadena final del argumentoSECRETes 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;
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_BACKUPclave asimétrica almacenada en la bóveda de llaves, que puedes importar o crear antes para lamasterbase 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 ; GOHaz 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_BACKUPes diferente de la clave asimétrica TDE, la copia de seguridad se cifra tanto con la clave asimétrica TDE como conCONTOSO_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]); GORestaurar 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; GOPara 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;