Tutorial: Introducción al uso de Always Encrypted con enclaves seguros en SQL Server
Se aplica a: SQL Server 2019 (15.x) y versiones posteriores: solo Windows
En este tutorial se explica cómo empezar a trabajar con Always Encrypted con enclaves seguros en SQL Server. En él encontrará:
- Cómo crear un entorno básico para probar y evaluar Always Encrypted con enclaves seguros sin atestación configurada para los enclaves.
- Cómo cifrar datos en contexto y emitir consultas confidenciales enriquecidas en columnas cifradas mediante SQL Server Management Studio (SSMS).
Si desea obtener información sobre cómo configurar Always Encrypted con enclaves seguros mediante el servicio de protección de host para la atestación de enclave, consulte Tutorial: Introducción al uso de Always Encrypted con enclaves seguros en SQL Server con atestación mediante HGS
Requisitos previos
El equipo que hospeda la instancia de SQL Server (denominada equipo con SQL Server) debe cumplir los siguientes requisitos:
- SQL Server 2019 (15.x) o posterior.
- Windows 10 o posterior; Windows Server 2019 o posterior.
- Compatibilidad de CPU con tecnologías de virtualización:
- Intel VT-x con tablas de página extendida.
- AMD-V con indexación de virtualización rápida.
- Si se ejecuta SQL Server en una máquina virtual:
- En Azure, use un tamaño de VM de generación 2 (recomendado) o un tamaño de VM de generación 1 con la virtualización anidada habilitada. Compruebe la documentación de tamaños de VM individuales para determinar qué tamaños de VM de generación 1 admiten la virtualización anidada.
- En Hyper-V 2016 o versiones posteriores (fuera de Azure), asegúrese de que la máquina virtual es una máquina virtual de generación 2 (recomendada) o una máquina virtual de generación 1 con la virtualización anidada habilitada. Para obtener más información, consulte ¿Debería crear una máquina virtual de generación 1 o 2 en Hyper-V? y Configuración de la virtualización anidada.
- En VMware vSphere 6.7 o posterior, habilite la compatibilidad con la seguridad basada en virtualización en la máquina virtual, como se describe en la documentación de VMware.
- Es posible que otros hipervisores y nubes públicas admitan funciones de virtualización anidada que también permitan Always Encrypted con enclaves de VBS. Consulte la documentación de la solución de virtualización para obtener instrucciones relativas a la compatibilidad y configuración.
- La versión más reciente de SQL Server Management Studio (SSMS). También puede instalar SSMS en otro equipo.
Advertencia
En entornos de producción, ejecutar SSMS u otras herramientas de administración de claves en el equipo de SQL Server puede reducir las ventajas de seguridad del uso de Always Encrypted. En general, se recomienda ejecutar estas herramientas en otro equipo. Para obtener más información, consulte Security Considerations for Key Management (Consideraciones de seguridad para la administración de claves).
Paso 1: Asegúrese de que la seguridad basada en virtualización (VBS) está habilitada
Inicie sesión en su equipo con SQL Server como administrador, abra una consola de Windows PowerShell con privilegios elevados y ejecute msinfo32.exe. Compruebe si VBS se está ejecutando. Si VBS se está ejecutando, omita los pasos restantes de esta sección y vaya a la siguiente sección.
Habilite VBS mediante la ejecución del siguiente cmdlet en una sesión de PowerShell.
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name EnableVirtualizationBasedSecurity -Value 1
Si el equipo con SQL Server es una máquina virtual, una máquina física que no admite el arranque seguro de UEFI o una máquina física que no está equipada con una unidad IOMMU, tendrá que quitar el requisito de VBS de las características de seguridad de plataforma. Para quitar el requisito de arranque seguro e IOMMU, ejecute el comando siguiente en el equipo con SQL Server en una consola de PowerShell con privilegios elevados:
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
Vuelva a reiniciar el equipo con SQL Server para que VBS se conecte.
Restart-Computer
Repita el paso 1 para comprobar si VBS se está ejecutando.
Paso 2: Configurar Always Encrypted con enclaves seguros en SQL Server
En este paso, deberá habilitar la funcionalidad de Always Encrypted usando enclaves en su instancia de SQL Server.
Con SSMS, conéctese a la instancia de SQL Server como sysadmin sin Always Encrypted habilitado para la conexión de base de datos.
Inicie SSMS.
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 Always Encrypted.
Asegúrese de que la casilla Habilitar Always Encrypted (cifrado de columna)no esté activada.
Seleccione Conectar.
Abra una nueva ventana de consulta y ejecute la siguiente instrucción para establecer el tipo de enclave seguro en la seguridad basada en la virtualización (VBS).
EXEC sys.sp_configure 'column encryption enclave type', 1; RECONFIGURE;
Reinicie su instancia de SQL Server para que se aplique el cambio anterior. Puede reiniciar la instancia en SSMS haciendo clic con el botón derecho en ella en el Explorador de objetos y seleccionando Reiniciar. Cuando se reinicie la instancia, vuelva a conectarse a ella.
Confirme que el enclave seguro se ha cargado ejecutando la siguiente consulta:
SELECT [name], [value], [value_in_use] FROM sys.configurations WHERE [name] = 'column encryption enclave type';
La consulta debe devolver el resultado siguiente:
nombre value value_in_use tipo de enclave de cifrado de columnas 1 1
Paso 3: Crear una base de datos de ejemplo
En este paso, creará una base de datos con algunos datos de ejemplo, que cifrará más adelante.
Con la instancia de SSMS del paso anterior, ejecute la siguiente instrucción en una ventana de consulta para crear una base de datos denominada ContosoHR.
CREATE DATABASE [ContosoHR];
Cree una tabla denominada Empleados.
USE [ContosoHR]; GO CREATE SCHEMA [HR]; GO CREATE TABLE [HR].[Employees] ( [EmployeeID] [int] IDENTITY(1,1) NOT NULL, [SSN] [char](11) NOT NULL, [FirstName] [nvarchar](50) NOT NULL, [LastName] [nvarchar](50) NOT NULL, [Salary] [money] NOT NULL ) ON [PRIMARY];
Agregue a esta tabla algunos registros de empleados.
USE [ContosoHR]; GO INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('795-73-9838' , N'Catherine' , N'Abel' , $31692); INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('990-00-6818' , N'Kim' , N'Abercrombie' , $55415);
Paso 4: Aprovisionar claves habilitadas para el enclave
En este paso, creará una clave de columna maestra y una clave de cifrado de columna que admiten los cálculos de enclave.
Con la instancia de SSMS del paso anterior, en el Explorador de objetos, expanda la base de datos y vaya a Seguridad>Claves de Always Encrypted.
Aprovisione una nueva clave maestra de columna habilitada para el enclave:
Haga clic con el botón derecho en Claves de Always Encrypted y seleccione Nueva clave maestra de columna….
Seleccione su nombre de clave maestra de columna: CMK1.
Seleccione Almacén de certificados de Windows (usuario actual o equipo local) o Azure Key Vault.
Seleccione Permitir cálculos de enclave.
Si ha seleccionado Azure Key Vault, inicie sesión en Azure y seleccione su almacén de claves. Para obtener más información sobre cómo crear un almacén de claves para Always Encrypted, consulte Administrar sus almacenes de claves desde Azure Portal.
Seleccione su certificado o su clave de Azure Key Vault si ya existe, o bien seleccione el botón Generar certificado para crear uno.
Seleccione Aceptar.
Cree una nueva clave de cifrado de columnas habilitada para el enclave:
- Haga clic con el botón derecho en Claves de Always Encrypted y seleccione Nueva clave maestra de columna.
- Escriba un nombre para la nueva clave de cifrado de columnas: CEK1.
- En la lista desplegable Clave maestra de columna, seleccione la clave maestra de columna que creó en los pasos anteriores.
- Seleccione Aceptar.
Paso 5: Cifrar algunas columnas en contexto
En este paso, va a cifrar los datos almacenados en las columnas SSN y Salario dentro del enclave del lado servidor y después podrá probar una consulta SELECT de los datos.
Abra una nueva instancia de SSMS y conéctese a la instancia de SQL Server con Always Encrypted habilitado para la conexión de base de datos.
Inicie una nueva instancia de SSMS.
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 Always Encrypted.
Active la casilla Habilitar Always Encrypted (cifrado de columna).
Seleccione Habilitar enclaves seguros.
Establezca Protocolo en Ninguno.
Seleccione Conectar.
Si se le pide que habilite la parametrización para las consultas Always Encrypted, haga clic en Habilitar.
Con la misma instancia de SSMS (con Always Encrypted habilitado), abra una nueva ventana de consulta y cifre las columnas SSN y Salario mediante la ejecución de las consultas siguientes.
USE [ContosoHR]; GO ALTER TABLE [HR].[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 WITH (ONLINE = ON); ALTER TABLE [HR].[Employees] ALTER COLUMN [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Nota:
Observe la instrucción ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE para borrar la memoria caché del plan de consulta para la base de datos en el script anterior. Después de modificar la tabla, deberá borrar los planes de todos los lotes y procedimientos almacenados que tengan acceso a la tabla con el fin de actualizar la información de cifrado de los parámetros.
Para comprobar que las columnas SSN y Salario ahora están cifradas, abra una nueva ventana de consulta en la instancia de SSMS sin Always Encrypted habilitado para la conexión de base de datos y ejecute la siguiente instrucción. La ventana de consulta debe devolver valores cifrados de las columnas SSN y Salario. Si ejecuta la misma consulta mediante la instancia SSMS con Always Encrypted habilitado, verá los datos descifrados.
SELECT * FROM [HR].[Employees];
Paso 6: Ejecutar consultas completas sobre columnas cifradas
Ahora puede ejecutar consultas completas sobre columnas cifradas. Se realizará algún procesamiento de consulta dentro del enclave del lado del servidor.
En la instancia de SSMS con Always Encrypted habilitado, asegúrese de que también está habilitada la parametrización para Always Encrypted.
- Seleccione Herramientas en el menú principal de SSMS.
- Seleccione Opciones... .
- Vaya a Ejecución de consulta>SQL Server>Avanzadas.
- Asegúrese de que la opción Habilitar parametrización para Always Encrypted esté activada.
- Seleccione Aceptar.
Abra una nueva ventana de consulta y pegue y ejecute la siguiente consulta. La consulta debe devolver los valores de texto no cifrado y las filas que cumplan los criterios de búsqueda especificados.
DECLARE @SSNPattern [char](11) = '%6818'; DECLARE @MinSalary [money] = $1000; SELECT * FROM [HR].[Employees] WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
Pruebe de nuevo la misma consulta en la instancia de SSMS que no tiene habilitado Always Encrypted y observe el error que se produce.
Pasos siguientes
Después de completar este tutorial, puede ir a uno de los siguientes tutoriales:
- Tutorial: Desarrollo de una aplicación de .NET mediante Always Encrypted con enclaves seguros
- Tutorial: Desarrollo de una aplicación de .NET Framework mediante Always Encrypted con enclaves seguros
- Tutorial: Creación y uso de índices en columnas basadas en enclave mediante cifrado aleatorio