Tutorial: Introducción a Always Encrypted

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

En este tutorial se explica cómo empezar a trabajar con Always Encrypted. En él encontrará:

  • Cómo cifrar las columnas seleccionadas en la base de datos.
  • Cómo consultar columnas cifradas.

Requisitos previos

En este tutorial, necesitará:

Paso 1: Creación y rellenado del esquema de la base de datos

En este paso, creará el esquema de RR. HH. y la tabla Empleados. A continuación, rellenará la tabla con algunos datos.

  1. Conéctese a la base de datos. Para obtener instrucciones sobre cómo conectarse a una base de datos desde SSMS, consulte Inicio rápido: Conexión a una instancia de Azure SQL Database o Azure SQL Managed Instance y realización de consultas con SQL Server Management Studio (SSMS) o Inicio rápido: Conexión y consulta de una instancia de SQL Server mediante SQL Server Management Studio (SSMS).

  2. Abra una nueva ventana de consulta para la base de datos ContosoHR.

  3. Pegue y ejecute las instrucciones siguientes para crear una nueva 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];
    
  4. Pegue y ejecute las instrucciones siguientes para agregar algunos registros de empleados a la tabla 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 2: Cifrado de columnas

En este paso, aprovisionará una clave de columna maestra y una clave de cifrado de columna para Always Encrypted. A continuación, cifrará las columnas SSN y Salario en la tabla Empleados.

SSMS proporciona un asistente para ayudar a configurar Always Encrypted fácilmente, que configura automáticamente la clave maestra de columna, la clave de cifrado de columna y cifra las columnas seleccionadas.

  1. En el Explorador de objetos, expanda Bases de datos>ContosoHR>Tablas.

  2. Haga clic con el botón derecho en la tabla Empleados y seleccione Cifrar columnas para abrir el asistente de Always Encrypted.

    Screenshot of opening the Always Encrypted Wizard.

  3. En la página Introducción del asistente, seleccione Siguiente.

  4. En la página de selección de columnas.

    1. Seleccione las columnas SSN y Salario. Elija el cifrado determinista para la columna SSN y el cifrado aleatorio para la columna Salario. El cifrado determinista admite consultas, como búsquedas de búsqueda de puntos que implican comparaciones de igualdad en columnas cifradas. El cifrado aleatorio no admite cálculos en columnas cifradas.
    2. Deje CEK-Auto1 (Nuevo) como clave de cifrado de columna para ambas columnas. Esta clave aún no existe y la generará el asistente.
    3. Seleccione Siguiente.

    Screenshot of the Always Encrypted Wizard column selection.

  5. En la página Configuración de clave maestra, configure una nueva clave maestra de columna que el asistente generará. En primer lugar, debe seleccionar dónde desea almacenar la clave maestra de columna. El asistente admite dos tipos de almacén de claves:

    • Azure Key Vault: se recomienda si la base de datos está en Azure
    • Almacén de certificados de Windows

    En general, Azure Key Vault es la opción recomendada, especialmente si la base de datos está en Azure.

    • Para usar Azure Key Vault:

      1. Seleccione Azure Key Vault.
      2. Seleccione Iniciar sesión y completar el inicio de sesión en Azure.
      3. Una vez que haya iniciado sesión, la página mostrará la lista de suscripciones y almacenes de claves a los que tiene acceso. Seleccione la suscripción de Azure que contiene el almacén de claves que quiera usar.
      4. Seleccione el almacén de claves.
      5. Seleccione Siguiente.

      Screenshot of the Always Encrypted Wizard master key selection using Azure Key Vault.

    • Para usar el almacén de certificados de Windows:

      1. Seleccione Almacén de certificados de Windows.

      2. Deje la selección predeterminada del usuario actual: esto le indicará al asistente que genere un certificado (la nueva clave maestra de columna) en el almacén del usuario actual.

        Screenshot of the Always Encrypted Wizard master key selection using the certificate store.

      3. Seleccione Siguiente.

  6. En la página Configuración de cifrado local, no se requiere ninguna configuración adicional porque la base de datos no tiene habilitado un enclave. Seleccione Siguiente.

  7. En la página Configuración de ejecución, se le preguntará si desea continuar con el cifrado o generar un script de PowerShell que se ejecutará más adelante. Deje la configuración predeterminada y seleccione Siguiente.

  8. En la página Resumen, el asistente le informa sobre las acciones que se ejecutarán. Compruebe que toda la información es correcta y seleccione Finalizar.

  9. En la página Resultados, puede supervisar el progreso de las operaciones del asistente. Espere hasta que todas las operaciones se completen correctamente y seleccione Cerrar.

    Screenshot of the Always Encrypted Wizard summary.

  10. (Opcional) Explore los cambios realizados por el asistente en la base de datos.

    1. Expanda ContosoHR>Seguridad>Claves Always Encrypted para explorar los objetos de metadatos de la clave maestra de columna y el cifrado de columnas que creó el asistente.

    2. También puede ejecutar las siguientes consultas en las vistas de catálogo del sistema que contienen metadatos de clave.

      SELECT * FROM sys.column_master_keys;
      SELECT * FROM sys.column_encryption_keys
      SELECT * FROM sys.column_encryption_key_values
      
    3. En el Explorador de objetos, haga clic con el botón derecho en la tabla Empleados y seleccione Incluir tabla como>CREATE TO>Nueva ventana del editor de consultas. Se abrirá una nueva ventana de consulta con la instrucción CREATE TABLE para la tabla Empleados. Observe la cláusula ENCRYPTED WITH que aparece en las definiciones de las columnas SSN y Salario.

    4. También puede ejecutar la consulta siguiente en sys.columns para recuperar metadatos de cifrado de nivel de columna para las dos columnas cifradas.

      SELECT
      [name]
      , [encryption_type]
      , [encryption_type_desc]
      , [encryption_algorithm_name]
      , [column_encryption_key_id]
      FROM sys.columns
      WHERE [encryption_type] IS NOT NULL;
      

Paso 3: Consulta de columnas cifradas

  1. Conéctese a la base de datos con Always Encrypted deshabilitado para la conexión.

    1. Abra una nueva ventana de consulta.
    2. Haga clic con el botón derecho en la ventana de consulta y seleccione Conexión>Cambiar conexión. Se abrirá el cuadro de diálogo Conectar al motor de base de datos.
    3. Seleccione Opciones<<. Esto mostrará pestañas adicionales en el cuadro de diálogo Conectar al motor de base de datos.
    4. Seleccione la pestaña Always Encrypted.
    5. Asegúrese de que la casilla Habilitar Always Encrypted (cifrado de columna) no esté seleccionada.
    6. Seleccione Conectar.

    Screenshot of the SSMS connection option for Always Encrypted disabled.

  2. Pegue y ejecute la siguiente consulta. La consulta debe devolver datos cifrados binarios.

    SELECT [SSN], [Salary] FROM [HR].[Employees]
    

    Screenshot of cipher text results from encrypted columns.

  3. Conéctese a la base de datos con Always Encrypted habilitado para la conexión.

    1. Haga clic con el botón derecho en la ventana de consulta y seleccione Conexión>Cambiar conexión. Se abrirá el cuadro de diálogo Conectar al motor de base de datos.
    2. Seleccione Opciones<<. Esto mostrará pestañas adicionales en el cuadro de diálogo Conectar al motor de base de datos.
    3. Seleccione la pestaña Always Encrypted.
    4. Seleccione Habilitar Always Encrypted (cifrado de columna).
    5. Seleccione Conectar.

    Screenshot of the SSMS connection option for Always Encrypted enabled.

  4. Vuelva a ejecutar la misma consulta. Dado que está conectado con Always Encrypted habilitado para la conexión de base de datos, el controlador cliente de SSMS intentará descifrar los datos almacenados en ambas columnas cifradas. Si usa Azure Key Vault, es posible que se le pida que inicie sesión en Azure.

    Screenshot of plaintext results from encrypted columns.

  5. Habilite la Parametrización para Always Encrypted. Esta característica permite ejecutar consultas que filtran los datos por columnas cifradas (o insertan datos en columnas cifradas).

    1. Seleccione Consulta en el menú principal de SSMS.
    2. Seleccione Opciones de consulta….
    3. Vaya a Ejecución>Avanzadas.
    4. Asegúrese de que Habilitar parametrización de Always Encrypted esté habilitada.
    5. Seleccione Aceptar.

    Screenshot enabling parameterization in an existing query window.

  6. Pegue y ejecute la consulta siguiente, que filtra los datos por la columna de SSN cifrada. La consulta debe devolver una fila que contenga valores de texto no cifrado.

    DECLARE @SSN [char](11) = '795-73-9838'
    SELECT [SSN], [Salary] FROM [HR].[Employees]
    WHERE [SSN] = @SSN
    
  7. Opcionalmente, si usa Azure Key Vault configurado con el modelo de permisos de directiva de acceso, siga estos pasos para ver qué sucede cuando un usuario intenta recuperar datos de texto no cifrado de columnas cifradas sin tener acceso a la clave maestra de columna que protege los datos.

    1. Quítese el permiso de clave unwrap en la directiva de acceso del almacén de claves. Para más información, consulte Asignación de una directiva de acceso de Key Vault.
    2. Dado que el controlador cliente de SSMS almacena en caché las claves de cifrado de columna adquiridas desde un almacén de claves durante 2 horas, cierre SSMS y vuelva a abrirlo. Esto garantizará que la caché de claves esté vacía.
    3. Conéctese a la base de datos con Always Encrypted habilitado para la conexión.
    4. Pegue y ejecute la siguiente consulta. La consulta debe producir un error con el mensaje de error que indica que falta el permiso necesario unwrap.
    SELECT [SSN], [Salary] FROM [HR].[Employees]
    

Pasos siguientes

Consulte también