Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Cifrado automático a nivel de campo en el lado del cliente

Soporte de lectura/escritura con cifrado automático a nivel de campo

Nota

Característica de la empresa

La funcionalidad automática del cifrado a nivel de campo solo está disponible en MongoDB Enterprise 4.2 o posterior y en los clústeres de 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 los controladores compatibles con 4.2+ configurados para el cifrado automático a nivel de campo del lado del cliente.

MongoDB almacena los campos cifrados a nivel de campo en el lado del cliente como un BinData blob. Las operaciones de lectura y escritura realizadas contra el valor cifrado BinData pueden tener un comportamiento inesperado o incorrecto en comparación con la ejecución de esa misma operación contra el valor descifrado. Algunas operaciones tienen soporte estricto para el tipo BSON, donde ejecutarlas contra un valor BinData produce un error.

  • Los drivers oficiales compatibles con la versión 4.2+ que utilizan cifrado automático a nivel de campo del lado del cliente interpretan operaciones de lectura/escritura para operadores o expresiones que no admiten valores BinData o que tienen un comportamiento anormal cuando se emiten en contra de valores BinData.

  • Las aplicaciones que utilizan cifrado a nivel de campo explícito (manual) pueden utilizar esta página como guía para realizar operaciones de lectura/guardado en campos cifrados.

Los drivers oficiales compatibles con MongoDB 4.2+ admiten el cifrado automático a nivel de campo en el lado del cliente con los siguientes comandos:

Para cualquier comando admitido, los controladores compatibles con la versión 4.2+ generan un error si el comando usa un operador no compatible, una etapa de agregación o una expresión de agregación:

Los siguientes comandos no requieren cifrado automático. Los controladores compatibles oficiales de MongoDB 4.2+ configurados para cifrado automático a nivel de campos del lado del cliente pasan estos comandos directamente al mongod:

Emitir cualquier otro comando a través de un controlador compatible con la versión 4.2+ configurado para el cifrado automático de datos a nivel de campo en el lado del cliente generará un error.

[1] Aunque el cifrado automático a nivel de campo en el lado del cliente no cifra el comando getMore, la respuesta al comando puede contener valores de campo cifrados. Las aplicaciones configuradas con las opciones correctas de cifrado de campo a nivel de cliente descifran automáticamente esos valores. Las aplicaciones sin las opciones de cifrado correctas solo ven los valores cifrados.

Los controladores oficiales compatibles con 4.2+ configurados para 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 queries que comparan un campo cifrado con null o una expresión regular siempre generan un error incluso si se utiliza un operador del query compatible. Las consultas que emiten estos operadores contra un campo cifrado aleatoriamente aleatoriamente generan un error.

El operador $exists tiene un comportamiento normal cuando se ejecuta tanto en campos cifrados determinísticamente como de manera aleatoria.

Las queries que especifican cualquier otro operador del query contra un campo cifrado devuelven un error.

Los siguientes operadores de consulta generan un error incluso si no se emiten contra un campo cifrado:

Los drivers oficiales compatibles con la versión 4.2 y posteriores, configurados para el cifrado a nivel de campo del lado del cliente, permiten los siguientes operadores de actualización cuando se aplican a campos cifrados determinísticamente:

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 un arreglo dentro de una ruta cifrada.

  • La operación de actualización utiliza la sintaxis de la 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.

Los drivers oficiales compatibles de MongoDB 4.2+ configurados para el cifrado automático del lado del cliente a nivel de campo 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 que mongod debe generar la marca de tiempo. Dado mongod que no puede generar campos cifrados, la marca de tiempo resultante no estaría cifrada.

  • Insertar un documento sin un campo cifrado _id si el esquema automático configurado especifica un _id campo cifrado. Dado que genera mongod automáticamente un ObjectId sin cifrar, omitir _id en los documentos genera documentos que no cumplen con las reglas de cifrado automático.

  • Insertar un documento con un arreglo asociado a un campo cifrado determinísticamente. El cifrado automático del lado del cliente a nivel de campo no admite el cifrado determinista de arreglos.

Los controladores oficiales compatibles con MongoDB 4.2+ 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:

Los pipelines de agregación que operan en colecciones configuradas para el cifrado automático que especifican cualquier otra fase 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 admitida debe especificar solo los operadores del query admitidos y las expresiones de agregaciónadmitidas.

$group tiene los siguientes comportamientos específicos de cifrado a nivel de campo del lado del cliente:

  • Admite la agrupación en campos cifrados de forma determinista.

  • No admite acumuladores aritméticos en campos cifrados.

  • Admite $addToSet acumuladores y en campos cifrados. No $push admite coincidencias en la matriz resultante.

El cifrado automático a nivel de campo del lado del cliente admite el $lookup y el $graphLookup solo si la colección from coincide con la colección en la que se ejecuta la agregación (es decir, operaciones de auto búsqueda).

$lookup y $graphLookup etapas que hacen referencia a una colección from diferente devuelven un error.

Los controladores oficiales compatibles con la versión 4.2+ configurados para el cifrado automático a nivel de campo en el lado del cliente permiten etapas de agregación que utilizan las siguientes expresiones sobre campos cifrados determinísticamente:

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

$addFields : {
"valueWithUnknownEncryption" : {
$cond : {
if : { "$encryptedField" : "value" },
then : "$encryptedField",
else: "unencryptedValue"
}
}
},
{
$match : {
"valueWithUnknownEncryption" : "someNewValue"
}
}

La expresión crea un nuevo campo que referencia un campo cifrado y opera sobre ese nuevo campo en la misma expresión.

{
$eq : [
{"newField" : "$encryptedField"},
{"newField" : "value"
]
}

La expresión hace referencia al prefijo de un campo cifrado dentro de la expresión de comparación.

{ $eq : [ "$prefixOfEncryptedField" , "value"] }

El resultado de la expresión se compara con un campo cifrado.

{
$eq : [
"$encryptedField" ,
{ $ne : [ "field", "value" ] }
]
}

La expresión vincula una variable a un campo cifrado o intenta volver a vincular $$CURRENT.

{
$let: {
"vars" : {
"newVariable" : "$encryptedField"
}
}
}

El primer argumento de la expresión es un campo cifrado, y

  • El segundo argumento de la expresión no es un literal de arreglo

    -O-

  • El segundo argumento de la expresión es un campo cifrado.

{
$in : [
"$encryptedField" ,
"$otherEncryptedField"
]
}

Los controladores oficiales compatibles con MongoDB 4.2+ configurados para cifrado automático a nivel de campo del lado del cliente no admiten ninguna operación de lectura ni 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 permite operaciones de lectura o escritura en un campo deterministamente donde la operación compara el campo cifrado con los siguientes tipos de valor:

  • double

  • decimal128

  • bool

  • object

Volver

Reglas de cifrado automático

En esta página