Always EncryptedAlways Encrypted

SE APLICA A: síSQL Server síAzure SQL Database noAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelosAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Always EncryptedAlways Encrypted

Always Encrypted es una característica diseñada para proteger la información confidencial, como números de tarjeta de crédito o números de identificación nacional (por ejemplo, los números de seguridad social de EE. UU.), almacenada en bases de datos Azure SQL DatabaseAzure SQL Database o SQL ServerSQL Server.Always Encrypted is a feature designed to protect sensitive data, such as credit card numbers or national identification numbers (for example, U.S. social security numbers), stored in Azure SQL DatabaseAzure SQL Database or SQL ServerSQL Server databases. Always Encrypted permite a los clientes cifrar información confidencial en aplicaciones cliente y nunca revelar las claves de cifrado en Motor de base de datosDatabase Engine (SQL DatabaseSQL Database o SQL ServerSQL Server).Always Encrypted allows clients to encrypt sensitive data inside client applications and never reveal the encryption keys to the Motor de base de datosDatabase Engine (SQL DatabaseSQL Database or SQL ServerSQL Server). Como resultado, Always Encrypted proporciona una separación entre aquellos que poseen los datos y pueden verlos, y aquellos que los administran, pero que no deberían tener acceso.As a result, Always Encrypted provides a separation between those who own the data and can view it, and those who manage the data but should have no access. Al asegurar que los administradores de base de datos local, los operadores de base de datos en la nube y otros con usuarios con privilegios elevados no autorizados no pueden obtener acceso a los datos cifrados, Always Encrypted permite a los clientes almacenar información confidencial de forma segura fuera de su control directo.By ensuring on-premises database administrators, cloud database operators, or other high-privileged unauthorized users, can't access the encrypted data, Always Encrypted enables customers to confidently store sensitive data outside of their direct control. Esto permite a las organizaciones almacenar sus datos en Azure, y permitir la delegación de la administración de la base de datos local a terceros, o reducir los requisitos de autorización de seguridad para su propio personal de administración de bases de datos.This allows organizations to store their data in Azure, and enable delegation of on-premises database administration to third parties, or to reduce security clearance requirements for their own DBA staff.

Always Encrypted proporciona capacidades de computación confidencial al permitir que Motor de base de datosDatabase Engine procese algunas consultas en datos cifrados y, al mismo tiempo, preserva la confidencialidad de los datos y brinda las ventajas de seguridad mencionadas anteriormente.Always Encrypted provides confidential computing capabilities by enabling the Motor de base de datosDatabase Engine to process some queries on encrypted data, while preserving the confidentiality of the data and providing the above security benefits. En SQL Server 2016 (13.x)SQL Server 2016 (13.x), SQL Server 2017 (14.x)SQL Server 2017 (14.x) y Azure SQL DatabaseAzure SQL Database, Always Encrypted admite la comparación de igualdad mediante el cifrado determinista.In SQL Server 2016 (13.x)SQL Server 2016 (13.x), SQL Server 2017 (14.x)SQL Server 2017 (14.x) and in Azure SQL DatabaseAzure SQL Database, Always Encrypted supports equality comparison via deterministic encryption. Vea Selección del cifrado determinista o aleatorio.See Selecting Deterministic or Randomized Encryption.

Nota

En SQL Server 2019 (15.x)SQL Server 2019 (15.x), los enclaves seguros amplían considerablemente las capacidades de computación confidencial de Always Encrypted con coincidencia de patrones, otros operadores de comparación y el cifrado en contexto.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), secure enclaves substantially extend confidential computing capabilities of Always Encrypted with pattern matching, other comparison operators and in-place encryption. Vea Always Encrypted con enclaves seguros.See Always Encrypted with secure enclaves.

Always Encrypted realiza cifrado transparente en las aplicaciones.Always Encrypted makes encryption transparent to applications. Un controlador habilitado para Always Encrypted instalado en el equipo cliente consigue esto al cifrar y descifrar automáticamente la información confidencial en la aplicación cliente.An Always Encrypted-enabled driver installed on the client computer achieves this by automatically encrypting and decrypting sensitive data in the client application. El controlador cifra los datos en columnas confidenciales antes de pasar los datos a Motor de base de datosDatabase Enginey vuelve a escribir las consultas automáticamente para que se conserve la semántica de la aplicación.The driver encrypts the data in sensitive columns before passing the data to the Motor de base de datosDatabase Engine, and automatically rewrites queries so that the semantics to the application are preserved. De forma similar, el controlador descifra los datos de forma transparente, almacenados en columnas de bases de datos cifradas, incluidas en los resultados de la consulta.Similarly, the driver transparently decrypts data, stored in encrypted database columns, contained in query results.

Always Encrypted está disponible en todas las ediciones de Azure SQL DatabaseAzure SQL Database, a partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x), y en todos los niveles de servicio de SQL DatabaseSQL Database.Always Encrypted is available in all editions of Azure SQL DatabaseAzure SQL Database, starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) and all service tiers of SQL DatabaseSQL Database. (Antes de SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1, Always Encrypted estaba limitado a Enterprise Edition). Si desea ver una presentación de Channel 9 que incluye Always Encrypted, vea Keeping Sensitive Data Secure with Always Encrypted(Mantener protegida la información confidencial con Always Encrypted).(Prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1, Always Encrypted was limited to the Enterprise Edition.) For a Channel 9 presentation that includes Always Encrypted, see Keeping Sensitive Data Secure with Always Encrypted.

Escenarios típicosTypical Scenarios

Cliente y datos localesClient and data on-premises

Un cliente tiene una aplicación cliente y SQL ServerSQL Server , que se ejecutan localmente, en su ubicación de la empresa.A customer has a client application and SQL ServerSQL Server both running on-premises, at their business location. El cliente desea contratar a un proveedor externo para administrar SQL ServerSQL Server.The customer wants to hire an external vendor to administer SQL ServerSQL Server. Para proteger la información confidencial almacenada en SQL ServerSQL Server, el cliente utiliza Always Encrypted para garantizar la separación de obligaciones entre los administradores de base de datos y los de aplicación.In order to protect sensitive data stored in SQL ServerSQL Server, the customer uses Always Encrypted to ensure the separation of duties between database administrators and application administrators. El cliente almacena valores de texto no cifrado de claves de Always Encrypted en un almacén de claves de confianza al que puede acceder la aplicación cliente.The customer stores plaintext values of Always Encrypted keys in a trusted key store, which the client application can access. Los administradores deSQL ServerSQL Server no tienen acceso a las claves y, por lo tanto, no pueden descifrar la información confidencial almacenada en SQL ServerSQL Server.SQL ServerSQL Server administrators have no access to the keys and, therefore, are unable to decrypt sensitive data stored in SQL ServerSQL Server.

Cliente local con datos de AzureClient on-premises with data in Azure

Un cliente tiene una aplicación cliente local en su ubicación de la empresa.A customer has an on-premises client application at their business location. La aplicación trabaja sobre la información confidencial almacenada en una base de datos hospedada en Azure (SQL DatabaseSQL Database o SQL ServerSQL Server que se ejecutan en una máquina virtual en Microsoft Azure).The application operates on sensitive data stored in a database hosted in Azure (SQL DatabaseSQL Database or SQL ServerSQL Server running in a virtual machine on Microsoft Azure). El cliente usa Always Encrypted y almacena las claves de Always Encrypted en un almacén de claves de confianza hospedado en local, para garantizar que los administradores de nube de MicrosoftMicrosoft no tengan acceso a la información confidencial.The customer uses Always Encrypted and stores Always Encrypted keys in a trusted key store hosted on-premises, to ensure MicrosoftMicrosoft cloud administrators have no access to sensitive data.

Cliente y datos en AzureClient and Data in Azure

Un cliente tiene una aplicación cliente hospedada en Microsoft Azure (por ejemplo, en un rol de trabajo o un rol web) que trabaja sobre la información confidencial almacenada en una base de datos hospedada en Azure (SQL Database o SQL Server se ejecutan en una máquina virtual en Microsoft Azure).A customer has a client application, hosted in Microsoft Azure (for example, in a worker role or a web role), which operates on sensitive data stored in a database hosted in Azure (SQL Database or SQL Server running in a virtual machine on Microsoft Azure). Aunque Always Encrypted no proporciona un aislamiento completo de los datos ante los administradores de la nube, dado que tanto los datos como las claves están expuestos a los administradores de la nube de la plataforma que hospeda el nivel de cliente, el cliente se sigue beneficiando de la reducción del área expuesta a ataques de seguridad (los datos siempre se cifran en la base de datos).Although Always Encrypted doesn't provide complete isolation of data from cloud administrators, as both the data and keys are exposed to cloud administrators of the platform hosting the client tier, the customer still benefits from reducing the security attack surface area (the data is always encrypted in the database).

FuncionamientoHow it Works

Puede configurar Always Encrypted de modo que las columnas individuales de la base de datos contengan la información confidencial.You can configure Always Encrypted for individual database columns containing your sensitive data. Al configurar el cifrado de una columna, especifique la información sobre el algoritmo de cifrado y las claves criptográficas usados para proteger los datos de la columna.When setting up encryption for a column, you specify the information about the encryption algorithm and cryptographic keys used to protect the data in the column. Always Encrypted usa claves de dos tipos: claves maestras de columna y claves de cifrado de columna.Always Encrypted uses two types of keys: column encryption keys and column master keys. Una clave de cifrado de columna se usa para cifrar los datos de una columna cifrada.A column encryption key is used to encrypt data in an encrypted column. Una clave maestra de columna es una clave de protección de claves que cifra una o varias claves de cifrado de columna.A column master key is a key-protecting key that encrypts one or more column encryption keys.

El motor de base de datos almacena la configuración de cifrado de cada columna en los metadatos de la base de datos.The Database Engine stores encryption configuration for each column in database metadata. Pero tenga en cuenta que el motor de base de datos nunca almacena ni usa las claves de cualquier tipo de texto no cifrado.Note, however, the Database Engine never stores or uses the keys of either type in plaintext. Solo almacena valores cifrados de claves de cifrado de columna y la información sobre la ubicación de claves maestras de columna, que se almacenan en almacenes de claves de confianza externos, como el almacén de claves de Azure, el almacén de certificados de Windows en un equipo cliente o un módulo de seguridad de hardware.It only stores encrypted values of column encryption keys and the information about the location of column master keys, which are stored in external trusted key stores, such as Azure Key Vault, Windows Certificate Store on a client machine, or a hardware security module.

Para acceder a los datos almacenados en una columna cifrada en texto no cifrado, una aplicación debe usar un controlador de cliente habilitado para Always Encrypted.To access data stored in an encrypted column in plaintext, an application must use an Always Encrypted enabled client driver. Cuando una aplicación emite una consulta con parámetros, el controlador colabora de forma transparente con el motor de base de datos para determinar qué parámetros se dirigen a columnas cifradas y, por lo tanto, se deben cifrar.When an application issues a parameterized query, the driver transparently collaborates with the Database Engine to determine which parameters target encrypted columns and, thus, should be encrypted. De cada parámetro que se tiene que cifrar, el controlador obtiene la información sobre el algoritmo de cifrado y el valor cifrado de la clave de cifrado de columna de la columna, los destinos del parámetro y la ubicación de su clave maestra de columna correspondiente.For each parameter that needs to be encrypted, the driver obtains the information about the encryption algorithm and the encrypted value of the column encryption key for the column, the parameter targets, as well as the location of its corresponding column master key.

Después, el controlador se pone en contacto con el almacén de claves, que contiene la clave maestra de columna, para descifrar el valor de clave de cifrado de columna cifrado y, luego, usa la clave de cifrado de columna de texto no cifrado para cifrar el parámetro.Next, the driver contacts the key store, containing the column master key, in order to decrypt the encrypted column encryption key value and then, it uses the plaintext column encryption key to encrypt the parameter. La clave de cifrado de columna de texto no cifrado resultante se almacena en la memoria caché para reducir el número de viajes de ida y vuelta al almacén de claves en usos posteriores de la misma clave de cifrado de columna.The resultant plaintext column encryption key is cached to reduce the number of round trips to the key store on subsequent uses of the same column encryption key. El controlador sustituye los valores de texto no cifrado de los parámetros que se dirigen a columnas cifradas por sus valores cifrados y envía la consulta al servidor para su procesamiento.The driver substitutes the plaintext values of the parameters targeting encrypted columns with their encrypted values, and it sends the query to the server for processing.

El servidor calcula el conjunto de resultados y, para cualquier columna cifrada incluida en el conjunto de resultados, el controlador adjunta los metadatos de cifrado de la columna, incluida la información sobre el algoritmo de cifrado y las claves correspondientes.The server computes the result set, and for any encrypted columns included in the result set, the driver attaches the encryption metadata for the column, including the information about the encryption algorithm and the corresponding keys. El controlador primero intenta buscar la clave de cifrado de columna de texto no cifrado en la memoria caché local y, si no la encuentra, solo realiza una ronda en la clave maestra de columna.The driver first tries to find the plaintext column encryption key in the local cache, and only makes a round to the column master key if it can't find the key in the cache. Luego, el controlador descifra los resultados y devuelve valores de texto no cifrado a la aplicación.Next, the driver decrypts the results and returns plaintext values to the application.

Un controlador cliente interactúa con un almacén de claves, que contiene una clave maestra de columna, mediante un proveedor de almacén de claves maestras de columna, que es un componente de software de cliente que encapsula un almacén de claves que contiene la clave maestra de columna.A client driver interacts with a key store, containing a column master key, using a column master key store provider, which is a client-side software component that encapsulates a key store containing the column master key. Los proveedores de los tipos comunes de almacenes de claves están disponibles en bibliotecas de controladores de cliente de Microsoft o como descargas independientes.Providers for common types of key stores are available in client-side driver libraries from Microsoft or as standalone downloads. También puede implementar su propio proveedor.You can also implement your own provider. Las funciones de Always Encrypted, incluidos los proveedores integrados de almacenes de claves maestras de columna, varían según la biblioteca de controladores y su versión.Always Encrypted capabilities, including built-in column master key store providers vary by a driver library and its version.

Para obtener información sobre cómo desarrollar aplicaciones mediante Always Encrypted con controladores de cliente determinados, vea Desarrollo de aplicaciones con Always Encrypted.For details of how to develop applications using Always Encrypted with particular client drivers, see Develop applications using Always Encrypted.

ObservacionesRemarks

El cifrado y descifrado se produce a través del controlador de cliente.Encryption and decryption occurs via the client driver. Esto significa que algunas acciones que se producen solo en el lado servidor no funcionarán cuando se use Always Encrypted.This means that some actions that occur only server-side will not work when using Always Encrypted. Entre los ejemplos se incluye la copia de datos de una columna a otra a través de una instrucción UPDATE, BULK INSERT (T-SQL), SELECT INTO o INSERT..SELECT.Examples include copying data from one columng to another via an UPDATE, BULK INSERT(T-SQL), SELECT INTO, INSERT..SELECT.

Aquí tiene un ejemplo de una instrucción UPDATE que intenta mover datos desde una columna cifrada a una columna sin cifrar sin devolver al cliente un conjunto de resultados:Here's an example of an UPDATE that attempts to move data from an encrypted column to an unencrypted column without returning a result set to the client:

update dbo.Patients set testssn = SSN

Si SSN es una columna cifrada mediante Always Encrypted, la instrucción de actualización anterior producirá un error similar a:If SSN is a column encrypted using Always Encrypted, the above update statement will fail with an error similar to:

Msg 206, Level 16, State 2, Line 89
Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char

Para actualizar correctamente la columna, haga lo siguiente:To successfully update the column, do the following:

  1. SELECCIONE los datos de fuera de la columna SSN y almacénelos como un conjunto de resultados en la aplicación.SELECT the data out of the SSN column, and store it as a result set in the application. Esto permitirá que la aplicación (controlador del cliente) descifre la columna.This will allow for the application (client driver) to decrypt the column.
  2. INSERTE los datos desde el conjunto de resultados en SQL Server.INSERT the data from the result set into SQL Server.

Importante

En este escenario, los datos se descifrarán cuando se envíen al servidor, ya que la columna de destino es varchar normal que no acepta datos cifrados.In this scenario, the data will be unencrypted when sent back to the server because the destination column is a regular varchar that does not accept encrypted data.

Selección del cifrado determinista o aleatorioSelecting Deterministic or Randomized Encryption

El motor de base de datos nunca funciona en los datos de texto no cifrado almacenados en columnas cifradas, pero sigue admitiendo algunas consultas en datos cifrados, según el tipo de cifrado de la columna.The Database Engine never operates on plaintext data stored in encrypted columns, but it still supports some queries on encrypted data, depending on the encryption type for the column. Always Encrypted admite dos tipos de cifrado: el cifrado aleatorio y el determinista.Always Encrypted supports two types of encryption: randomized encryption and deterministic encryption.

  • El cifrado determinista genera siempre el mismo valor cifrado para cualquier valor de texto no cifrado concreto.Deterministic encryption always generates the same encrypted value for any given plain text value. El empleo del cifrado determinista permite búsquedas de puntos, combinaciones de igualdad, agrupaciones e indexación en columnas cifradas.Using deterministic encryption allows point lookups, equality joins, grouping and indexing on encrypted columns. Pero también puede permitir que usuarios no autorizados adivinen información sobre los valores cifrados al examinar los patrones de la columna cifrada, especialmente si hay un pequeño conjunto de posibles valores cifrados, como verdadero o falso, o como la región norte, sur, este u oeste.However, it may also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column, especially if there's a small set of possible encrypted values, such as True/False, or North/South/East/West region. El cifrado determinista debe usar una intercalación de columna con un criterio de ordenación binario 2 para columnas de caracteres.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

  • El cifrado aleatorio usa un método que cifra los datos de una manera menos predecible.Randomized encryption uses a method that encrypts data in a less predictable manner. El cifrado aleatorio es más seguro, pero evita las búsquedas, la agrupación, la indexación y la combinación en columnas cifradas.Randomized encryption is more secure, but prevents searching, grouping, indexing, and joining on encrypted columns.

Use el cifrado determinista para las columnas que se usarán como parámetros de búsqueda o agrupación.Use deterministic encryption for columns that will be used as search or grouping parameters. Por ejemplo, un número de identificación gubernamental.For example, a government ID number. Use el cifrado aleatorio para aquellos datos como comentarios de investigación confidenciales que no están agrupados con otros registros y no se usan para combinar tablas.Use randomized encryption for data such as confidential investigation comments, which aren't grouped with other records and aren't used to join tables. Para obtener detalles sobre los algoritmos criptográficos de Always Encrypted, vea Criptografía de Always Encrypted.For details on Always Encrypted cryptographic algorithms, see Always Encrypted cryptography.

Configuración de Always EncryptedConfiguring Always Encrypted

La configuración inicial de Always Encrypted en una base de datos implica la generación de claves de Always Encrypted, la creación de metadatos de clave, la configuración de propiedades de cifrado de columnas seleccionadas de la base de datos o el cifrado de los datos que puedan existir en las columnas que deban cifrarse.The initial setup of Always Encrypted in a database involves generating Always Encrypted keys, creating key metadata, configuring encryption properties of selected database columns, and/or encrypting data that may already exist in columns that need to be encrypted. Tenga en cuenta que algunas de estas tareas no se admiten en Transact-SQL y exigen el uso de herramientas de cliente.Please note that some of these tasks are not supported in Transact-SQL and require the use of client-side tools. Dado que las claves de Always Encrypted y la información confidencial protegida nunca se revelan en texto no cifrado al servidor, el motor de base de datos no puede estar implicado en el aprovisionamiento de claves ni realizar operaciones de cifrado o descifrado de datos.As Always Encrypted keys and protected sensitive data are never revealed in plaintext to the server, the Database Engine can't be involved in key provisioning and perform data encryption or decryption operations. Puede usar SQL Server Management Studio o PowerShell para realizar esas tareas.You can use SQL Server Management Studio or PowerShell to accomplish such tasks.

TareaTask SSMSSSMS PowerShellPowerShell T-SQLT-SQL
Aprovisionamiento de claves maestras de columna, claves de cifrado de columna y claves de cifrado de columna cifrada con sus claves maestras de columna correspondientes.Provisioning column master keys, column encryption keys and encrypted column encryption keys with their corresponding column master keys. Yes Yes NoNo
Creación de metadatos de clave en la base de datos.Creating key metadata in the database. Yes Yes Yes
Creación de nuevas tablas con columnas cifradasCreating new tables with encrypted columns Yes Yes Yes
Cifrado de los datos existentes en las columnas seleccionadas de la base de datosEncrypting existing data in selected database columns Yes Yes NoNo

Nota

Always Encrypted con enclaves seguros, introducido en SQL Server 2019 (15.x)SQL Server 2019 (15.x), admite el cifrado de datos existentes con Transact-SQL.Always Encrypted with secure enclaves, introduced in SQL Server 2019 (15.x)SQL Server 2019 (15.x), does support encrypting existing data using Trasact-SQL. También elimina la necesidad de sacar los datos de la base de datos para realizar las operaciones criptográficas.It also eliminates the need to move the data outside of the data for cryptographic operations.

Nota

Asegúrese de ejecutar las herramientas de aprovisionamiento de claves o de cifrado de datos en un entorno seguro, en un equipo que no sea el que hospeda la base de datos.Make sure you run key provisioning or data encryption tools in a secure environment, on a computer that is different from the computer hosting your database. De lo contrario, podría filtrarse información confidencial o las claves al entorno de servidor, lo que reduciría las ventajas del empleo de Always Encrypted.Otherwise, sensitive data or the keys could leak to the server environment, which would reduce the benefits of the using Always Encrypted.

Para obtener más información sobre la configuración de Always Encrypted, vea:For details on configuring Always Encrypted see:

Introducción a Always EncryptedGetting Started with Always Encrypted

Use el Asistente para Always Encrypted para comenzar a usar este software rápidamente.Use the Always Encrypted Wizard to quickly start using Always Encrypted. El Asistente aprovisionará las claves necesarias y configurará el cifrado de las columnas seleccionadas.The wizard will provision the required keys and configure encryption for selected columns. Si las columnas para las que está configurando el cifrado ya contienen algunos datos, el asistente los cifrará.If the columns you're setting encryption for already contain some data, the wizard will encrypt the data. En el ejemplo siguiente se muestra el proceso para cifrar una columna.The following example demonstrates the process for encrypting a column.

Nota

Para ver un vídeo que incluye el uso del asistente, vea Getting Started with Always Encrypted with SSMS (Introducción a Always Encrypted con SSMS).For a video that includes using the wizard, see Getting Started with Always Encrypted with SSMS.

  1. Conéctese a una base de datos existente que contenga tablas con columnas que quiera cifrar mediante el Explorador de objetos de Management Studio, o cree una nueva base de datos, cree una o más tablas con columnas para cifrar y conéctese a ella.Connect to an existing database that contains tables with columns you wish to encrypt using the Object Explorer of Management Studio, or create a new database, create one or more tables with columns to encrypt, and connect to it.
  2. Haga clic con el botón derecho en la base de datos, seleccione Tareas y, luego, haga clic en Cifrar columnas para abrir el Asistente de Always Encrypted.Right-click your database, point to Tasks, and then click Encrypt Columns to open the Always Encrypted Wizard.
  3. Revise la página Introduction y haga clic en Next.Review the Introduction page, and then click Next.
  4. En la página Column Selection , expanda las tablas y seleccione las columnas que desea cifrar.On the Column Selection page, expand the tables, and select the columns that you want to encrypt.
  5. En cada columna seleccionada para cifrado, establezca Tipo de cifrado en Determinista o Aleatorio.For each column selected for encryption, set the Encryption Type to either Deterministic or Randomized.
  6. Para cada columna seleccionada para cifrado, seleccione una clave de cifrado.For each column selected for encryption, select an Encryption Key. Si aún no ha creado claves de cifrado para esta base de datos, seleccione la opción predeterminada de una nueva clave generada automáticamente y, después, haga clic en Siguiente.If you have not previously created any encryption keys for this database, select the default choice of a new autogenerated key, and then click Next.
  7. En la página Configuración de la clave maestra , seleccione una ubicación para almacenar la clave nueva y seleccione un origen de clave maestra. Después, haga clic en Siguiente.On the Master Key Configuration page, select a location to store the new key, and select a master key source, and then click Next.
  8. En la página Validation , elija si desea ejecutar inmediatamente el script o crear un script de PowerShell y, después, haga clic en Next.On the Validation page, choose whether to run the script immediately or create a PowerShell script, and then click Next.
  9. En la página Resumen, revise las opciones que ha seleccionado y haga clic en Finalizar.On the Summary page, review the options you've selected, and then click Finish. Cierre al asistente cuando finalice.Close the wizard when completed.

Detalles de las característicasFeature Details

  • Las consultas realizan la comparación de igualdad en aquellas columnas cifradas mediante el cifrado determinista, pero ninguna otra operación (por ejemplo, mayor o menor que, coincidencia de patrones con el operador LIKE u operaciones matemáticas).Queries can perform equality comparison on columns encrypted using deterministic encryption, but no other operations (for example, greater/less than, pattern matching using the LIKE operator, or arithmetical operations).

  • Las consultas en columnas cifradas mediante el cifrado aleatorio no pueden realizar operaciones en ninguna de esas columnas.Queries on columns encrypted by using randomized encryption can't perform operations on any of those columns. No se admite la indexación de columnas cifradas mediante el cifrado aleatorio.Indexing columns encrypted using randomized encryption isn't supported.

Nota

Always Encrypted con enclaves seguros, introducido en SQL Server 2019 (15.x)SQL Server 2019 (15.x), aborda la limitación anterior al habilitar la coincidencia de patrones, los operadores de comparación y la indexación en columnas mediante el cifrado aleatorio.Always Encrypted with secure enclaves, introduced in SQL Server 2019 (15.x)SQL Server 2019 (15.x), addresses the above limitation by enabling pattern matching, comparison operators and indexing on columns using randomized encryption.

  • Una clave de cifrado de columna puede tener hasta dos valores cifrados diferentes, cada uno de ellos cifrado con una clave maestra de columna diferente.A column encryption key can have up to two different encrypted values, each encrypted with a different column master key. Esto facilita la rotación de claves maestras de columna.This facilitates column master key rotation.

  • El cifrado determinista requiere que una columna tenga una de las intercalaciones binary2.Deterministic encryption requires a column to have one of the binary2 collations.

  • Después de cambiar la definición de un objeto cifrado, ejecute sp_refresh_parameter_encryption para actualizar los metadatos de Always Encrypted para el objeto.After changing the definition of an encrypted object, execute sp_refresh_parameter_encryption to update the Always Encrypted metadata for the object.

Always Encrypted no se admite para las columnas con las características siguientes.Always Encrypted isn't supported for the columns with the below characteristics. Por ejemplo, si se aplica alguna de las siguientes condiciones a la columna, no se puede usar la cláusula ENCRYPTED WITH en CREATE TABLE/ALTER TABLE para una columna:For example, if any of the following conditions apply to the column, the ENCRYPTED WITH clause can't be used in CREATE TABLE/ALTER TABLE for a column:

  • Columnas que usan uno de los siguientes tipos de datos: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias o tipos definidos por el usuario.Columns using one of the following data types: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, user defined-types.
  • Columnas FILESTREAM.FILESTREAM columns
  • Columnas con la propiedad IDENTITY.Columns with the IDENTITY property.
  • Columnas con la propiedad ROWGUIDCOL.Columns with ROWGUIDCOL property.
  • Columnas de cadena (varchar, char, etc.) con intercalaciones que no son BIN2.String (varchar, char, etc.) columns with non-bin2 collations.
  • Columnas que son claves para índices no agrupados mediante una columna cifrada aleatoria como columna de clave (las columnas cifradas deterministas son válidas).Columns that are keys for nonclustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine).
  • Columnas que son claves para índices agrupados mediante una columna cifrada aleatoria como columna de clave (las columnas cifradas deterministas son válidas).Columns that are keys for clustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine).
  • Columnas que son claves para índices de texto completo que contienen columnas cifradas tanto aleatorias como deterministas.Columns that are keys for fulltext indices containing encrypted columns both randomized and deterministic.
  • Columnas calculadasComputed columns.
  • Columnas que hacen referencia a columnas calculadas (cuando la expresión realiza operaciones no admitidas para Always Encrypted).Columns referenced by computed columns (when the expression does unsupported operations for Always Encrypted).
  • Un conjunto de columnas dispersas.Sparse column set.
  • Columnas a las que hacen referencia las estadísticas.Columns that are referenced by statistics.
  • Columnas con tipo de alias.Columns using alias type.
  • Columnas de partición.Partitioning columns.
  • Columnas con restricciones predeterminadas.Columns with default constraints.
  • Columnas a las que hacen referencia las restricciones únicas mediante el cifrado aleatorio (se admite el cifrado determinista).Columns referenced by unique constraints when using randomized encryption (deterministic encryption is supported).
  • Columnas de clave principal al usar cifrado aleatorio (se admite el cifrado determinista).Primary key columns when using randomized encryption (deterministic encryption is supported).
  • Columnas de referencia en las restricciones de clave externa cuando se usa el cifrado aleatorio o el cifrado determinista, si las columnas de referencia y las que se hace referencia usan diferentes claves o algoritmos.Referencing columns in foreign key constraints when using randomized encryption or when using deterministic encryption, if the referenced and referencing columns use different keys or algorithms.
  • Columnas de referencia por restricciones de comprobación.Columns referenced by check constraints.
  • Columnas de tablas que usan la captura de datos modificados.Columns in tables that use change data capture.
  • Columnas de clave principal en tablas que tienen seguimiento de cambios.Primary key columns on tables that have change tracking.
  • Columnas que están enmascaradas (con Enmascaramiento dinámico de datos).Columns that are masked (using Dynamic Data Masking).
  • Columnas de tablas de Stretch Database.Columns in Stretch Database tables. (Las tablas con columnas cifradas con Always Encrypted pueden habilitarse para Stretch).(Tables with columns encrypted with Always Encrypted can be enabled for Stretch.)
  • Columnas de tablas externas (PolyBase). (Nota: Se admite el uso de tablas externas y tablas con columnas cifradas en la misma consulta).Columns in external (PolyBase) tables (note: using external tables and tables with encrypted columns in the same query is supported).
  • No se admiten parámetros con valores de tabla que se dirijan a columnas cifradas.Table-valued parameters targeting encrypted columns aren't supported.

Las cláusulas siguientes no se pueden usar en las columnas cifradas:The following clauses can't be used for encrypted columns:

  • FOR XML
  • FOR JSON PATH

Las características siguientes no funcionan en las columnas cifradas:The following features don't work on encrypted columns:

  • Replicación transaccional o de mezclaTransactional or merge replication
  • Consultas distribuidas: servidores vinculados, OPENROWSET(T-SQL) y OPENDATASOURCE(T-SQL)Distributed queries (linked servers, OPENROWSET(T-SQL), OPENDATASOURCE(T-SQL))

Requisitos de la herramientaTool Requirements

  • Se recomienda usar la versión 18 de SQL Server Management Studio o una versión posterior para ejecutar consultas que descifren los resultados recuperados de columnas cifradas o para insertar, actualizar o filtrar columnas cifradas.SQL Server Management Studio version 18 or higher is recommended to run queries that decrypt the results retrieved from encrypted columns or insert, update, or filter encrypted columns.
  • Se necesita sqlcmd versión 13.1 (o una versión posterior), la cual está disponible en el Centro de descarga.Requires sqlcmd version 13.1 or higher, which is available from the Download Center.

Permisos para la base de datosDatabase Permissions

Hay cuatro permisos para Always Encrypted:There are four permissions for Always Encrypted:

  • ALTER ANY COLUMN MASTER KEY (Necesario para crear y eliminar una clave maestra de columna).ALTER ANY COLUMN MASTER KEY (Required to create and delete a column master key.)

  • ALTER ANY COLUMN ENCRYPTION KEY (Necesario para crear y eliminar una clave de cifrado de columna).ALTER ANY COLUMN ENCRYPTION KEY (Required to create and delete a column encryption key.)

  • VIEW ANY COLUMN MASTER KEY DEFINITION (Necesario para acceder a los metadatos de las claves maestras de columna para administrar claves o consultar columnas cifradas y leerlos).VIEW ANY COLUMN MASTER KEY DEFINITION (Required to access and read the metadata of the column master keys to manage keys or query encrypted columns.)

  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (Necesario para acceder a los metadatos de la clave de cifrado de columna para administrar claves o consultar columnas cifradas y leerlos).VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (Required to access and read the metadata of the column encryption key to manage keys or query encrypted columns.)

En la tabla siguiente se resumen los permisos necesarios para acciones comunes.The following table summarizes the permissions required for common actions.

EscenarioScenario ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
Administración de claves (crear, cambiar, revisar metadatos de clave en la base de datos)Key management (creating/changing/reviewing key metadata in the database) XX XX XX XX
Consultar columnas cifradasQuerying encrypted columns XX XX

Notas importantes:Important notes:

  • Los permisos se aplican a las acciones con Transact-SQLTransact-SQL, Management StudioManagement Studio (cuadros de diálogo y asistente) o PowerShell.The permissions apply to actions using Transact-SQLTransact-SQL, Management StudioManagement Studio (dialog boxes and wizard), or PowerShell.

  • Los dos permisos VIEW son necesarios para seleccionar columnas cifradas, aunque el usuario no tenga permiso para descifrar las columnas.The two VIEW permissions are required when selecting encrypted columns, even if the user doesn't have permission to decrypt the columns.

  • En SQL ServerSQL Server, ambos permisos VIEW se conceden de manera predeterminada al rol fijo de base de datos public .In SQL ServerSQL Server, both VIEW permissions are granted by default to the public fixed database role. Un administrador de base de datos puede optar por revocar (o denegar) los permisos VIEW al rol public y concederlos a roles o usuarios concretos para implementar un control más restringido.A database administrator may choose to revoke (or deny) the VIEW permissions to the public role and grant them to specific roles or users to implement more restricted control.

  • En SQL DatabaseSQL Database, los permisos VIEW no se conceden de manera predeterminada al rol fijo de base de datos public.In SQL DatabaseSQL Database, the VIEW permissions aren't granted by default to the public fixed database role. Esto permite que determinadas herramientas existentes heredadas (con versiones anteriores de DacFx) funcionen correctamente.This enables certain existing, legacy tools (using older versions of DacFx) to work properly. Por lo tanto, para trabajar con columnas cifradas (aunque no se descifren), un administrador de base de datos debe conceder explícitamente los dos permisos VIEW .Consequently, to work with encrypted columns (even if not decrypting them) a database administrator must explicitly grant the two VIEW permissions.

EjemploExample

La siguiente Transact-SQLTransact-SQL crea metadatos de clave maestra de columna, metadatos de clave de cifrado de columna y una tabla con columnas cifradas.The following Transact-SQLTransact-SQL creates column master key metadata, column encryption key metadata, and a table with encrypted columns. Para obtener información sobre cómo crear las claves a las que se hace referencia en los metadatos, vea:For information how to create the keys, referenced in the metadata, see:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
   );  
---------------------------------------------  
CREATE COLUMN ENCRYPTION KEY MyCEK   
WITH VALUES  
(  
    COLUMN_MASTER_KEY = MyCMK,   
    ALGORITHM = 'RSA_OAEP',   
    ENCRYPTED_VALUE = 0x01700000016C006F00630061006C006D0061006300680069006E0065002F006D0079002F003200660061006600640038003100320031003400340034006500620031006100320065003000360039003300340038006100350064003400300032003300380065006600620063006300610031006300284FC4316518CF3328A6D9304F65DD2CE387B79D95D077B4156E9ED8683FC0E09FA848275C685373228762B02DF2522AFF6D661782607B4A2275F2F922A5324B392C9D498E4ECFC61B79F0553EE8FB2E5A8635C4DBC0224D5A7F1B136C182DCDE32A00451F1A7AC6B4492067FD0FAC7D3D6F4AB7FC0E86614455DBB2AB37013E0A5B8B5089B180CA36D8B06CDB15E95A7D06E25AACB645D42C85B0B7EA2962BD3080B9A7CDB805C6279FE7DD6941E7EA4C2139E0D4101D8D7891076E70D433A214E82D9030CF1F40C503103075DEEB3D64537D15D244F503C2750CF940B71967F51095BFA51A85D2F764C78704CAB6F015EA87753355367C5C9F66E465C0C66BADEDFDF76FB7E5C21A0D89A2FCCA8595471F8918B1387E055FA0B816E74201CD5C50129D29C015895CD073925B6EA87CAF4A4FAF018C06A3856F5DFB724F42807543F777D82B809232B465D983E6F19DFB572BEA7B61C50154605452A891190FB5A0C4E464862CF5EFAD5E7D91F7D65AA1A78F688E69A1EB098AB42E95C674E234173CD7E0925541AD5AE7CED9A3D12FDFE6EB8EA4F8AAD2629D4F5A18BA3DDCC9CF7F352A892D4BEBDC4A1303F9C683DACD51A237E34B045EBE579A381E26B40DCFBF49EFFA6F65D17F37C6DBA54AA99A65D5573D4EB5BA038E024910A4D36B79A1D4E3C70349DADFF08FD8B4DEE77FDB57F01CB276ED5E676F1EC973154F86  
);  
---------------------------------------------  
CREATE TABLE Customers (  
    CustName nvarchar(60)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = RANDOMIZED,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    SSN varchar(11)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = DETERMINISTIC ,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    Age int NULL  
);  
GO  
  

Consulte tambiénSee Also