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 2019 (15.x) y versiones posteriores en Windows
Azure SQL Database
En este artículo se describe cómo realizar operaciones criptográficas localmente en columnas con Always Encrypted con enclaves seguros y la instrucción ALTER TABLEStatement/ALTER COLUMN. Para obtener información básica sobre el cifrado in situ y los requisitos previos generales, consulte Configurar el cifrado de columnas in situ mediante Always Encrypted con enclaves seguros.
Con la instrucción ALTER TABLE o ALTER COLUMN, puede establecer la configuración de cifrado de destino de una columna. Al ejecutar la instrucción , el enclave seguro del lado servidor cifra, vuelve a cifrar o descifra los datos almacenados en la columna, según la configuración de cifrado actual y de destino especificada en la definición de columna de la instrucción .
- Si la columna no está cifrada actualmente, se cifra si especifica la
ENCRYPTED WITHcláusula en la definición de columna. - Si la columna está cifrada actualmente, se descifra (se convierte en una columna de texto no cifrado), si no especifica la
ENCRYPTED WITHcláusula en la definición de columna. - Si la columna está cifrada actualmente, se vuelve a cifrar si especifica la
ENCRYPTED WITHcláusula y el tipo de cifrado de columna especificado o la clave de cifrado de columna son diferentes del tipo de cifrado usado actualmente o la clave de cifrado de columna.
Nota:
No se pueden combinar operaciones criptográficas con otros cambios en una sola ALTER TABLE/ALTER COLUMN instrucción, excepto para cambiar la columna a NULL o NOT NULL, o cambiar una intercalación. Por ejemplo, no puede cifrar una columna y cambiar el tipo de datos de la columna en una sola ALTER TABLE/ALTER COLUMN instrucción Transact-SQL. Utilice dos instrucciones independientes.
Al igual que con cualquier consulta que use un enclave seguro del lado servidor, debe enviar una ALTER TABLE/ALTER COLUMN instrucción que desencadene el cifrado local a través de una conexión con Always Encrypted y los cálculos de enclave habilitados.
En el resto de este artículo se describe cómo desencadenar el cifrado en contexto mediante la instrucción ALTER TABLE/ALTER COLUMN de SQL Server Management Studio. Como alternativa, puede emitir ALTER TABLE/ALTER COLUMN desde Visual Studio Code o desde la aplicación.
Nota:
Actualmente, el cmdlet Invoke-Sqlcmd del módulo SqlServer de PowerShell y sqlcmd no admiten el uso ALTER TABLE/ALTER COLUMN para operaciones criptográficas en situ.
Realice el cifrado local con Transact-SQL en SSMS
Prerrequisitos
- Requisitos previos descritos en Configuración del cifrado de columnas en contexto mediante Always Encrypted con enclaves seguros.
- Instale la versión más reciente de SQL Server Management Studio (SSMS).
Pasos
Abra una ventana de consulta con Always Encrypted y los cálculos de enclave habilitados en la conexión de base de datos. Para obtener más información, vea Habilitación y deshabilitación de Always Encrypted para una conexión de base de datos.
En la ventana de consulta, ejecute la
ALTER TABLE/ALTER COLUMNinstrucción . Especifique la configuración de cifrado de destino para una columna que desea cifrar, descifrar o volver a cifrar. Si va a cifrar o volver a cifrar la columna, use la cláusulaENCRYPTED WITH. Si la columna es una columna de cadena (por ejemplo,char,varchar,nchar,nvarchar), es posible que también tenga que cambiar la intercalación a una intercalación BIN2.Nota:
Si su clave maestra de columna se almacena en Azure Key Vault, es posible que se le pida que inicie sesión en Azure.
Borre la caché de planes de todos los lotes y procedimientos almacenados que acceden a la tabla, a fin de actualizar la información de cifrado de parámetros.
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;Nota:
Si no quita el plan de la consulta afectada de la memoria caché, es posible que se produzca un error en la primera ejecución de la consulta después del cifrado.
Use
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHEoDBCC FREEPROCCACHEpara borrar cuidadosamente la memoria caché del plan, ya que podría provocar una degradación temporal del rendimiento de las consultas. Para minimizar el impacto negativo de borrar la memoria caché, solo puede quitar los planes de las consultas afectadas de forma selectiva.Llame a sp_refresh_parameter_encryption para actualizar los metadatos de los parámetros de cada módulo (procedimiento almacenado, función, vista, desencadenador) que se conservan en sys.parameters y que podrían invalidarse mediante el cifrado de las columnas.
Ejemplos
Cifrar una columna en el lugar
El siguiente ejemplo asume:
-
CEK1es una clave de cifrado de columna habilitada para enclaves. - La columna
SSNes texto no cifrado y actualmente usa la intercalación de base de datos predeterminada, por ejemplo, una intercalación Latin1 distinta de BIN2 (comoLatin1_General_CI_AI_KS_WS).
La instrucción cifra la columna SSN en la propia columna mediante cifrado determinista y la clave de cifrado de columna habilitada para enclaves. También reemplaza el cotejamiento predeterminado de la base de datos por el cotejamiento BIN2 correspondiente (en la misma página de código).
La operación se realiza en línea (ONLINE = ON). Tome nota de la llamada a ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE, que recrea los planes de las consultas afectadas por el cambio del esquema de la tabla.
ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] CHAR (11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = [CEK1],
ENCRYPTION_TYPE = DETERMINISTIC,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
) NOT NULL WITH (ONLINE = ON);
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Volver a cifrar una columna localmente para cambiar el tipo de cifrado
El siguiente ejemplo asume:
- La columna
SSNestá cifrada mediante cifrado determinista y una clave de cifrado de columna habilitada para el enclave,CEK1. - La intercalación actual, establecida en el nivel de columna, es
Latin1_General_BIN2.
La siguiente instrucción vuelve a cifrar la columna mediante el cifrado aleatorio y la misma clave (CEK1).
ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] CHAR (11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = [CEK1],
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
) NOT NULL;
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Volver a cifrar una columna in situ para rotar una clave de cifrado de columna
El siguiente ejemplo asume:
- La columna
SSNestá cifrada mediante cifrado aleatorio y una clave de cifrado de columna habilitada para el enclave,CEK1. -
CEK2es una clave de cifrado de columna compatible con enclave (diferente deCEK1). - La intercalación actual, establecida en el nivel de columna, es
Latin1_General_BIN2.
La siguiente instrucción vuelve a cifrar la columna con CEK2.
ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] CHAR (11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = [CEK2],
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
) NOT NULL;
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Descifrar una columna en el mismo lugar
El siguiente ejemplo asume:
- La columna
SSNestá cifrada mediante una clave de cifrado de columna compatible con enclave. - La intercalación actual, establecida en el nivel de columna, es
Latin1_General_BIN2.
La siguiente instrucción descifra la columna y mantiene la intercalación sin cambios. También puede optar por cambiar el cotejamiento. Por ejemplo, cambie la ordenación por una ordenación distinta de BIN2 en la misma instrucción.
ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] CHAR (11) COLLATE Latin1_General_BIN2
WITH (ONLINE = ON);
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Contenido relacionado
- Solución de problemas comunes de Always Encrypted con enclaves seguros
- Configure el cifrado de columnas localmente mediante Always Encrypted con enclaves seguros
- Habilite Always Encrypted con enclaves seguros para las columnas cifradas existentes
- Introducción al uso de Always Encrypted con enclaves seguros
- Ejecutar instrucciones Transact-SQL mediante enclaves seguros
- Creación y uso de índices en columnas mediante Always Encrypted con enclaves seguros
- Desarrollo de aplicaciones mediante Always Encrypted con enclaves seguros