Compartir a través de


Always Encrypted: funcionamiento de las consultas en columnas cifradas

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Para ejecutar una consulta en columnas de base de datos cifradas, insertar datos en estas columnas, recuperar valores de texto no cifrado o realizar operaciones admitidas (como búsquedas de búsqueda de puntos) mediante cifrado determinista, el usuario o la aplicación que emite la consulta deben cumplir los siguientes requisitos previos:

  • Tener acceso a la clave maestra de columna que protege los datos. Este acceso a claves es necesario además de los permisos de nivel de base de datos, como SELECT en la tabla pertinente.
  • Conectarse a la base de datos con la opción Always Encrypted activada en la conexión de base de datos. La mayoría de las herramientas SQL y los controladores de cliente SQL admiten la activación de Always Encrypted para las conexiones de bases de datos.

Nota:

Si el usuario tiene los permisos de base de datos necesarios para leer los datos, pero no tiene acceso a las claves que los protegen, puede recuperar los datos de texto cifrado (cifrados) conectándose a la base de datos sin activar Always Encrypted en la conexión de base de datos.

Captura de pantalla del esquema de cómo funcionan las consultas en columnas cifradas.

A continuación se explica cómo funcionan las consultas sobre columnas cifradas:

  1. Cuando una aplicación emite una consulta con parámetros, el controlador de cliente SQL dentro de la aplicación se pone en contacto de forma transparente con el Motor de base de datos (llamando a sp_describe_parameter_encryption para determinar qué parámetros tienen como destino las columnas cifradas y deben cifrarse. Para cada parámetro que debe cifrarse, el controlador recibe el algoritmo de cifrado, el tipo de cifrado y los metadatos de la clave, incluida la clave de cifrado de la columna cifrada y la ubicación de su correspondiente clave maestra de columna.
  2. El controlador llama al almacén de claves, que contiene claves maestras de columna para descifrar los valores de la clave de cifrado de columna cifrada. Las claves de cifrado de columna en texto no cifrado resultantes se almacenan en caché para reducir el número de recorridos de ida y vuelta al almacén de claves en usos posteriores de las mismas claves de cifrado de columna.
  3. El controlador usa las claves de cifrado de columnas en texto no cifrado obtenidas para cifrar los parámetros de consulta correspondientes a las columnas cifradas.
  4. El controlador sustituye los valores en texto no cifrado de los parámetros correspondientes a las columnas cifradas por sus valores cifrados y envía la consulta al motor de base de datos para su procesamiento.
  5. El motor de base de datos ejecuta la consulta, que puede incluir comparaciones de igualdad en columnas que usan cifrado determinista.
  6. Si los resultados de la consulta incluyen datos de columnas cifradas, el motor de base de datos adjunta metadatos de cifrado para cada columna, incluida la información sobre el algoritmo de cifrado, el tipo de cifrado y los metadatos de clave al conjunto de resultados.
  7. El motor de base de datos envía el conjunto de resultados a la aplicación cliente.
  8. Para cada columna cifrada en el conjunto de resultados recibido, el controlador primero intenta encontrar la clave de cifrado de la columna en texto plano en la caché local, y solo realiza un recorrido de ida y vuelta a un almacén de claves que contenga la clave maestra de la columna si no puede encontrar la clave en la caché.
  9. El controlador descifra los resultados y devuelve los valores en texto no cifrado a la aplicación.

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. Los proveedores de los tipos más comunes de almacenes de claves están disponibles en las bibliotecas de controladores del lado del cliente de Microsoft, o como descargas independientes. También puede implementar su propio proveedor. 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.

Consulte Desarrollo de aplicaciones con Always Encrypted para ver la lista de controladores cliente compatibles con Always Encrypted e información sobre cómo desarrollar aplicaciones que consulten columnas cifradas.

También puede consultar columnas cifradas mediante herramientas sql, por ejemplo , Consultar columnas mediante Always Encrypted con Azure Data Studio o Consultar columnas mediante Always Encrypted con SQL Server Management Studio.