Tutorial: Introducción al uso de Always Encrypted con enclaves de VBS en Azure SQL Database
Se aplica a: Azure SQL Database
En este tutorial se explica cómo empezar a trabajar con Always Encrypted con enclaves seguros en Azure SQL Database mediante enclaves de seguridad basada en virtualización (VBS). En él encontrará:
- Cómo crear un entorno para probar y evaluar Always Encrypted con enclaves de VBS.
- Cómo cifrar datos en contexto y emitir consultas confidenciales enriquecidas en columnas cifradas mediante SQL Server Management Studio (SSMS).
Prerrequisitos
- Una suscripción de Azure activa. En caso de no tener ninguna, cree una cuenta gratuita. Debe ser miembro del rol Colaborador o del rol Propietario de la suscripción para poder crear recursos.
- Aunque es opcional, se recomienda para almacenar la clave maestra de columna para Always Encrypted: un almacén de claves en Azure Key Vault. Para información sobre cómo crear un almacén de claves, consulte Inicio rápido: Creación de un almacén de claves mediante Azure Portal.
- Si el almacén de claves usa el modelo de permisos de directiva de acceso, asegúrese de que tiene los siguientes permisos de clave en el almacén de claves:
get
,list
,create
,unwrap key
,wrap key
,verify
ysign
. Consulte Asignación de una directiva de acceso de Key Vault. - Si usa el modelo de permisos de control de acceso basado en rol (RBAC) de Azure, asegúrese de que es miembro del rol Agente criptográfico de Key Vault en el almacén de claves. Consulte Acceso a las claves, los certificados y los secretos de Key Vault con un control de acceso basado en rol de Azure.
- Si el almacén de claves usa el modelo de permisos de directiva de acceso, asegúrese de que tiene los siguientes permisos de clave en el almacén de claves:
Requisitos de la herramienta
Para este tutorial, se necesita SQL Server Management Studio (SSMS). Puede optar por usar PowerShell o la CLI de Azure para habilitar enclaves de VBS.
Descargue la última versión de SQL Server Management Studio (SSMS).
Paso 1: Creación y configuración de un servidor y una base de datos
En este paso, creará un nuevo servidor lógico de Azure SQL Database y una nueva base de datos.
Vaya a Inicio rápido: Creación de una base de datos única: Azure SQL Database y siga las instrucciones de la sección Crear una base de datos única para crear un nuevo servidor lógico de Azure SQL Database y una base de datos nueva.
Importante
Asegúrese de crear una base de datos vacía con el nombre ContosoHR (y no una base de datos de ejemplo).
Paso 2: Habilitación de un enclave de VBS
En este paso, habilitará un enclave de VBS en la base de datos, que es necesario para Always Encrypted con enclaves seguros. Para habilitar los enclaves de VBS en la base de datos, debe establecer la propiedad de base de datos preferredEnclaveType en VBS.
Abra el Azure Portal y localice la base de datos para la que desea habilitar enclaves seguros.
En Configuración de seguridad, seleccione Cifrado de datos.
En el menú Cifrado de datos, seleccione la pestaña Always Encrypted.
Establezca Habilitar enclaves seguros en ON. Si ya está establecido en ON, continúe con el paso siguiente.
Seleccione Guardar para guardar su configuración Always Encrypted.
Paso 3: Relleno de la base de datos
En este paso, creará una tabla y la rellenará con algunos datos que más adelante cifrará y consultará.
Abra SSMS y conéctese a la base de datos ContosoHR en el servidor lógico de Azure SQL que creó sin Always Encrypted habilitado en la conexión de base de datos.
En el cuadro de diálogo Conectar con el servidor, especifique el nombre completo del servidor (por ejemplo, myserver135.database.windows.net) y escriba el nombre de usuario del administrador y la contraseña que especificó al crear el servidor.
Seleccione Opciones>> y elija la pestaña Propiedades de conexión. Asegúrese de seleccionar la base de datos ContosoHR (no la base de datos
master
predeterminada).Seleccione la pestaña Always Encrypted.
Asegúrese de que la casilla Habilitar Always Encrypted (cifrado de columna)no esté activada.
Seleccione Conectar.
Cree una tabla denominada Empleados.
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]; GO
Agregue a esta tabla algunos registros de empleados.
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… .
- Escriba un nombre para la nueva clave maestra de columna: CMK1.
- Compruebe que la opción Permitir cálculos de enclave está seleccionada. (Se selecciona de forma predeterminada si un enclave seguro está habilitado para la base de datos; debe habilitarse, ya que la base de datos usa la configuración de hardware de la serie DC).
- Seleccione Azure Key Vault (recomendado) o Almacén de certificados de Windows (Usuario actual o Máquina local).
- Si selecciona Azure Key Vault, inicie sesión en Azure, seleccione una suscripción de Azure que contenga un almacén de claves que quiera usar y seleccione el almacén de claves. Seleccione Generar clave para crear una nueva clave.
- Si selecciona Almacén de certificados de Windows, seleccione el botón Generar certificado para crear un nuevo certificado.
- 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 base de datos 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 con el servidor, especifique el nombre completo del servidor (por ejemplo, myserver135.database.windows.net) y escriba el nombre de usuario del administrador y la contraseña que especificó al crear el servidor.
Seleccione Opciones>> y elija la pestaña Propiedades de conexión. Asegúrese de seleccionar la base de datos ContosoHR (no la base de datos
master
predeterminada).Seleccione la pestaña Always Encrypted.
Active la casilla Habilitar Always Encrypted (cifrado de columna).
Seleccione Habilitar enclaves seguros.
Establezca Protocolo en Ninguno. Vea la siguiente captura de pantalla.
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 instrucciones siguientes.
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:
La instrucción ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE borra 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
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. Debe producirse un error.
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