Cifrar una columna de datos
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
En este artículo se describe cómo cifrar una columna de datos utilizando el cifrado simétrico en SQL Server mediante Transact-SQL. A veces, esto se conoce como cifrado de nivel de columna, o cifrado de nivel de celda.
Los ejemplos de código de Transact-SQL de este artículo utilizan la base de datos de ejemplo AdventureWorks2022
o AdventureWorksDW2022
, que se pueden descargar desde la página principal de Ejemplos y proyectos de la comunidad de Microsoft SQL Server.
Seguridad
Permisos
Los siguientes permisos son necesarios para realizar los pasos siguientes:
- El permiso
CONTROL
en la base de datos. - El permiso
CREATE CERTIFICATE
en la base de datos. Solo los inicios de sesión de Windows, los inicios de sesión de SQL Server y los roles de aplicación pueden poseer certificados. Los grupos y roles no pueden poseer los certificados. - Permiso
ALTER
en la tabla. - Algún permiso en la clave y no debe haberse denegado el permiso
VIEW DEFINITION
.
Crear clave maestra de base de datos
Para usar los ejemplos siguientes, debe tener una clave maestra de base de datos. Si la base de datos aún no tiene una clave maestra de base de datos, cree una. Para crear una, conéctese a la base de datos y ejecute el script siguiente. Asegúrese de utilizar una contraseña compleja.
Copie y pegue el ejemplo a continuación en la ventana de consulta que está conectada a la base de datos de muestra AdventureWorks
. Seleccione Execute(Ejecutar).
CREATE MASTER KEY ENCRYPTION BY
PASSWORD = '<complex password>';
Realice siempre una copia de seguridad de la clave maestra de base de datos. Para obtener más información sobre las claves maestras de base de datos, vea CREATE MASTER KEY (Transact-SQL).
Ejemplo: Cifrar con cifrado simétrico y autenticador
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos.
En la barra Estándar, seleccione Nueva consulta.
Copie y pegue el ejemplo a continuación en la ventana de consulta que está conectada a la base de datos de muestra
AdventureWorks
. Seleccione Execute(Ejecutar).CREATE CERTIFICATE Sales09 WITH SUBJECT = 'Customer Credit Card Numbers'; GO CREATE SYMMETRIC KEY CreditCards_Key11 WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE Sales09; GO -- Create a column in which to store the encrypted data. ALTER TABLE Sales.CreditCard ADD CardNumber_Encrypted varbinary(160); GO -- Open the symmetric key with which to encrypt the data. OPEN SYMMETRIC KEY CreditCards_Key11 DECRYPTION BY CERTIFICATE Sales09; -- Encrypt the value in column CardNumber using the -- symmetric key CreditCards_Key11. -- Save the result in column CardNumber_Encrypted. UPDATE Sales.CreditCard SET CardNumber_Encrypted = EncryptByKey(Key_GUID('CreditCards_Key11') , CardNumber, 1, HASHBYTES('SHA2_256', CONVERT( varbinary , CreditCardID))); GO -- Verify the encryption. -- First, open the symmetric key with which to decrypt the data. OPEN SYMMETRIC KEY CreditCards_Key11 DECRYPTION BY CERTIFICATE Sales09; GO -- Now list the original card number, the encrypted card number, -- and the decrypted ciphertext. If the decryption worked, -- the original number will match the decrypted number. SELECT CardNumber, CardNumber_Encrypted AS 'Encrypted card number', CONVERT(nvarchar, DecryptByKey(CardNumber_Encrypted, 1 , HASHBYTES('SHA2_256', CONVERT(varbinary, CreditCardID)))) AS 'Decrypted card number' FROM Sales.CreditCard; GO
Cifrado simétrico simple
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos.
En la barra Estándar, seleccione Nueva consulta.
Copie y pegue el ejemplo a continuación en la ventana de consulta que está conectada a la base de datos de muestra
AdventureWorks
. Seleccione Execute(Ejecutar).CREATE CERTIFICATE HumanResources037 WITH SUBJECT = 'Employee Social Security Numbers'; GO CREATE SYMMETRIC KEY SSN_Key_01 WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE HumanResources037; GO USE [AdventureWorks2022]; GO -- Create a column in which to store the encrypted data. ALTER TABLE HumanResources.Employee ADD EncryptedNationalIDNumber varbinary(128); GO -- Open the symmetric key with which to encrypt the data. OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037; -- Encrypt the value in column NationalIDNumber with symmetric -- key SSN_Key_01. Save the result in column EncryptedNationalIDNumber. UPDATE HumanResources.Employee SET EncryptedNationalIDNumber = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber); GO -- Verify the encryption. -- First, open the symmetric key with which to decrypt the data. OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037; GO -- Now list the original ID, the encrypted ID, and the -- decrypted ciphertext. If the decryption worked, the original -- and the decrypted ID will match. SELECT NationalIDNumber, EncryptedNationalIDNumber AS 'Encrypted ID Number', CONVERT(nvarchar, DecryptByKey(EncryptedNationalIDNumber)) AS 'Decrypted ID Number' FROM HumanResources.Employee; GO