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

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.

  1. Abra el Azure Portal y localice la base de datos para la que desea habilitar enclaves seguros.

  2. En Configuración de seguridad, seleccione Cifrado de datos.

  3. En el menú Cifrado de datos, seleccione la pestaña Always Encrypted.

  4. Establezca Habilitar enclaves seguros en ON. Si ya está establecido en ON, continúe con el paso siguiente.

    Captura de pantalla de la habilitación de enclaves seguros en una base de datos existente en Azure Portal.

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

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

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

    2. 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).

    3. Seleccione la pestaña Always Encrypted.

    4. Asegúrese de que la casilla Habilitar Always Encrypted (cifrado de columna)no esté activada.

      Captura de pantalla de Conexión al servidor mediante SSMS sin Always Encrypted habilitado.

    5. Seleccione Conectar.

  2. 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
    
  3. 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.

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

  2. Aprovisione una nueva clave maestra de columna habilitada para el enclave:

    1. Haga clic con el botón derecho en Claves de Always Encrypted y seleccione Nueva clave maestra de columna… .
    2. Escriba un nombre para la nueva clave maestra de columna: CMK1.
    3. 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).
    4. 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. Captura de pantalla de la selección de la opción Permitir cálculos de enclave en SSMS al crear una nueva clave maestra de columna.
    5. Seleccione Aceptar.
  3. Cree una nueva clave de cifrado de columnas habilitada para el enclave:

    1. Haga clic con el botón derecho en Claves de Always Encrypted y seleccione Nueva clave maestra de columna.
    2. Escriba un nombre para la nueva clave de cifrado de columnas: CEK1.
    3. En la lista desplegable Clave maestra de columna, seleccione la clave maestra de columna que creó en los pasos anteriores.
    4. 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.

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

    1. Inicie una nueva instancia de SSMS.

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

    3. 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).

    4. Seleccione la pestaña Always Encrypted.

    5. Active la casilla Habilitar Always Encrypted (cifrado de columna).

    6. Seleccione Habilitar enclaves seguros.

    7. Establezca Protocolo en Ninguno. Vea la siguiente captura de pantalla.

      Captura de pantalla del cuadro de diálogo Conectarse al servidor de SSMS, pestaña Always Encrypted, con el protocolo de atestación establecido en Ninguno.

    8. Seleccione Conectar.

    9. Si se le pide que habilite la parametrización para las consultas Always Encrypted, haga clic en Habilitar.

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

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

  1. En la instancia de SSMS con Always Encrypted habilitado, asegúrese de que también está habilitada la parametrización para Always Encrypted.

    1. Seleccione Herramientas en el menú principal de SSMS.
    2. Seleccione Opciones... .
    3. Vaya a Ejecución de consulta>SQL Server>Avanzadas.
    4. Asegúrese de que la opción Habilitar parametrización para Always Encrypted esté activada.
    5. Seleccione Aceptar.
  2. 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;
    
  3. 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:

Vea también