Nota
Característica de la empresa
La función automática de cifrado a nivel de campo solo está disponible en los clústeres MongoDB Enterprise 4.2 o posterior y MongoDB Atlas 4.2 o posterior.
Nuevo en la versión 4.2.
Esta página documenta los comandos específicos, los operadores de consulta, los operadores de actualización, las etapas de agregación y las expresiones de agregación compatibles con 4.2+ configurados para el cifrado automático a nivel de campo del lado del cliente.
MongoDB almacena campos cifrados a nivel de campo del lado del cliente como
BinDataBlob. Las operaciones de lectura y escritura realizadas contra el BinData valor cifrado pueden tener un comportamiento inesperado o incorrecto en comparación con las realizadas contra el valor descifrado. Ciertas operaciones tienen compatibilidad estricta con el tipo BSON, por lo que al ejecutarlas contra un BinData valor se devuelve un error.
Los controladores oficiales compatibles con + que utilizan cifrado automático a nivel de campo del lado del cliente analizan las operaciones de lectura/escritura en busca de operadores o expresiones que no admiten 4.2
BinDatavalores o que tienen un comportamiento anormal cuando se emiten contraBinDatavalores.Las aplicaciones que utilizan cifrado de nivel de campo explícito (manual) del lado del cliente pueden usar esta página como guía para emitir operaciones de lectura/escritura en campos cifrados.
Comandos de lectura y escritura admitidos
Los 4.2controladores oficiales compatibles con MongoDB + admiten el cifrado automático a nivel de campo del lado del cliente con los siguientes comandos:
Para cualquier comando compatible, los controladores compatibles con 4.2+ devuelven un error si el comando utiliza un operador, una etapa de agregación o una expresión de agregación no admitidos:
Los siguientes comandos no requieren cifrado automático. Los 4.2controladores oficiales compatibles con MongoDB +, configurados para el cifrado automático a nivel de campo del lado del cliente, pasan estos comandos directamente mongod a:
Si se emite cualquier otro comando a través de un 4.2controlador compatible con + configurado para el cifrado automático a nivel de campo del lado del cliente, se devuelve un error.
| [1] | Aunque el cifrado automático a nivel de campo del lado del cliente no cifra el getMore comando, la respuesta al comando puede contener valores de campo cifrados. Las aplicaciones configuradas con las opciones correctas de cifrado a nivel de campo del lado del cliente descifran automáticamente dichos valores. Las aplicaciones sin las opciones de cifrado correctas solo ven los valores cifrados. |
Operadores de consulta admitidos
Los controladores oficiales compatibles con + configurados para 4.2 el cifrado automático a nivel de campo del lado del cliente permiten los siguientes operadores de consulta cuando se emiten contra campos cifrados de forma determinista:
Las consultas que comparan un campo cifrado con null o una expresión regular siempre generan un error,incluso si se utiliza un operador de consulta compatible. Las consultas que utilizan estos operadores contra un campo cifrado aleatoriamente generan un error.
El $exists operador tiene un comportamiento normal cuando se emite contra campos cifrados de forma determinista y aleatoria.
Las consultas que especifican cualquier otro operador de consulta contra un campo cifrado devuelven un error.
Los siguientes operadores de consulta generan un error incluso si no se emiten contra un campo cifrado:
Operadores de actualización compatibles
Los controladores oficiales compatibles con + configurados para el cifrado automático 4.2a nivel de campo del lado del cliente permiten los siguientes operadores de actualización cuando se emiten contra campos cifrados de forma determinista:
Para las operaciones de actualización que utilizan el $rename operador en campos cifrados, asegúrese de que el esquema JSON automático especifique los mismos metadatos de cifrado para los nombres de los campos de origen y destino.
Las actualizaciones que especifican cualquier otro operador de actualización contra un campo cifrado devuelven un error.
Las operaciones de actualización con el siguiente comportamiento arrojan un error incluso si se utiliza un operador compatible:
La operación de actualización produce una matriz dentro de una ruta cifrada.
La operación de actualización utiliza la sintaxis de expresión de agregación.
Para las operaciones de actualización que especifican un filtro de consulta en campos cifrados de forma determinista, el filtro de consulta debe usar solo operadores admitidos en esos campos.
Operaciones de inserción no admitidas
Los 4.2controladores oficiales compatibles con MongoDB + configurados para el cifrado automático a nivel de campo del lado del cliente no admiten comandos de inserción con el siguiente comportamiento:
Insertando un documento con
Timestamp(0,0)asociado a un campo cifrado. El(0,0)valor indica quemongoddebe generar la marca de tiempo. Dadomongodque no puede generar campos cifrados, la marca de tiempo resultante no estaría cifrada.Insertar un documento sin un campo cifrado
_idsi el esquema automático configurado especifica un_idcampo cifrado. Dado que generamongodautomáticamente un ObjectId sin cifrar, omitir_iden los documentos genera documentos que no cumplen con las reglas de cifrado automático.Insertar un documento con una matriz asociada a un campo cifrado deterministamente. El cifrado automático a nivel de campo del cliente no admite matrices cifradas deterministamente.
Etapas admitidas de agregación
Los 4.2controladores oficiales compatibles con MongoDB + configurados para el cifrado automático a nivel de campo del lado del cliente admiten las siguientes etapas de la canalización de agregación:
$group(ver Comportamiento de$grouppara los requisitos de uso.)$lookupy$graphLookup(Ver$lookupy$graphLookupComportamiento para requisitos de uso)
Las canalizaciones de agregación que operan en colecciones configuradas para cifrado automático que especifican cualquier otra etapa devuelven un error.
Para cada etapa de la canalización compatible, MongoDB rastrea los campos que deben cifrarse a medida que pasan por las canalizaciones compatibles y los marca para su cifrado.
Cada etapa compatible debe especificar únicamente los operadores de consulta y expresiones de agregación admitidos.
$group Comportamiento
$group tiene los siguientes comportamientos específicos del cifrado a nivel de campo del lado del cliente:
$lookup y $graphLookup Comportamiento
El cifrado automático a nivel de campo del lado del cliente admite $lookup y $graphLookup solo si la from colección coincide con la colección en la que se ejecuta la agregación (es decir, operaciones de búsqueda automática).
$lookup Las $graphLookup etapas y que hacen referencia a una from colección diferente devuelven un error.
Expresiones de agregación admitidas
Los controladores oficiales compatibles con + configurados para el cifrado automático a nivel de campo 4.2 del lado del cliente permiten etapas de agregación utilizando las siguientes expresiones contra campos cifrados de forma determinista:
Todas las demás expresiones de agregación devuelven un error si se ejecutan sobre campos cifrados.
Las etapas de agregación con el siguiente comportamiento arrojan un error incluso si se utiliza una expresión de agregación compatible:
Expresiones | Comportamiento rechazado | Ejemplo | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
La expresión especifica un campo cuyas propiedades de cifrado no se pueden conocer hasta el tiempo de ejecución y una etapa de agregación posterior incluye una expresión que hace referencia a ese campo. | | |||||||||||||||
La expresión crea un nuevo campo que hace referencia a un campo cifrado y opera sobre ese nuevo campo en la misma expresión. | | |||||||||||||||
La expresión hace referencia al prefijo de un campo cifrado dentro de la expresión de comparación. | | |||||||||||||||
El resultado de la expresión se compara con un campo cifrado. | | |||||||||||||||
La expresión vincula una variable a un campo cifrado o intenta volver a | | |||||||||||||||
El primer argumento de la expresión es un campo cifradoy
| |
Tipos de campos no admitidos
Los 4.2controladores oficiales compatibles con MongoDB + configurados para el cifrado automático a nivel de campo del lado del cliente no admiten ninguna operación de lectura o escritura que requiera el cifrado de los siguientes tipos de valores:
El cifrado no oculta adecuadamente la información de tipo para estos valores.
El cifrado automático a nivel de campo tampoco admite operaciones de lectura o escritura en un campo determinista donde la operación compara el campo cifrado con los siguientes tipos de valores:
doubledecimal128boolobject