ALTER COLUMN ENCRYPTION KEY (Transact-SQL)

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed Instance

Modifica una clave de cifrado de columna en una base de datos agregando o quitando un valor cifrado. Una clave de cifrado de columna puede tener hasta dos valores de cara a la rotación de la correspondiente clave maestra de columna. La clave de cifrado de columna se usa para cifrar columnas mediante Always Encrypted o Always Encrypted con enclaves seguros. Antes de agregar un valor de clave de cifrado de columna, debe definir la clave maestra de columna que se usó para cifrar el valor mediante SQL Server Management Studio o la instrucción CREATE MASTER KEY.

Convenciones de sintaxis de Transact-SQL

Sintaxis

ALTER COLUMN ENCRYPTION KEY key_name   
    [ ADD | DROP ] VALUE   
    (  
        COLUMN_MASTER_KEY = column_master_key_name   
        [, ALGORITHM = 'algorithm_name' , ENCRYPTED_VALUE =  varbinary_literal ]   
    ) [;]  

Argumentos

key_name
Clave de cifrado de columna que va a cambiar.

column_master_key_name
Especifica el nombre de la clave maestra de columna que se usa para cifrar la clave de cifrado de columna.

algorithm_name
Nombre del algoritmo de cifrado usado para cifrar el valor. El algoritmo para los proveedores del sistema debe ser RSA_OAEP. Este argumento no es válido cuando se elimina un valor de clave de cifrado de columna.

varbinary_literal
BLOB de la clave de cifrado de columna con la clave de cifrado maestra especificada. Este argumento no es válido cuando se elimina un valor de clave de cifrado de columna.

Advertencia

En esta instrucción no se deben pasar nunca valores de clave de cifrado de columna con texto simple. Si lo hace, perderá las ventajas que ofrece esta característica.

Comentarios

Normalmente, una clave de cifrado de columna se crea con un solo valor cifrado. Cuando es necesario rotar una clave maestra de columna (la clave maestra de columna actual debe reemplazarse con la nueva clave maestra de columna), puede agregar un nuevo valor de la clave de cifrado de columna, que se cifra con la nueva clave maestra de columna. Este flujo de trabajo le permite garantizar que las aplicaciones cliente pueden acceder a los datos cifrados con la clave de cifrado de columna, mientras la nueva clave maestra de columna se pone a disposición de las aplicaciones cliente. Un controlador compatible con Always Encrypted en una aplicación cliente que no tenga acceso a la nueva clave maestra podrá usar el valor de clave de cifrado de columna que está cifrado con la clave maestra de columna para tener acceso a datos confidenciales. Los algoritmos de cifrado, compatibles con Always Encrypted, necesitan que el valor de texto simple tenga 256 bits.

Se recomienda usar herramientas, como SQL Server Management Studio (SSMS) o PowerShell para rotar las claves maestras de columna. Consulte Rotación de claves de Always Encrypted mediante SQL Server Management Studio y Rotación de claves de Always Encrypted con de PowerShell.

Un valor cifrado se debe generar usando un proveedor de almacén de claves que encapsule el almacén de claves que contiene la clave maestra de columna.

Las claves maestras de columna se rotan por las siguientes razones:

  • Puede que la normativa de cumplimiento exija que las claves se roten periódicamente.
  • Una clave maestra de columna está en riesgo y es necesario rotarla por motivos de seguridad.
  • Para habilitar o deshabilitar el uso compartido de claves de cifrado de columna con enclave seguro en el lado servidor. Por ejemplo, si la clave maestra de columna actual no admite cálculos de enclave (no se ha definido con la propiedad ENCLAVE_COMPUTATIONS) y quiere habilitar estos cálculos en columnas protegidas con una clave de cifrado de columna que se cifra con la clave maestra de columna, deberá reemplazar la clave maestra de columna por la nueva clave con la propiedad ENCLAVE_COMPUTATIONS. Información general de administración de claves de Always Encrypted y Administración de claves para Always Encrypted con enclaves seguros.

Eche un vistazo a sys.columns (Transact-SQL), sys.column_encryption_keys (Transact-SQL) y sys.column_encryption_key_values (Transact-SQL) para saber más sobre las claves de cifrado de columna.

Permisos

Necesita el permiso ALTER ANY COLUMN ENCRYPTION KEY para la base de datos.

Ejemplos

A. Agregar un valor de clave de cifrado de columna

En el siguiente ejemplo se modifica una clave de cifrado de columna denominada MyCEK.

ALTER COLUMN ENCRYPTION KEY MyCEK  
ADD VALUE  
(  
    COLUMN_MASTER_KEY = MyCMK2,   
    ALGORITHM = 'RSA_OAEP',   
    ENCRYPTED_VALUE = 0x016E000001630075007200720065006E00740075007300650072002F006D0079002F0064006500650063006200660034006100340031003000380034006200350033003200360066003200630062006200350030003600380065003900620061003000320030003600610037003800310066001DDA6134C3B73A90D349C8905782DD819B428162CF5B051639BA46EC69A7C8C8F81591A92C395711493B25DCBCCC57836E5B9F17A0713E840721D098F3F8E023ABCDFE2F6D8CC4339FC8F88630ED9EBADA5CA8EEAFA84164C1095B12AE161EABC1DF778C07F07D413AF1ED900F578FC00894BEE705EAC60F4A5090BBE09885D2EFE1C915F7B4C581D9CE3FDAB78ACF4829F85752E9FC985DEB8773889EE4A1945BD554724803A6F5DC0A2CD5EFE001ABED8D61E8449E4FAA9E4DD392DA8D292ECC6EB149E843E395CDE0F98D04940A28C4B05F747149B34A0BAEC04FFF3E304C84AF1FF81225E615B5F94E334378A0A888EF88F4E79F66CB377E3C21964AACB5049C08435FE84EEEF39D20A665C17E04898914A85B3DE23D56575EBC682D154F4F15C37723E04974DB370180A9A579BC84F6BC9B5E7C223E5CBEE721E57EE07EFDCC0A3257BBEBF9ADFFB00DBF7EF682EC1C4C47451438F90B4CF8DA709940F72CFDC91C6EB4E37B4ED7E2385B1FF71B28A1D2669FBEB18EA89F9D391D2FDDEA0ED362E6A591AC64EF4AE31CA8766C259ECB77D01A7F5C36B8418F91C1BEADDD4491C80F0016B66421B4B788C55127135DA2FA625FB7FD195FB40D90A6C67328602ECAF3EC4F5894BFD84A99EB4753BE0D22E0D4DE6A0ADFEDC80EB1B556749B4A8AD00E73B329C95827AB91C0256347E85E3C5FD6726D0E1FE82C925D3DF4A9  
);  
GO  
  

B. Quitar un valor de clave de cifrado de columna

En el siguiente ejemplo se quita un valor para modificar una clave de cifrado de columna denominada MyCEK.

ALTER COLUMN ENCRYPTION KEY MyCEK  
DROP VALUE  
(  
    COLUMN_MASTER_KEY = MyCMK  
);  
GO  

Vea también

CREATE COLUMN ENCRYPTION KEY (Transact-SQL)
DROP COLUMN ENCRYPTION KEY (Transact-SQL)
CREATE COLUMN MASTER KEY (Transact-SQL)
Always Encrypted (motor de base de datos)
sys.column_encryption_keys (Transact-SQL)
sys.column_encryption_key_values (Transact-SQL)
sys.columns (Transact-SQL)
Always Encrypted
Información general de administración de claves de Always Encrypted
Administración de claves para Always Encrypted con enclaves seguros