Configuración y uso de Always Encrypted con enclaves seguros
Se aplica a: SQL Server 2019 (15.x) y versiones posteriores: solo Windows Base de datos de Azure SQL
Always Encrypted con enclaves seguros permite que algunas instrucciones de Transact-SQL (T-SQL) realicen cálculos confidenciales sobre columnas de base de datos cifradas en un enclave seguro del lado servidor.
Instrucciones con enclaves seguros
Los siguientes tipos de instrucciones T-SQL usan enclaves seguros.
Instrucciones de DDL con enclaves seguros
Para los siguientes tipos de instrucciones de Lenguaje de definición de datos (DDL) se necesitan enclaves seguros.
- Las instrucciones ALTER TABLE definición_de_columna (Transact-SQL) que desencadenan operaciones criptográficas en contexto mediante claves habilitadas para el enclave. Para obtener más información, vea Configuración del cifrado de columnas en contexto mediante Always Encrypted con enclaves seguros.
- Las instrucciones CREATE INDEX (Transact-SQL) y ALTER INDEX (Transact-SQL) que crean o modifican índices en columnas habilitadas para el enclave mediante el cifrado aleatorio. Para más información, vea Creación y uso de índices en columnas de Always Encrypted con enclaves seguros.
Instrucciones de DML con enclaves seguros
En las siguientes instrucciones del Lenguaje de manipulación de datos (DML) o las consultas realizadas en columnas habilitadas para el enclave mediante cifrado aleatorio se necesitan enclaves seguros:
- Las consultas que usan uno o varios de los siguientes operadores de Transact-SQL admitidos dentro de enclaves seguros:
- Operadores de comparación
- BETWEEN (Transact-SQL)
- IN (Transact-SQL)
- LIKE (Transact-SQL)
- DISTINCT
- Combinaciones: SQL Server 2019 (15.x) solo admite combinaciones de bucle anidadas. SQL Server 2022 (16.x) y Azure SQL Database admite combinaciones de bucle anidadas, de hash y de combinación
- Cláusula SELECT - ORDER BY (Transact-SQL). El modo por filas se admite en SQL Server 2022 (16.x) y Azure SQL Database. No se admite en SQL Server 2019 (15.x)
- Cláusula SELECT - GROUP BY (Transact-SQL). El modo por filas se admite en SQL Server 2022 (16.x) y Azure SQL Database. No se admite en SQL Server 2019 (15.x)
- Las consultas que insertan, actualizan o eliminan filas, que a su vez desencadenan la inserción o eliminación de una clave de índice en un índice de una columna habilitada para el enclave. Para más información, vea Creación y uso de índices en columnas de Always Encrypted con enclaves seguros
Nota:
Las operaciones en índices y consultas DML confidenciales que usan enclaves solo se admiten en columnas habilitadas para el enclave en las que se utiliza el cifrado aleatorio. No se admite el cifrado determinista.
El nivel de compatibilidad de la base de datos debe estar establecido en SQL Server 2022 (160) o superior.
En Azure SQL Database y en SQL Server 2022 (16.x), en las consultas confidenciales que utilizan enclaves en una columna de cadena de caracteres (char
, nchar
) es necesario que la columna use una intercalación de punto de código binario (_BIN2) o una intercalación UTF-8. En SQL Server 2019 (15.x), se requiere una intercalación_BIN2.
Comandos DBCC con enclaves seguros
Los comandos administrativos DBCC (Transact-SQL) que implican la comprobación de la integridad de los índices también pueden necesitar enclaves seguros si la base de datos contiene índices en columnas habilitadas para el enclave mediante cifrado aleatorio. Por ejemplo, DBCC CHECKDB (Transact-SQL) y DBCC CHECKTABLE (Transact-SQL).
Requisitos previos para ejecutar instrucciones con enclaves seguros
El entorno debe cumplir los requisitos siguientes para admitir la ejecución de instrucciones que usan un enclave seguro.
La instancia de SQL Server o la base de datos y el servidor en Azure SQL Database deben estar configurados correctamente para admitir los enclaves y la atestación, si fuera necesario. Para obtener más información, vea Configuración del enclave seguro y la atestación.
Al conectarse a la base de datos desde una aplicación o una herramienta (como SQL Server Management Studio), asegúrese de:
Usar una versión del controlador de cliente o una versión de herramienta que admita Always Encrypted con enclaves seguros.
- Consulte Desarrollo de aplicaciones con Always Encrypted con enclaves seguros para obtener información sobre los controladores cliente compatibles con Always Encrypted con enclaves seguros.
- Consulte las secciones siguientes para obtener información sobre las herramientas que admiten Always Encrypted con enclaves seguros.
Habilitar Always Encrypted para una conexión de base de datos.
Especificar un protocolo de atestación, que determina si la aplicación o la herramienta deben atestiguar el enclave antes de enviar consultas de enclave y el servicio de atestación que debe usar. La mayoría de las herramientas y controladores admiten los siguientes protocolos de atestación:
- Microsoft Azure Attestation: aplica atestación con Microsoft Azure Attestation.
- Servicio de protección de host: aplica la certificación mediante el servicio de protección de host.
- Ninguno - permite usar enclaves sin atestación.
La siguiente tabla especifica los protocolos de atestación válidos para determinados productos SQL y tecnologías de enclave:
Producto Tecnología de enclave Protocolos de atestación admitidos SQL Server 2019 (15.x) y posterior Enclaves de VBS Servicio de protección de host, Ninguno Azure SQL Database Enclaves SGX (en bases de datos de la serie DC) Microsoft Azure Attestation Azure SQL Database Enclaves de VBS Ninguno
Especificar una dirección URL de atestación válida para su entorno si usa la atestación.
- Si usa SQL Server y el Servicio de protección de host (HGS), vea Determinación y uso compartido de la dirección URL de atestación de HGS.
- Si usa Azure SQL Database con Enclaves de Intel SGX y Microsoft Azure Attestation, vea Determinación de la dirección URL de atestación de la directiva de atestación.
Requisitos previos para ejecutar instrucciones T-SQL con enclaves en SSMS
Descargue la última versión de SQL Server Management Studio (SSMS).
Asegúrese de ejecutar las instrucciones desde una ventana de consulta que use una conexión que tenga Always Encrypted y los parámetros de atestación correctamente configurados.
En el cuadro de diálogo Conectar a servidor, especifique el nombre del servidor, seleccione un método de autenticación e indique sus credenciales.
Seleccione Opciones >> y seleccione la pestaña Propiedades de conexión. Especifique el nombre de la base de datos.
Seleccione la pestaña Always Encrypted.
Seleccione Habilitar Always Encrypted (cifrado de columna).
Seleccione Habilitar enclaves seguros.
Establezca Protocolo en:
- Servicio de protección de host si utiliza SQL Server.
- Microsoft Azure Attestation si utiliza Azure SQL Database con enclaves de Intel SGX.
- Ninguno si utiliza Azure SQL Database con enclaves de VBS.
Especifique la dirección URL de atestación del enclave. No es aplicable cuando el Protocolo está establecido en Ninguno. Por ejemplo,
https://hgs.bastion.local/Attestation
ohttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
.Seleccione Conectar.
Si se le pide que habilite la parametrización para las consultas Always Encrypted, haga clic en Habilitar.
Para obtener más información, vea Habilitación y deshabilitación de Always Encrypted para una conexión de base de datos.
Requisitos previos para ejecutar instrucciones T-SQL con enclaves en Azure Data Studio
Se recomienda la versión mínima recomendada 1.23 o superior. Asegúrese de ejecutar las instrucciones desde una ventana de consulta que use una conexión que tenga Always Encrypted y tanto el protocolo como la dirección URL de atestación correctos configurados.
En el cuadro de diálogo Conexión, seleccione Avanzadas….
Para habilitar Always Encrypted para la conexión, establezca el campo Always Encrypted en Habilitado.
Para habilitar enclaves seguros, establezca el campo Enclaves seguros en Habilitado.
Especifique el protocolo y la dirección URL de atestación.
- Si usa SQL Server, establezca Protocolo de atestación en Servicio de protección de host y escriba la dirección URL de atestación del Servicio de protección de host en el campo Dirección URL de atestación de enclave.
- Si usa una base de datos de la serie DC con Intel SGX en Azure SQL Database, establezca Protocolo de atestación en Azure Attestation y escriba la dirección URL de atestación que hace referencia a la directiva de Microsoft Azure Attestation en el campo Dirección URL de atestación de enclave.
- Si usa una base de datos con enclaves de VBS habilitados en Azure SQL Database, establezca Protocolo de atestación en Ninguno.
Seleccione Aceptar para cerrar las Propiedades avanzadas.
Para obtener más información, vea Habilitación y deshabilitación de Always Encrypted para una conexión de base de datos.
Si tiene previsto ejecutar consultas DML con parámetros, también tendrá que habilitar Parametrización con Always Encrypted.
Ejemplos
En esta sección se incluyen ejemplos de consultas DML que usan enclaves.
En los ejemplos se usa el esquema siguiente.
CREATE SCHEMA [HR];
GO
CREATE TABLE [HR].[Jobs](
[JobID] [int] IDENTITY(1,1) PRIMARY KEY,
[JobTitle] [nvarchar](50) NOT NULL,
[MinSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[MaxSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
);
GO
CREATE TABLE [HR].[Employees](
[EmployeeID] [int] IDENTITY(1,1) PRIMARY KEY,
[SSN] [char](11) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[JobID] [int] NULL,
FOREIGN KEY (JobID) REFERENCES [HR].[Jobs] (JobID)
);
GO
Búsqueda de coincidencias exactas
La siguiente consulta realiza una búsqueda de coincidencias exactas en la columna de cadena SSN
cifrada.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
Búsqueda de coincidencia de patrones
La siguiente consulta realiza una búsqueda de coincidencia de patrones en la columna de cadena cifrada SSN
, y busca empleados con los últimos dígitos de un número de la seguridad social.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
Comparación de rangos
La consulta siguiente realiza una comparación de rangos en la columna Salary
cifrada, y busca empleados con salarios dentro del rango especificado.
DECLARE @MinSalary money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO
Combinaciones
La consulta siguiente realiza una combinación entre las tablas Employees
y Jobs
mediante la columna Salary
cifrada. La consulta recupera los empleados con salarios fuera de un rango de salarios para el trabajo del empleado.
SELECT * FROM [HR].[Employees] e
JOIN [HR].[Jobs] j
ON e.[JobID] = j.[JobID] AND e.[Salary] > j.[MaxSalary] OR e.[Salary] < j.[MinSalary];
GO
Ordenar
La consulta siguiente ordena los registros de empleados en función de la columna Salary
cifrada y recupera los 10 empleados con los salarios más altos.
Nota:
La ordenación de columnas cifradas se admite en SQL Server 2022 (16.x) y Azure SQL Database, pero no en SQL Server 2019 (15.x).
SELECT TOP(10) * FROM [HR].[Employees]
ORDER BY [Salary] DESC;
GO
Pasos siguientes
Consulte también
- Solución de problemas comunes de Always Encrypted con enclaves seguros
- Introducción al uso de Always Encrypted con enclaves seguros
- Configuración del cifrado de columna en contexto mediante Always Encrypted con enclaves seguros
- Creación y uso de índices en columnas mediante Always Encrypted con enclaves seguros