Always Encrypted (motor de base de datos)Always Encrypted (Database Engine)

SE APLICA A: síSQL Server síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse 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 Base de datos SQL de AzureAzure 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 Base de datos SQL de AzureAzure 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, pero no autorizados, no pueden obtener acceso a los datos cifrados, Always Encrypted permite a los clientes almacenar información confidencial tranquilamente fuera de su control directo.By ensuring on-premises database administrators, cloud database operators, or other high-privileged, but unauthorized users, cannot access the encrypted data, Always Encrypted enables customers to confidently store sensitive data outside of their direct control. Esto permite a las organizaciones cifrar los datos en reposo y usarlos para su almacenamiento en Azure, para permitir la delegación de la administración de la base de datos local a terceros, o para reducir los requisitos de autorización de seguridad para su propio personal de DBA.This allows organizations to encrypt data at rest and in use for storage in Azure, to enable delegation of on-premises database administration to third parties, or to reduce security clearance requirements for their own DBA staff.

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 de forma transparente los datos almacenados en columnas de base de datos cifradas contenidos 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 SQL Server 2016 (13.x)SQL Server 2016 (13.x) y SQL DatabaseSQL Database.Always Encrypted is available in SQL Server 2016 (13.x)SQL Server 2016 (13.x) and 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 de ataque de seguridad (los datos siempre se cifran en la base de datos).Although Always Encrypted does not 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 encuentra la clave en la memoria caché, 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 cannot 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 de almacenes de claves maestras de columna integrados, 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 detalles sobre cómo desarrollar aplicaciones mediante Always Encrypted con controladores de cliente determinados, vea Always Encrypted (desarrollo de cliente).For details of how to develop applications using Always Encrypted with particular client drivers, see Always Encrypted (client development).

NotasRemarks

El descifrado se produce mediante el cliente.Decryption occurs via the client. 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.

Aquí tiene un ejemplo de una actualización 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.

Le escuchamos: Si encuentra algo obsoleto o incorrecto en este artículo, como un paso o un ejemplo de código, indíquenoslo.We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. Puede hacer clic en el botón Esta página situado en la sección Comentarios en la parte inferior de esta página.You can click the This page button in the Feedback section at the bottom of this page. Leemos todos los elementos de comentarios sobre SQL, normalmente el día siguiente.We read every item of feedback about SQL, typically the next day. Gracias.Thanks.

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/falso la región norte/sur/este/oeste.However, it may also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column, especially if there is 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.

Utilice el cifrado determinista para las columnas que se usarán como parámetros de búsqueda o agrupación, por ejemplo un número de identificación de gobierno.Use deterministic encryption for columns that will be used as search or grouping parameters, for example a government ID number. Utilice el cifrado aleatorio para aquellos datos como comentarios de investigación confidenciales que no están agrupados con otros registros y no se utilizan para combinar tablas.Use randomized encryption, for data such as confidential investigation comments, which are not grouped with other records and are not 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 cannot 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

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 aún contienen algunos datos, el asistente los cifrará.If the columns, you are 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 auto-generated 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 Summary , revise las opciones que ha seleccionado y haga clic en Finish.On the Summary page, review the options you have 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 cannot 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 is not supported.

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

No se admite Always Encrypted en las columnas con las características siguientes (por ejemplo, la cláusula Encrypted WITH no puede usarse en CREATE TABLE/ALTER TABLE para una columna si alguna de las condiciones siguientes se aplica a la columna):Always Encrypted is not supported for the columns with the below characteristics (for example, the Encrypted WITH clause cannot be used in CREATE TABLE/ALTER TABLE for a column, if any of the following conditions apply to the column):

  • Columnas con uno de los siguientes tipos de datos: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, tipos definidos por el usuario.Columns using one of the following datatypes: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, user defined-types.
  • Columnas FILESTREAMFILESTREAM columns
  • Columnas con la propiedad IDENTITYColumns with the IDENTITY property
  • Columnas con la propiedad ROWGUIDCOLColumns with ROWGUIDCOL property
  • Columnas de cadena (varchar, char, etc.) con intercalaciones que no son bin2String (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 deterministasColumns that are keys for fulltext indices containing encrypted columns both randomized and deterministic
  • 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)
  • Conjunto de columnas dispersasSparse column set
  • Columnas a las que hacen referencia las estadísticasColumns that are referenced by statistics
  • Columnas con tipo de aliasColumns using alias type
  • Columnas de particiónPartitioning columns
  • Columnas con restricciones predeterminadasColumns 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 algoritmosReferencing 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ónColumns referenced by check constraints
  • Columnas de tablas que utilizan captura de datos modificadosColumns in tables that use change data capture
  • Columnas de clave principal en tablas que tienen seguimiento de cambiosPrimary key columns on tables that have change tracking
  • Columnas que están enmascaradas (mediante el enmascaramiento de datos dinámicos)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 are not supported.

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

  • FOR XMLFOR XML
  • FOR JSON PATHFOR JSON PATH

Las características siguientes no funcionan en las columnas cifradas:The following features do not work on encrypted columns:

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

Requisitos de la herramientaTool Requirements

  • SQL Server Management Studio puede descifrar los resultados recuperados de columnas cifradas si se conecta con column encryption setting=enabled en la pestaña Propiedades adicionales del cuadro de diálogo Conectar con el servidor .SQL Server Management Studio can decrypt the results retrieved from encrypted columns if you connect with the column encryption setting=enabled in the Additional Properties tab of the Connect to Server dialog. Requiere al menos SQL Server Management Studio versión 17 para insertar, actualizar o filtrar columnas cifradas.Requires at least SQL Server Management Studio version 17 to insert, update, or filter encrypted columns. Si las cadenas de conexión se van a usar en aplicaciones cliente, consulte Always Encrypted (desarrollo de cliente).For connection strings to be used in client applicaitons, see Always Encrypted (client development)

  • Las conexiones cifradas de sqlcmd requieren al menos la versión 13.1, que está disponible en el Centro de descarga.Encrypted connections from sqlcmd require at least version 13.1, 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 does not 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 are not 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

CREATE COLUMN MASTER KEY (Transact-SQL) CREATE COLUMN MASTER KEY (Transact-SQL)
CREATE COLUMN ENCRYPTION KEY (Transact-SQL) CREATE COLUMN ENCRYPTION KEY (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
column_definition (Transact-SQL) column_definition (Transact-SQL)
sys.column_encryption_keys (Transact-SQL) sys.column_encryption_keys (Transact-SQL)
sys.column_encryption_key_values (Transact-SQL) sys.column_encryption_key_values (Transact-SQL)
sys.column_master_keys (Transact-SQL) sys.column_master_keys (Transact-SQL)
sys.columns (Transact-SQL) sys.columns (Transact-SQL)
Asistente para Always Encrypted Always Encrypted Wizard
Migración de datos confidenciales protegidos mediante Always Encrypted Migrate Sensitive Data Protected by Always Encrypted
Always Encrypted (desarrollo de cliente) Always Encrypted (client development)
Criptografía de Always Encrypted Always Encrypted Cryptography
Configurar Always Encrypted con SSMS Configurar Always Encrypted con PowerShell Configure Always Encrypted using SSMS Configure Always Encrypted using PowerShell
sp_refresh_parameter_encryption (Transact-SQL)sp_refresh_parameter_encryption (Transact-SQL)