Always Encrypted con enclaves segurosAlways Encrypted with secure enclaves

SE APLICA A: síSQL Server (solo Windows) noAzure SQL DatabasenoAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO:yesSQL Server (Windows only) noAzure SQL DatabasenoAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Always Encrypted con enclaves seguros proporciona funcionalidad adicional a la característica Always Encrypted.Always Encrypted with secure enclaves provides additional functionality to the Always Encrypted feature.

Introducido en SQL Server 2016, Always Encrypted protege la privacidad de la información confidencial contra malware y usuarios no autorizados de SQL Server con privilegios elevados.Introduced in SQL Server 2016, Always Encrypted protects the confidentiality of sensitive data from malware and high-privileged unauthorized users of SQL Server. Los usuarios no autorizados con privilegios elevados son administradores de bases de datos, administradores de equipos, administradores de nube o cualquier otro usuario con acceso legítimo a las instancias de servidor, hardware, etc., pero que no deberían tener acceso a parte ni a la totalidad de los datos reales.High-privileged unauthorized users are DBAs, computer admins, cloud admins, or anyone else who has legitimate access to server instances, hardware, etc., but who should not have access to some or all of the actual data.

Sin las mejoras que se describen en este artículo, Always Encrypted protege los datos mediante su cifrado en el cliente y no permite que los datos ni las claves criptográficas correspondientes aparezcan en texto no cifrado dentro del motor de SQL Server.Without the enhancements discussed in this article, Always Encrypted protects the data by encrypting it on the client side and never allowing the data or the corresponding cryptographic keys to appear in plaintext inside the SQL Server Engine. Como resultado, la funcionalidad en columnas cifradas dentro de la base de datos está muy restringida.As a result, the functionality on encrypted columns inside the database is severely restricted. Las únicas operaciones que SQL Server puede realizar en datos cifrados son comparaciones de igualdad (solo están disponibles con un cifrado determinista).The only operations SQL Server can perform on encrypted data are equality comparisons (only available with deterministic encryption). Todas las demás operaciones, incluidas las operaciones criptográficas (el cifrado inicial de los datos o la rotación de claves) y los cálculos completos (por ejemplo, la coincidencia de patrones) no se admiten dentro de la base de datos.All other operations, including cryptographic operations (initial data encryption or key rotation) and or rich computations (for example, pattern matching) are not supported inside the database. Los usuarios tienen que sacar sus datos de la base de datos para llevar a cabo estas operaciones en el cliente.Users need to move their data outside of the database to perform these operations on the client-side.

Always Encrypted con enclaves seguros aborda estas limitaciones al permitir realizar cálculos en datos de texto no cifrado dentro de un enclave seguro en el servidor.Always Encrypted with secure enclaves addresses these limitations by allowing computations on plaintext data inside a secure enclave on the server side. Un enclave seguro es una región de memoria protegida dentro del proceso de SQL Server y sirve como un entorno de ejecución de confianza para procesar información confidencial dentro del motor de SQL Server.A secure enclave is a protected region of memory within the SQL Server process, and acts as a trusted execution environment for processing sensitive data inside the SQL Server engine. Un enclave seguro aparece como una caja negra para el resto de SQL Server y otros procesos en la máquina servidor.A secure enclave appears as a black box to the rest of the SQL Server and other processes on the hosting machine. No hay ninguna manera de ver los datos ni el código que se encuentran dentro del enclave desde el exterior, incluso si se cuenta con un depurador.There is no way to view any data or code inside the enclave from the outside, even with a debugger.

Always Encrypted usa enclaves seguros, tal como se muestra en el siguiente diagrama:Always Encrypted uses secure enclaves as illustrated in the following diagram:

flujo de datos

Al analizar la consulta de una aplicación, el motor de SQL Server determina si la consulta contiene alguna operación realizada en datos cifrados que requiere usar el enclave seguro.When parsing an application's query, the SQL Server Engine determines if the query contains any operations on encrypted data that require the use of the secure enclave. En el caso de consultas en las que se debe acceder al enclave seguro:For queries where the secure enclave needs to be accessed:

  • El controlador cliente envía las claves de cifrado de columna que se requieren para las operaciones al enclave seguro (a través de un canal seguro).The client driver sends the column encryption keys required for the operations to the secure enclave (over a secure channel).
  • Luego, el controlador cliente envía la consulta para su ejecución junto con los parámetros de la consulta cifrada.Then, the client driver submits the query for execution along with the encrypted query parameters.

Durante el procesamiento de la consulta, las claves de cifrado de la columna o los datos no se exponen como texto no cifrado en el motor de SQL Server fuera del enclave seguro.During query processing, the data or the column encryption keys are not exposed in plaintext in the SQL Server Engine outside of the secure enclave. El motor de SQL Server delega los cálculos y las operaciones criptográficas en columnas cifradas al enclave seguro.The SQL Server Engine delegates cryptographic operations and computations on encrypted columns to the secure enclave. Si es necesario, el enclave seguro descifra los parámetros de la consulta y los datos almacenados en las columnas cifradas y lleva a cabo las operaciones solicitadas.If needed, the secure enclave decrypts the query parameters and/or the data stored in encrypted columns and performs the requested operations.

En SQL Server 2019 (15.x)SQL Server 2019 (15.x), Always Encrypted con enclaves seguros usa enclaves seguros de memoria de Seguridad basada en virtualización (VBS) (también conocidos como enclaves de Modo seguro virtual, VSM) en Windows.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), Always Encrypted with secure enclaves uses Virtualization-based Security (VBS) secure memory enclaves (also known as Virtual Secure Mode, or VSM enclaves) in Windows.

¿Por qué usar Always Encrypted con enclaves seguros?Why use Always Encrypted with secure enclaves?

Con los enclaves seguros, Always Encrypted protege la privacidad de la información confidencial mientras se brindan estas ventajas:With secure enclaves, Always Encrypted protects the confidentiality of sensitive data while providing the following benefits:

  • Cifrado en contexto: las operaciones criptográficas sobre información confidencial, como el cifrado inicial de datos o la rotación de una clave de cifrado de columna, se realizan dentro del enclave seguro y no requieren sacar los datos de la base de datos.In-place encryption - cryptographic operations on sensitive data, for example: initial data encryption or rotating a column encryption key, are performed inside the secure enclave and do not require moving the data outside of the database. Puede genera cifrado en contexto con la instrucción Transact-SQL ALTER TABLE y no es necesario usar herramientas, como el Asistente para Always Encrypted en SSMS o el cmdlet Set-SqlColumnEncryption de PowerShell.You can issue in-place encryption using the ALTER TABLE Transact-SQL statement, and you do not need to use tools, such as the Always Encrypted wizard in SSMS or the Set-SqlColumnEncryption PowerShell cmdlet.

  • Cálculos completos (versión preliminar) : las operaciones sobre columnas cifradas, incluidas la coincidencia de patrones (el predicado LIKE) y las comparaciones de variedades, se admiten dentro del enclave seguro, que permite que Always Encrypted se use en una amplia variedad de aplicaciones y escenarios que requiere que dichos cálculos se realicen dentro del sistema de la base de datos.Rich computations (preview) - operations on encrypted columns, including pattern matching (the LIKE predicate) and range comparisons, are supported inside the secure enclave, which unlocks Always Encrypted to a broad range of applications and scenarios that require such computations to be performed inside the database system.

Atestación de un enclave seguroSecure Enclave Attestation

El enclave seguro dentro del motor de SQL Server puede acceder a información confidencial almacenada en columnas de bases de datos cifradas y las claves de cifrado de columna correspondientes en texto no cifrado.The secure enclave inside the SQL Server Engine can access sensitive data stored in encrypted database columns and the corresponding column encryption keys in plaintext. Antes de enviar a SQL Server una consulta que implica cálculos de enclave, el controlador cliente dentro de la aplicación debe comprobar que el enclave seguro es un enclave genuino basado en una tecnología determinada (por ejemplo, VBS) y que el código que se ejecuta dentro del enclave se confirmó para ejecución dentro del enclave.Before submitting a query that involves enclave computations to SQL Server, the client driver inside the application must verify the secure enclave is a genuine enclave based on a given technology (for example, VBS) and the code running inside the enclave has been signed for running inside the enclave.

El proceso de comprobar el enclave se denomina atestación del enclave e implica que un controlador cliente dentro de la aplicación y SQL Server deben ponerse en contacto con un servicio de atestación externo.The process of verifying the enclave is called enclave attestation, and it involves both a client driver within the application and SQL Server contacting an external attestation service. Los detalles específicos del proceso de atestación dependen de la tecnología del enclave y del servicio de atestación.The specifics of the attestation process depend on the enclave technology and the attestation service.

El proceso de atestación que SQL Server admite para los enclaves seguros de VBS en SQL Server 2019 (15.x)SQL Server 2019 (15.x) es la atestación de entorno de ejecución Protección del sistema de Windows Defender, que usa Servicio de protección de host (HGS) como servicio de atestación.The attestation process SQL Server supports for VBS secure enclaves in SQL Server 2019 (15.x)SQL Server 2019 (15.x) is Windows Defender System Guard runtime attestation, which uses Host Guardian Service (HGS) as an attestation service. Deberá configura HGS en su entorno y registrar la máquina que hospeda la instancia de SQL Server en HGS.You need to configure HGS in your environment and register the machine hosting your SQL Server instance in HGS. También debe configurar las herramientas o aplicaciones cliente (por ejemplo, SQL Server Management Studio) con una atestación de HGS.You also must configure you client applications or tools (for example, SQL Server Management Studio) with an HGS attestation.

Controladores cliente admitidosSupported Client Drivers

Para usar Always Encrypted con enclaves seguros, una aplicación debe usar un controlador cliente que admita la característica.To use Always Encrypted with secure enclaves, an application must use a client driver that supports the feature. Debe configurar la aplicación y el controlador cliente para habilitar los cálculos y la atestación de enclave.You need to configure the application and the client driver to enable enclave computations and enclave attestation. Para obtener más información, incluida una lista de los controladores cliente admitidos, consulte Always Encrypted con enclaves seguros.For details, including the list of supported client drivers, see Always Encrypted with secure enclaves.

Claves habilitadas para el enclaveEnclave-enabled Keys

Always Encrypted con enclaves seguros presenta el concepto de las claves habilitadas para el enclave:Always Encrypted with secure enclaves introduces the concept of enclave-enabled keys:

  • Clave maestra de columna habilitada para el enclave: una clave maestra de columna que tiene la propiedad ENCLAVE_COMPUTATIONS especificada en el objeto de metadatos de clave maestra de columna dentro de la base de datos.Enclave-enabled column master key - a column master key that has the ENCLAVE_COMPUTATIONS property specified in the column master key metadata object inside the database. El objeto de metadatos de clave maestra de columna también debe contener una signatura válida de las propiedades de los metadatos.The column master key metadata object must also contain a valid signature of the metadata properties.
  • Clave de cifrado de columna habilitada para el enclave: una clave de cifrado de columna cifrada con una clave maestra de columna habilitada para el enclave.Enclave-enabled column encryption key - a column encryption key that is encrypted with an enclave-enabled column master key.

Cuando el motor de SQL Server determina las operaciones, especificadas en una consulta, que se deben realizar dentro del enclave seguro, el motor de SQL Server solicita que el controlador cliente comparta las claves de cifrado de columna que se necesitan para los cálculos con el enclave seguro.When the SQL Server Engine determines operations, specified in a query, need to be performed inside the secure enclave, the SQL Server Engine requests the client driver shares the column encryption keys that are needed for the computations with the secure enclave. El controlador cliente comparte las claves de cifrado de columna solo si las claves están habilitadas para el enclave (es decir, si están cifradas con claves maestras de columna habilitadas para el enclave) y están firmadas correctamente.The client driver shares the column encryption keys only if the keys are enclave-enabled (that is, encrypted with enclave-enabled column master keys) and they're properly signed. En caso contrario, se generará un error en la consulta.Otherwise, the query fails.

Para obtener más información, consulte Administración de claves para Always Encrypted con enclaves seguros.For more information, see Manage keys for Always Encrypted with secure enclaves.

Columnas habilitadas para el enclaveEnclave-enabled Columns

Una columna habilitada para el enclave es una columna de base de datos cifrada con una clave de cifrado de columna habilitada para el enclave.An enclave-enabled column is a database column encrypted with an enclave-enabled column encryption key. La funcionalidad disponible para una columna habilitada para el enclave depende del tipo de cifrado que usa la columna.The functionality available for an enclave-enabled column depends on the encryption type the column is using.

  • Cifrado determinista: las columnas habilitadas para el enclave que usan el cifrado determinista admiten el cifrado en contexto, pero ninguna otra operación dentro del enclave seguro.Deterministic encryption - Enclave-enabled columns using deterministic encryption support in-place encryption, but no other operations inside the secure enclave. Se admite la comparación de igualdad, pero se realiza fuera del enclave mediante la comparación del texto cifrado.Equality comparison is supported, but it is performed by comparing the ciphertext outside of the enclave.
  • Cifrado aleatorio: las columnas habilitadas para el enclave que usan el cifrado aleatorio admiten el cifrado en contexto, al igual que los cálculos completos, dentro del enclave seguro.Randomized encryption - Enclave-enabled columns using randomized encryption support in-place encryption as well as rich computations inside the secure enclave. Los cálculos completos son la coincidencia de patrones y los operadores de comparación, incluida la comparación de igualdad.The supported rich computations are pattern matching and comparison operators, including equality comparison.

Para más información sobre los tipos de cifrado, consulte Criptografía de Always Encrypted.For more information about encryption types, see Always Encrypted Cryptography.

En la tabla siguiente se resume la funcionalidad disponible para las columnas cifradas, en función de si las columnas usan claves de cifrado de columna habilitadas para el enclave y un tipo de cifrado.The following table summarizes the functionality available for encrypted columns, depending on whether the columns use enclave-enabled column encryption keys and an encryption type.

OperaciónOperation La columna NO está habilitada para el enclaveColumn is NOT enclave-enabled La columna NO está habilitada para el enclaveColumn is NOT enclave-enabled La columna está habilitada para el enclaveColumn is enclave-enabled La columna está habilitada para el enclaveColumn is enclave-enabled
Cifrado aleatorioRandomized encryption Cifrado deterministaDeterministic encryption Cifrado aleatorioRandomized encryption Cifrado deterministaDeterministic encryption
Cifrado en contextoIn-place encryption No admitidaNot Supported No admitidaNot Supported AdmitidaSupported AdmitidaSupported
Comparación de igualdadEquality comparison No admitidaNot Supported Admitida fuera del enclaveSupported outside of the enclave Admitida (dentro del enclave)Supported (inside the enclave) Admitida fuera del enclaveSupported outside of the enclave
Operadores de comparación más allá de la igualdadComparison operators beyond equality No admitidaNot Supported No admitidaNot Supported AdmitidaSupported No admitidaNot Supported
LIKELIKE No admitidaNot Supported No admitidaNot Supported AdmitidaSupported No admitidaNot Supported

El cifrado en contexto incluye compatibilidad con estas operaciones dentro del enclave:In-place encryption includes support for the following operations inside the enclave:

  • Cifrado inicial de los datos almacenados en una columna existente.Initial encryption of data stored in an existing column.

  • Nuevo cifrado de los datos existentes en una columna, por ejemplo:Re-encrypting existing data in a column, for example:

    • Rotación de la clave de cifrado de columna (nuevo cifrado de la columna con otra clave).Rotating the column encryption key (re-encrypting the column with a new key).
    • Cambio del tipo de cifrado.Changing the encryption type.
  • Descifrado de los datos almacenados en una columna cifrada (conversión de la columna en una columna de texto no cifrado).Decrypting data stored in an encrypted column (converting the column into a plaintext column).

Para que se realice un cifrado en contexto, la clave (o claves) de cifrado de columna que participa en las operaciones criptográficas debe estar habilitada para el enclave:For in-place encryption to be possible, the column encryption key (or keys), involved in the cryptographic operations, must be enclave-enabled:

  • Cifrado inicial: la clave de cifrado de columna para la columna que se está cifrando debe estar habilitada para el enclave.Initial encryption: the column encryption key for the column being encrypted must be enclave-enabled.
  • Nuevo cifrado: tanto la clave de cifrado de columna actual como la de destino (si es distinta de la actual) deben estar habilitadas para el enclave.Re-encryption: both the current and the target column encryption key (if different than the current key) must be enclave-enabled.
  • Descifrado: la clave de cifrado de columna actual de la columna debe estar habilitada para el enclave.Decryption: the current column encryption key of the column must be enclave-enabled.

Índices en columnas habilitadas para enclave mediante cifrado aleatorioIndexes on Enclave-enabled Columns using Randomized Encryption

Puede crear índices no agrupados en columnas habilitadas para enclave mediante cifrado aleatorio con el fin de acelerar la ejecución de consultas completas.You can create nonclustered indexes on enclave-enabled columns using randomized encryption to make rich queries run faster. Para tener la seguridad de que un índice en una columna cifrada mediante cifrado aleatorio no pierda datos confidenciales y, al mismo tiempo, sea útil para procesar las consultas dentro del enclave, los valores de clave de la estructura de datos de índice (árbol B) se cifran y se ordenan según sus valores de texto no cifrado.To ensure an index on a column encrypted using randomized encryption doesn't leak sensitive data and, at the same time, it's useful for processing queries inside the enclave, the key values in the index data structure (B-tree) are encrypted and sorted based on their plaintext values. Cuando el ejecutor de consultas del motor de SQL Server utiliza un índice en una columna cifrada para realizar cálculos dentro del enclave, busca el índice para consultar valores específicos almacenados en la columna.When the query executor in the SQL Server Engine uses an index on an encrypted column for computations inside the enclave, it searches the index to look up specific values stored in the column. Cada búsqueda puede suponer varias comparaciones.Each search may involve multiple comparisons. El ejecutor de consultas delega cada comparación en el enclave, que descifra un valor almacenado en la columna y el valor del índice cifrado que se va a comparar, realiza la comparación en texto sin cifrar y devuelve el resultado de la comparación al ejecutor.The query executor delegates each comparison to the enclave, which decrypts a value stored in the column and the encrypted index key value to be compared, it performs the comparison on plaintext and it returns the result of the comparison to the executor.

Sigue sin ser posible la creación de índices en columnas que usan cifrado aleatorio y no están habilitadas para el enclave.Creating indexes on columns that use randomized encryption and are not enclave-enabled remains unsupported.

Para obtener más información, vea Creación y uso de índices en columnas de Always Encrypted con enclaves seguros.For more information, see Create and use indexes on columns using Always Encrypted with secure enclaves. Para obtener información general, no específica de Always Encrypted, acerca de cómo funciona la indexación en SQL Server, consulte Índices agrupados y no agrupados descritos.For general information, not specific to Always Encrypted, on how indexing in SQL Server works, see Clustered and Nonclustered Indexes Described.

Recuperación de la bases de datosDatabase Recovery

Si se produce un error en una instancia de SQL Server, sus bases de datos pueden quedar en un estado donde los archivos de datos pueden contener algunas modificaciones por transacciones incompletas.If an instance of SQL Server fails, its databases may be left in a state where the data files may contain some modifications from incomplete transactions. Cuando se inicia la instancia, se ejecuta un proceso denominado recuperación de bases de datos, que supone revertir las transacciones incompletas encontradas en el registro de transacciones para asegurarse de que se preserva la integridad de la base de datos.When the instance is started, it runs a process called database recovery, which involves rolling back every incomplete transaction found in the transaction log to make sure the integrity of the database is preserved. Si una transacción incompleta realizó algún cambio en un índice, puede que también sea necesario deshacer esos cambios.If an incomplete transaction made any changes to an index, those changes also need to be undone. Por ejemplo, puede que haya que quitar o volver a insertar algunos valores de clave del índice.For example, some key values in the index may need to be removed or reinserted.

Importante

Microsoft recomienda encarecidamente habilitar la recuperación de base de datos acelerada (ADR) para la base de datos antes de crear el primer índice en una columna habilitada para enclave que se ha cifrado con cifrado aleatorio.Microsoft strongly recommends enabling Accelerated database recovery (ADR) for your database, before creating the first index on an enclave-enabled column encrypted with randomized encryption.

Con el proceso de recuperación de base de datos tradicional (que sigue al modelo de recuperación ARIES), para deshacer un cambio en un índice, SQL Server debe esperar a que una aplicación proporcione la clave de cifrado de la columna al enclave, lo que puede tardar mucho tiempo.With the traditional database recovery process (that follows the ARIES recovery model), to undo a change to an index, SQL Server needs to wait until an application provides the column encryption key for the column to the enclave, which can take a long time. ADR reduce enormemente el número de operaciones de deshacer que se debe aplazar porque una clave de cifrado de columna no está disponible en la caché dentro del enclave.ADR dramatically reduces the number of undo operations that must be deferred because a column encryption key is not available in the cache inside the enclave. Por lo tanto, aumenta considerablemente la disponibilidad de la base de datos, ya que reduce la posibilidad de que una nueva transacción se bloquee.Consequently, it substantially increases the database availability by minimizing a chance for a new transaction to get blocked. Con ADR habilitado, SQL Server puede seguir necesitando una clave de cifrado de columna para completar la limpieza de las versiones de datos antiguas, pero se haría como una tarea en segundo plano que no afecta a la disponibilidad de la base de datos o a las transacciones del usuario.With ADR enabled, SQL Server still may need a column encryption key to complete cleaning up old data versions but it does that as a background task that does not impact the availability of the database or user transactions. Sin embargo, puede que vea mensajes de error en el registro de errores, que indican operaciones de limpieza incorrectas debido a que falta una clave de cifrado de columna.You may, however, see error messages in the error log, indicating failed cleanup operations due to a missing column encryption key.

Índices en columnas habilitadas para enclave mediante cifrado deterministaIndexes on Enclave-enabled Columns using Deterministic Encryption

Un índice en una columna que usa cifrado determinista se ordena según el texto cifrado (no texto sin cifrar), sin importar si la columna está o no habilitada para enclave.An index on a column using deterministic encryption are sorted based on ciphertext (not plaintext), regardless if the column is enclave-enabled or not.

Consideraciones de seguridadSecurity Considerations

Se aplican las siguientes consideraciones de seguridad a Always Encrypted con enclaves seguros.The following security considerations apply to Always Encrypted with secure enclaves.

  • La seguridad de los datos en el enclave depende de un protocolo de atestación y un servicio de atestación.The security of your data inside the enclave depends on an attestation protocol and an attestation service. Por lo tanto, debe asegurarse de que el servicio de atestación y las directivas de atestación, que impone el servicio, sean administrados por un administrador de confianza.Therefore, you need to ensure the attestation service and attestation policies, the attestation service enforces, are managed by a trusted administrator. Además, los servicios de atestación suelen admitir distintas directivas y protocolos de atestación, algunos de los cuales realizan la comprobación mínima del enclave y su entorno, y están diseñados para desarrollo y pruebas.Also, attestation services typically support different policies and attestation protocols, some of which perform minimal verification of the enclave and its environment, and are designed for testing and development. Siga atentamente las directrices específicas para el servicio de atestación a fin de asegurarse de que usa las directivas y configuraciones recomendadas para sus implementaciones en producción.Closely follow the guidelines specific to your attestation service to ensure you are using the recommended configurations and policies for your production deployments.
  • El cifrado de una columna mediante cifrado aleatorio con una CEK habilitada para enclave puede dar lugar a una pérdida del orden de los datos almacenados en la columna, dado que tales columnas admiten comparaciones de intervalos.Encrypting a column using randomized encryption with an enclave-enabled CEK may result in leaking the order of data stored in the column, as such columns support range comparisons. Por ejemplo, si una columna cifrada, que contiene los salarios de los empleados, tiene un índice, un administrador de base de datos malintencionado podría examinar el índice para buscar el valor cifrado de salario máximo e identificar a una persona con el salario máximo (suponiendo que el nombre de la persona no esté cifrado).For example, if an encrypted column, containing employee salaries, has an index, a malicious DBA could scan the index to find the maximum encrypted salary value and identify a person with the maximum salary (assuming the name of the person is not encrypted).
  • Si usa Always Encrypted para proteger datos confidenciales del acceso no autorizado por los administradores de base de datos, no comparta las claves maestras de columna ni las claves de cifrado de columna con ellos.If you use Always Encrypted to protect sensitive data from unauthorized access by DBAs, do not share the column master keys or column encryption keys with the DBAs. Un administrador de base de datos puede administrar índices en columnas cifradas sin tener acceso directo a las claves, sino que aprovecha la caché de claves de cifrado de columna dentro del enclave.A DBA can manage indexes on encrypted columns without having direct access to the keys, by leveraging the cache of column encryption keys inside the enclave.

Consideraciones sobre grupos de disponibilidad y la migración de bases de datosConsiderations for Availability Groups and Database Migration

Al configurar un grupo de disponibilidad Always On que es necesario para admitir consultas que usan enclaves, debe asegurarse de que todas las instancias de SQL Server que hospedan las bases de datos del grupo de disponibilidad admitan Always Encrypted con enclaves seguros y tengan un enclave configurado.When configuring an Always On availability group that is required to support queries using enclaves, you need to ensure that all SQL Server instances hosting the databases in the availability group support Always Encrypted with secure enclaves and have an enclave configured. Si la base de datos principal admite enclaves, pero no así una réplica secundaria, cualquier intento de usar la funcionalidad de Always Encrypted con enclaves seguros será infructuoso.If the primary database supports enclaves, but a secondary replica does not, any query that attempts to use the functionality of Always Encrypted with secure enclaves will fail.

Al restaurar un archivo de copia de seguridad de una base de datos que usa la funcionalidad de Always Encrypted con enclaves seguros en una instancia de SQL Server que no tiene el enclave configurado, la operación de restauración se realizará correctamente y toda la funcionalidad que no se base en el enclave estará disponible.When you restore a backup file of a database that uses the functionality of Always Encrypted with secure enclaves on a SQL Server instance that doesn't have the enclave configured, the restore operation will succeed and all the functionality that doesn't rely on the enclave will be available. Sin embargo, las posteriores consultas con la funcionalidad de enclave darán error, y los índices en columnas habilitadas para enclave mediante cifrado aleatorio dejarán de ser válidos.However, any subsequent queries using the enclave functionality will fail, and indexes on enclave-enabled columns using randomized encryption will become invalid. Lo mismo se aplica al asociar una base de datos que usa Always Encrypted con enclaves seguros en la instancia que no tiene configurado el enclave.The same applies when you attach a database using Always Encrypted with secure enclaves on the instance that doesn't have the enclave configured.

Si la base de datos contiene índices en columnas habilitadas para enclave mediante cifrado aleatorio, asegúrese de habilitar la recuperación de base de datos acelerada (ADR) en la base de datos antes de crear una copia de seguridad de base de datos.If your database contains indexes on enclave-enabled columns using randomized encryption, make sure you enable Accelerated database recovery (ADR) in the database before creating a database backup. ADR garantizará que la base de datos, incluidos los índices, está disponible inmediatamente después de restaurarla.ADR will ensure the database, including the indexes, is available immediately after you restore the database. Para más información, consulte Recuperación de la base de datos.For more information, see Database Recovery.

Cuando se migra la base de datos mediante un archivo bacpac, debe asegurarse de quitar todos los índices de las columnas habilitadas para enclave con cifrado aleatorio antes de crear el archivo bacpac.When you migrate your database using a bacpac file, you need to make sure you drop all indexes enclave-enabled columns using randomized encryption before creating the bacpac file.

Restricciones conocidasKnown Limitations

Always Encrypted con enclaves seguros aborda algunas de las limitaciones de Always Encrypted al permitir las siguientes operaciones:Always Encrypted with secure enclaves addresses some limitations of Always Encrypted, by enabling the following operations:

  • Operaciones criptográficas en contexto.In-place cryptographic operations.
  • Coincidencia de patrones (LIKE) y operadores de comparación en columnas cifradas que usan cifrado aleatorio.Pattern matching (LIKE) and comparison operators on column encrypted using randomized encryption.

    Nota

    Las operaciones anteriores se admiten para las columnas de cadena de caracteres que se usan intercalaciones con un criterio de ordenación binary2 (intercalaciones BIN2).The above operations are supported for character string columns that use collations with a binary2 sort order (BIN2 collations). Las columnas de cadena de caracteres que usan intercalaciones BIN2 se pueden cifrar mediante cifrado aleatorio y claves de cifrado de columna habilitadas para enclave.Character string columns using non-BIN2 collations can be encrypted using randomized encryption and enclave-enabled column encryption keys. Sin embargo, la única funcionalidad nueva habilitada para dichas columnas es el cifrado en contexto.However, the only new functionality that is enabled for such columns is in-place encryption.

  • Creación de índices no agrupados en columnas que usan cifrado aleatorio.Creating nonclustered indexes on columns using randomized encryption.

El resto de limitaciones de Always Encrypted enumeradas en Detalles de las características también se aplican a Always Encrypted con enclaves seguros.All other limitations for Always Encrypted listed at Feature Details also apply to Always Encrypted with secure enclaves.

Las siguientes limitaciones son específicas de Always Encrypted con enclaves seguros:The following limitations are specific to Always Encrypted with secure enclaves:

  • No se pueden crear índices agrupados en columnas habilitadas para enclave que usan cifrado aleatorio.Clustered indexes can't be created on enclave-enabled columns using randomized encryption.
  • Las columnas habilitadas para enclave que usan cifrado aleatorio no pueden ser columnas de clave principales y no se puede hacer referencia a ellas con restricciones de clave externa o restricciones de clave única.Enclave-enabled columns using randomized encryption can't be primary key columns and cannot be referenced by foreign key constraints or unique key constraints.
  • Solo se admiten las combinaciones de bucle anidado (con índices, si están disponibles) en las columnas habilitadas para enclave mediante el cifrado aleatorio.Only nested loop joins (using indexes, if available) are supported on enclave-enabled columns using randomized encryption. No se admiten las combinaciones combinadas ni las combinaciones hash.Hash joins and merged joins are not supported.
  • Las operaciones criptográficas en contexto no se pueden combinar con ningún otro cambio de metadatos de columna, excepto los cambios de intercalación dentro de la misma página de código y nulabilidad.In-place cryptographic operations cannot be combined with any other changes of column metadata, except changing a collation within the same code page and nullability. Por ejemplo, no puede cifrar, volver a cifrar ni descifrar una columna y cambiar un tipo de datos de la columna en una sola instrucción ALTER TABLE/ALTER COLUMN de Transact-SQL.For example, you cannot encrypt, re-encrypt, or decrypt a column AND change a data type of the column in a single ALTER TABLE/ALTER COLUMN Transact-SQL statement. Use dos instrucciones independientes.Use two separate statements.
  • No se admite el uso de claves habilitadas para enclave en columnas de tablas en memoria.Using enclave-enabled keys for columns in in-memory tables isn't supported.
  • Las expresiones que definen columnas calculadas no pueden realizar cálculos en columnas habilitadas para el enclave mediante el cifrado aleatorio (aunque los cálculos sean LIKE y comparaciones de variedades).Expressions defining computed columns cannot perform any computations on enclave-enabled columns using randomized encryption (even if the computations are LIKE and range comparisons).
  • Los caracteres de escape no se admiten en los parámetros del operador LIKE en las columnas habilitadas para enclave mediante el cifrado aleatorio.Escape characters are not supported in parameters of the LIKE operator on enclave-enabled columns using randomized encryption.
  • Las consultas con el operador LIKE o un operador de comparación que tiene un parámetro de consulta que usa uno de los siguientes tipos de datos (que se convierten en objetos grandes después del cifrado) pasan por alto los índices y realizan recorridos de tabla.Queries with the LIKE operator or a comparison operator that has a query parameter using one of the following data types (that become large objects after encryption) ignore indexes and perform table scans.
    • nchar[n] y nvarchar[n], si "n" es mayor que 3967.nchar[n] and nvarchar[n], if n is greater than 3967.
    • char[n], varchar[n], binary[n] y varbinary[n], si "n" es mayor que 7935.char[n], varchar[n], binary[n], varbinary[n], if n is greater than 7935.
  • Limitaciones de las herramientas:Tooling limitations:
    • Los únicos almacenes de claves que se admiten para almacenar claves maestras de columna habilitadas para el enclave son Almacén de certificados de Windows y Azure Key Vault.The only supported key stores for storing enclave-enabled column master keys are Windows Certificate Store and Azure Key Vault.
    • No se admite la importación o exportación de bases de datos que contienen claves habilitadas para enclave.Importing/exporting databases containing enclave-enabled keys is not supported.
    • Para desencadenar una operación criptográfica en contexto a través de ALTER TABLE/ALTER COLUMN, debe emitir la instrucción mediante una ventana de consulta en SSMS, o bien puede escribir su propio programa que emita la instrucción.To trigger an in-place cryptographic operation via ALTER TABLE/ALTER COLUMN, you need to issue the statement using a query window in SSMS, or you can write your own program that issues the statement. Actualmente, el cmdlet Set-SqlColumnEncryption en el módulo SqlServer de PowerShell y el asistente para Always Encrypted en SQL Server Management Studio no admiten el cifrado en contexto, sino que sacan los datos de la base de datos para realizar operaciones criptográficas, incluso si las claves de cifrado de columna que se usan en estas operaciones están habilitadas para enclave.Currently, the Set-SqlColumnEncryption cmdlet in the SqlServer PowerShell module and the Always Encrypted wizard in SQL Server Management Studio do not support in-place encryption - they move the data out of the database for cryptographic operations, even if the column encryption keys used for the operations are enclave-enabled.

Pasos siguientesNext steps

Vea tambiénSee also