Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /
/ / /

Operaciones admitidas para cifrado automático

Esta página documenta los comandos específicos, el operador del query, los operadores de actualización, las etapas y las expresiones de agregación admitidas por los drivers configurados para el cifrado automático a nivel de campo del lado del cliente.

Los controladores que utilizan cifrado a nivel de campo a nivel de cliente automático admiten los siguientes comandos:

Para cualquier comando admitido, los drivers devuelven un error si el comando utiliza un operador, una etapa de agregación o una expresión de agregación no admitidos. Para obtener una lista completa de los operadores, etapas y expresiones admitidos, consulta las siguientes secciones de esta página:

  • Operadores del query compatibles

  • Operadores de actualización compatibles

  • Etapas admitidas de agregación

  • Expresiones de agregación admitidas

Los siguientes comandos no requieren cifrado automático. Los controladores configurados para el cifrado automático a nivel de campo del lado del cliente pasan estos comandos directamente al mongod:

Emitir cualquier otro comando a través de un driver configurado para el cifrado automático del lado del cliente a nivel de campo devuelve un error.

[1] Si bien el Cifrado Automático de Campos a Nivel de Campo (CSFLE) del lado del cliente no cifra el comando getMore, la respuesta al comando puede contener valores de campos cifrados.
  • Las aplicaciones configuradas con las opciones correctas de CSFLE descifran automáticamente esos valores.
  • Las aplicaciones que no tienen las opciones correctas de CSFLE solo ven los valores cifrados.

Los drivers configurados para cifrado a nivel de campo en el lado del cliente automático permiten los siguientes operadores del query cuando se aplican en campos cifrados determinísticamente:

Los queries que comparan un campo cifrado con null o una expresión regular siempre devuelven un error, incluso al utilizar un operador del query compatible. Las solicitudes que emiten estos operadores contra un campo aleatoriamente cifrado devuelven un error.

El operador $exists tiene un comportamiento normal cuando se utiliza tanto en campos cifrados determinísticamente como aleatoriamente.

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

Los siguientes operadores del query devuelven un error incluso si no se emiten en un campo cifrado:

Advertencia

Comportamiento inesperado con BinData

MongoDB almacena los campos cifrados a nivel de campo del lado del cliente como un blob BinData. Las operaciones de lectura y escritura realizadas sobre el valor cifrado BinData pueden tener un comportamiento inesperado o incorrecto en comparación con la realización de esa misma operación sobre el valor descifrado. Algunas operaciones tienen compatibilidad estricta con tipos BSON, y ejecutarlas contra un valor BinData devuelve un error.

  • Los drivers que utilizan el cifrado automático del lado del cliente a nivel de campo analizan las operaciones de lectura y escritura para operadores o expresiones que no admiten valores BinData o que tienen un comportamiento inesperado cuando se emiten contra valores BinData.

  • Las aplicaciones que utilizan cifrado de campo a nivel del lado del cliente explícito (manual) pueden utilizar esta página como orientación para emitir operaciones de lectura y escritura en campos cifrados.

Los drivers configurados para el cifrado 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 valor (0,0) indica que mongod debe generar la Marca de tiempo. Cuando el mongod no puede generar campos cifrados, la marca de tiempo resultante no está cifrada.

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

  • Insertar un documento con una matriz asociada a un campo cifrado de forma determinista. El cifrado automático del lado del cliente a nivel de campo no admite el cifrado determinista de arreglos.

Los controladores configurados para el Cifrado Automático de Campo a Nivel de Cliente permiten los siguientes operadores de actualización cuando se aplican a campos cifrados determinísticamente:

Cuando utilices el operador $rename en campos cifrados, el esquema JSON automático debe especificar los mismos metadatos de cifrado para los nombres de los campos de origen y destino.

Las actualizaciones que especifiquen cualquier otro operador de actualización a un campo cifrado devuelven un error.

Las operaciones de actualización con el siguiente comportamiento devuelven 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 query en campos cifrados determinísticamente, el filtro de consulta debe utilizar solo operadores compatibles en esos campos.

Los Drivers configurados para el cifrado a nivel de campo del lado del cliente soportan automáticamente las siguientes etapas del pipeline de agregación:

Los pipelines que operan sobre colecciones configuradas para cifrado automático y que especifican cualquier otra etapa devolverán un error.

Para cada etapa de pipeline soportada, MongoDB rastrea los campos que deben estar cifrados a medida que pasan por los pipelines compatibles y los marca para 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:

$group soporte:

  • Agrupación en campos cifrados determinísticamente.

  • Uso de $addToSet y $push acumuladores en campos cifrados.

$group no es compatible con:

  • Coincidencia en el arreglo devuelto por los acumuladores $addToSet y $push.

  • Acumuladores aritméticos en campos cifrados.

El cifrado automático del lado del cliente a nivel de campo 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 (específicamente, operaciones de auto-búsqueda).

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

No puedes realizar un $lookup desde un MongoClient habilitado para CSFLE en colecciones no cifradas.

Los drivers configurados para el cifrado a nivel de campo del lado del cliente automático permiten etapas de agregación utilizando las siguientes expresiones contra campos determinísticamente cifrados:

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 devuelven 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 pueden ser conocidas 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

    -OR-

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

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

Los drivers configurados para el cifrado automático del lado del cliente a nivel de campo (CSFLE) no admiten ninguna operación de lectura o guardado que requiera cifrar los siguientes tipos de valores:

El cifrado no oculta adecuadamente la información de tipo para estos valores.

La CSFLE automática también no admite operaciones de lectura o escritura en un campo cifrado de forma determinística donde la operación compara el campo cifrado con los siguientes tipos de valores:

  • array

  • bool

  • decimal128

  • double

  • object

Volver

Aplicación de un esquema

En esta página