Docs Menu
Docs Home
/ /

Operaciones compatibles para Queryable Encryption

Esta página documenta los tipos de datos, comandos, operadores de consulta, operadores de actualización, etapas de agregación y expresiones de agregación específicos compatibles con los controladores compatibles con cifrado consultable. Describe el comportamiento de las operaciones que utilizan cifrado automático y cifrado explícito.

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 BinData Blob. 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 Queryable Encryption analizan operaciones de lectura y escritura para operadores o expresiones que no admiten valores BinData.

El cifrado consultable admite la configuración de equality consultas para todos los tipos de BSON, excepto los siguientes:

  • array

  • decimal: Decimal (IEEE 754 Decimal128)

  • double: Doble (IEEE 754 Binario64)

  • object

El cifrado consultable admite la configuración de range consultas para los siguientes tipos de BSON:

  • date: Fecha y hora UTC (Int64)

  • decimal: Decimal (IEEE 754 Decimal128)

  • double: Doble (IEEE 754 Binario64)

  • int: entero de 32bits

  • long: entero de 64bits

  • El cifrado consultable no admite operaciones de actualización o eliminación de varios documentos. db.collection.updateMany() y db.collection.bulkWrite() con más de una operación de actualización o eliminación no son compatibles.

  • El cifrado consultable limita db.collection.findAndModify() argumentos.

    • fields no está permitido

    • new debe ser falso

  • Al realizar una operación de inserción y actualización, todos los campos cifrados en el filtro se excluyen de la inserción.

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:

Los siguientes comandos no requieren cifrado automático. Los controladores oficiales configurados para cifrado automático pasan estos comandos directamente mongod a:

Emitir cualquier otro comando a través de un controlador compatible configurado para el cifrado automático devuelve 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.

Los controladores configurados para el cifrado automático admiten un conjunto limitado de operadores de consulta cuando se emiten contra un campo consultable cifrado.

La consulta de campos no cifrados o de campos cifrados con un tipo de consulta compatible devuelve datos cifrados que luego se descifran en el cliente.

El cifrado consultable actualmente admite los siguientes tipos de consultas:

  • none

  • equality

  • range

  • prefix

  • suffix

  • substring

Si el tipo de query no está especificado, es por defecto none. Si el tipo de query es none, MongoDB cifra el campo y los clientes no pueden consultarlo.

Importante

Soporte de comparación

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

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

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

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

Los campos configurados para queryType: "equality" admiten las siguientes expresiones:

Las consultas de rango convierten implícitamente las consultas de igualdad a $lte $gtey. Por lo tanto, los campos configurados para queryType: "range" admiten todas las expresiones anteriores, así como las siguientes:

Las consultas que especifican cualquier otro operador de consulta contra un campo cifrado devuelven un error.

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

Al utilizar un MongoClient configurado para Queryable Encryption, los siguientes operadores del query lanzan un error, incluso si se ejecutan en un campo no cifrado:

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 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, el filtro de consulta debe utilizar únicamente operadores admitidos en esos campos.

Se admiten actualizaciones de estilo de reemplazo; sin embargo, si el documento de reemplazo contiene un Timestamp(0,0) dentro de un campo cifrado de nivel superior, el cifrado consultable generará un error. El (0,0) valor indica que mongod debe generar la marcamongod de tiempo. no puede generar campos cifrados.

Los controladores compatibles configurados para el cifrado automático 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.

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

Los controladores compatibles configurados para el cifrado automático admiten las siguientes etapas del proceso de agregación:

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.

A partir de MongoDB,8.1 se pueden referenciar varias colecciones cifradas en una etapa. Sin $lookup embargo, $lookup no admite:

  • Utilizando un campo cifrado como campo de unión en el localField o foreignField.

  • Usar cualquier campo en un arreglo cifrado. Un arreglo se considera cifrado si contiene algún elemento cifrado.

    • Por ejemplo, no puede utilizar ningún campo dentro de la $lookup matriz resultante de la operación.

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

El cifrado automático no admite fuentes de metadatos de agregación "sin conexión", que leen metadatos que no pertenecen a una colección en particular, como:

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

Los controladores compatibles configurados para el cifrado automático admiten las siguientes expresiones contra campos cifrados configurados para consultas de igualdad:

Los controladores compatibles configurados para el cifrado automático admiten las siguientes expresiones contra campos cifrados configurados para consultas prefix, suffix o substring:

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 hace referencia a 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 $$CURRENT vincular.

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

El primer argumento de la expresión es un campo cifradoy

  • 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 o escritura que requiera cifrar los siguientes tipos de valores:

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

El cifrado consultable no admite el cifrado automático en campos dentro de una matriz de documentos.

El cifrado consultable no admite operaciones de lectura o escritura en un campo cifrado donde la operación compara el campo cifrado con los siguientes tipos de valores:

  • array

  • object

Volver

Referencia