Configuración y uso de Always Encrypted con enclaves seguros

Se aplica a: SQL Server 2019 (15.x) y versiones posteriores: solo Windows Azure SQL Database

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.

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:

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.

    • 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.

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.

  1. 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.

  2. Seleccione Opciones >> y seleccione la pestaña Propiedades de conexión. Especifique el nombre de la base de datos.

  3. Seleccione la pestaña Always Encrypted.

  4. Seleccione Habilitar Always Encrypted (cifrado de columna).

  5. Seleccione Habilitar enclaves seguros.

  6. Establezca Protocolo en:

    1. Servicio de protección de host si utiliza SQL Server.
    2. Microsoft Azure Attestation si utiliza Azure SQL Database con enclaves de Intel SGX.
    3. Ninguno si utiliza Azure SQL Database con enclaves de VBS.
  7. 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 o https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.

    Connect to server with attestation using SSMS

  8. Seleccione Conectar.

  9. 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.

  1. En el cuadro de diálogo Conexión, seleccione Avanzadas….

  2. Para habilitar Always Encrypted para la conexión, establezca el campo Always Encrypted en Habilitado.

  3. Para habilitar enclaves seguros, establezca el campo Enclaves seguros en Habilitado.

  4. 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.

    Connect to server with attestation using Azure Data Studio

  5. 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

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

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

Ordenación

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