EncryptByKey (Transact-SQL)

Cifra datos utilizando una clave simétrica.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL


EncryptByKey ( 
                                key_GUID , { 'cleartext' | @cleartext }
                [ 
                                        , { add_authenticator | @add_authenticator }
                                        , { authenticator | @authenticator } 
                ]
                          )

key_GUID

Es el GUID de la clave que se utilizará para cifrar cleartext. uniqueidentifier.

' cleartext '

Son los datos que se cifrarán con la clave.

@cleartext

Variable de tipo nvarchar, char, varchar, binary, varbinary o nchar que contiene datos que se van a cifrar con la clave.

add_authenticator

Indica si se cifrará un autenticador junto con cleartext. Debe ser 1 cuando se utilice un autenticador. int.

@add_authenticator

Indica si se cifrará un autenticador junto con cleartext. Debe ser 1 cuando se utilice un autenticador. int.

authenticator

Son los datos de los que se derivará un autenticador. sysname.

@authenticator

Es una variable que contiene los datos de los que se derivará un autenticador.

varbinary con un tamaño máximo de 8.000 bytes.

EncryptByKey utiliza una clave simétrica. Esta clave debe estar abierta. Si la clave simétrica ya está abierta en la sesión actual, no tiene que abrirla de nuevo en el contexto de la consulta.

El autenticador le ayudará a impedir la sustitución de todo el valor de los campos cifrados. Por ejemplo, considere la siguiente tabla de datos de nóminas:

Employee_ID Standard_Title Base_Pay

345

Copy Room Assistant

Fskj%7^edhn00

697

Chief Financial Officer

M0x8900f56543

694

Data Entry Supervisor

Cvc97824%^34f

Sin romper el cifrado, un usuario no autorizado puede obtener información importante del contexto en el que se almacena el texto cifrado. Puesto que al Chief Financial Official se le paga más que al Copy Room Assistant, el valor cifrado como M0x8900f56543 debe ser mayor que el valor cifrado como Fskj%7^edhn00. En este caso, cualquier usuario con el permiso ALTER en la tabla puede elevar al Copy Room Assistant al sustituir los datos en su campo Base_Pay con una copia de los datos almacenados en el campo Base_Pay del Chief Financial Officer. Este ataque de sustitución del valor completo omite el cifrado completamente.

Estos ataques de sustitución de valor completo se pueden combatir agregando información contextual al texto sin formato antes de cifrarlo. Esta información contextual se usa para comprobar que el texto sin formato no se ha movido.

Si se especifica un parámetro de autenticador al cifrar los datos, se necesita el mismo autenticador para descifrar los datos mediante DecryptByKey. En el momento del cifrado, se cifra un hash del autenticador junto con el texto sin formato. En el momento del descifrado, el mismo autenticador se debe pasar a DecryptByKey. Si los dos no coinciden, se produce un error en el descifrado. Esto indica que el valor se ha movido desde que se cifró. Se recomienda utilizar la clave principal de la tabla donde se almacenará el resultado como el valor de este parámetro.

El cifrado y descifrado simétrico es relativamente rápido y se puede adaptar para trabajar con grandes cantidades de datos.

ms174361.note(es-es,SQL.90).gifImportante:
El uso de las funciones de cifrado de SQL Server que utilizan el valor ANSI_PADDING OFF puede producir la pérdida de datos debido a las conversiones implícitas. Para obtener más información acerca de las consultas ANSI_PADDING, vea SET ANSI_PADDING (Transact-SQL).

La funcionalidad ilustrada en los siguientes ejemplos se basa en claves y certificados que se crean en Cómo cifrar una columna de datos.

A. Cifrar una cadena con una clave simétrica

En el siguiente ejemplo se agrega una columna a la tabla Employee y, a continuación, se cifra el valor del número de seguridad social almacenado en la columna NationalIDNumber.

USE AdventureWorks;
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

B. Cifrar un registro junto con un valor de autenticación

USE AdventureWorks;

-- Create a column in which to store the encrypted data.
ALTER TABLE Sales.CreditCard. 
    ADD CardNumber_Encrypted varbinary(128); 
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 with symmetric 
-- key CreditCards_Key11.
-- Save the result in column CardNumber_Encrypted.  
UPDATE Sales.CreditCard
SET CardNumber_Encrypted = EncryptByKey(Key_GUID('CreditCards_Key11'), 
    CardNumber, 1, CONVERT( varbinary, CreditCardID) );
GO

Adiciones de comunidad

AGREGAR
Mostrar: