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
/ /

Operaciones compatibles para Queryable Encryption

Esta página documenta los comandos específicos, operadores del query, operadores de actualizar, etapas de agregación y expresiones de agregación admitidas para drivers compatibles con Queryable Encryption.

Nota

Característica de la empresa

El cifrado automático está disponible en MongoDB Enterprise y MongoDB Atlas

MongoDB almacena los campos cifrados de Queryable Encryption 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 una estricta compatibilidad con el tipo BSON, por lo que ejecutarlas en un valor BinData genera un error. Los controladores oficiales compatibles con Queryable Encryption analizan las operaciones de lectura y escritura de operadores o expresiones que no admiten valores BinData, o que presentan un comportamiento anómalo cuando se utilizan con valores BinData.

Las aplicaciones que usan cifrado explícito pueden usar esta página como orientación para realizar operaciones de lectura y escritura en campos cifrados.

Los controladores compatibles con cifrado consultable admiten el cifrado automático con los siguientes comandos:

Para cualquier comando admitido, los controladores devuelven un error si el comando utiliza un operador, una etapa de agregación o una expresión de agregación no compatible. Para ver una lista completa de los operadores, etapas y expresiones compatibles, consulta las siguientes secciones:

  • 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 drivers oficiales configurados para el cifrado automático pasan estos comandos directamente al mongod:

Emitir cualquier otro comando a través de un driver compatible configurado para cifrado automático genera un error.

[1] Si bien el cifrado automático no cifra el comando getMore, la respuesta al comando puede contener valores de campo cifrados.
  • Las aplicaciones configuradas con las opciones de cifrado consultable correctas descifran automáticamente esos valores.
  • Las aplicaciones sin las opciones de cifrado correctas ven los valores cifrados.

Para las transacciones de clúster que utilizan Queryable Encryption, se debe establecer readConcern en snapshot.

Los drivers configurados para el cifrado automático admiten los siguientes operadores del query cuando se emiten contra un campo consultable cifrado:

Importante

Soporte de comparación

La comparación de un campo cifrado con otro campo cifrado fallará.

{$expr: {$eq: ["$encrypted1", "$encrypted2"]}}

Se admite la comparación de un campo cifrado con un valor de texto sin formato.

{$expr: {$eq: ["$encrypted1", "plaintext_value"]}}

Las consultas que comparan un campo cifrado con null o una expresión regular siempre arrojan un error, incluso si se utiliza un operador del query compatible.

El operador tiene un comportamiento normal cuando se emite contra campos $exists cifrados.

Las queries que especifican cualquier otro operador del query en un campo cifrado arrojan un error. Los siguientes operadores del query lanzarán un error incluso si no se ejecutan contra un campo cifrado cuando se use un MongoClient configurado para Queryable Encryption:

Los controladores configurados para el cifrado automático admiten los siguientes operadores de actualización cuando se emiten contra campos cifrados:

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 especifiquen un filtro de query en campos cifrados, el filtro de query debe usar solo operadores admitidos en esos campos.

Las actualizaciones de estilo reemplazo son compatibles, sin embargo, si el documento de reemplazo contiene un Timestamp(0,0) dentro de un campo cifrado de nivel superior, Queryable Encryption mostrará un error. El valor de (0,0) indica que el mongod debe generar la marca temporal. mongod no puede generar campos cifrados.

Los drivers compatibles configurados para cifrado automático no soportan 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. Dado que el mongod no puede generar campos cifrados, la marca de tiempo resultante no estaría cifrada.

El cifrado automático no admitirá etapas de agregación que lean de o escriban en colecciones adicionales. Estas fases son:

Los drivers compatibles configurados para el cifrado automático soportan las siguientes etapas del pipeline 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.

El cifrado automático admite $lookup y $graphLookup solo si la from colección coincide con la colección en la que se ejecuta la agregación. $lookup Las $graphLookup etapas y que hacen referencia a una from colección diferente devuelven un error.

El cifrado automático no soporta fuentes de metadatos de agregación “sin conexión”, que leen metadatos no específicos de una colección en particular, como por ejemplo:

El cifrado automático no admite la $planCacheStats etapa ya que el resultado puede contener información confidencial.

No puede realizar un $lookup desde una MongoClient con cifrado habilitado para consultas en colecciones no cifradas.

Los drivers compatibles configurados para cifrado automático admiten las siguientes expresiones en cualquier tipo de campo cifrado de consulta de igualdad:

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 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 configurados para el cifrado automático no admiten ninguna operación de lectura ni escritura que requiera cifrar los siguientes tipos de valores:

El Queryable Encryption no oculta adecuadamente la información de tipo de estos valores.

Queryable Encryption no admite operaciones de lectura ni escritura en un campo cifrado donde la operación compara el campo cifrado con los siguientes tipos de valores:

  • array

  • decimal128

  • double

  • object

Volver

Limitaciones de Queryable Encryption

En esta página