Overview
Tenga en cuenta estas limitaciones y restricciones antes de habilitar Queryable Encryption. Algunas operaciones no son compatibles y otras se comportan de manera diferente.
Búsqueda de Atlas
Queryable Encryption no es compatible con MongoDB Atlas búsqueda.
Limitaciones de soporte de MongoDB
Al habilitar Queryable Encryption en una colección, se eliminan los campos de algunos comandos de diagnóstico y se omiten algunas operaciones del registro de las query. Esto limita los datos disponibles para los ingenieros de soporte de MongoDB, especialmente cuando analizan el rendimiento de las query. Para medir el impacto de las operaciones en las colecciones cifradas, utiliza una herramienta de supervisión de rendimiento de aplicaciones de terceros para recopilar métricas.
Para más detalles, consulte la sección restricción.
factor de contención
El factor de contención es una configuración que ayuda a ajustar el rendimiento según el número de operaciones concurrentes. Cuando no está configurado, la contención utiliza un valor por defecto de
8que proporciona un alto rendimiento para la mayoría de las cargas de trabajo.
Puede configurar el factor de contención solo cuando especifique un campo para encriptar. Una vez que especifiques un campo para el cifrado, el factor de contención no se puede cambiar.
Para obtener más información, consulta Configurar factor de contención.
Compactación manual de la colección de metadatos
Ejecuta manualmente la compactación de la colección de metadatos cuando tus colecciones de metadatos superen los 1 GB. La compactación reduce el tamaño de las colecciones de metadatos asociadas con campos cifrados, y mejora el rendimiento.
Modificación de encryptedFieldsMap
No modifiques el encryptedFieldsMap que se pasa a tu MongoClient. Hacerlo puede resultar en un comportamiento inesperado e incorrecto al consultar.
Soporte para operaciones de lectura y escritura
El mongod almacena únicamente BinData cifrados y aplica cualquier expresión de agregación u operador del query que especifique un campo cifrado al valor BinData. Aunque la expresión u operador puede admitir BinData campos, el valor resultante puede ser incorrecto o inesperado en comparación con emitir la misma expresión u operador contra el valor descifrado. El mongod lanza un error si la expresión u operador no soporta valores BinData.
restricción
Para mejorar la seguridad, Queryable Encryption redacta campos de algunos comandos de diagnóstico en colecciones cifradas y omite ciertas operaciones del registro de consultas. Una colección cifrada es cualquier colección con la opción encryptedFields.
Restricción de query Log y perfilador de base de datos
Las operaciones CRUD siguientes se omiten del registro de la consulta de operaciones lentas y del perfilador de base de datos system.profile colección cuando las ejecutas en una colección cifrada.
El comando
cleanupStructuredEncryptionData
Restricción de salida de la etapa de comando y agregación
El comando collStats y la etapa de agregación $collStats:
Omit
"queryExecStats"Omit
"latencyStats"Redacte
"WiredTiger", si está presente, para incluir solo el campourl.
El comando currentOp y la etapa de agregación $currentOp:
Omitir todos los campos después de
"command".Redactar
"command"para incluir solo el primer elemento,$comment, y$db.
El comando top solo devuelve el nombre de la colección de las colecciones cifradas.
La etapa de agregación $planCacheStats omite operaciones contra colecciones cifradas, aunque las operaciones se almacenan en caché como de costumbre.
Soporte de topología
Se admiten sets de réplicas y clústeres.
Las implementaciones autónomas no están soportadas
Las lecturas secundarias no son compatibles
particionado
Las colecciones de metadatos no deben estar particionadas
Las claves de fragmento no deben ser campos cifrados
Para las transacciones de clúster que utilizan Queryable Encryption, se debe establecer readConcern en
snapshot.
CRUD
Queryable Encryption no admite operaciones de actualizar multinivel de documento.
db.collection.updateMany()no es compatible.Queryable Encryption no admite operaciones de actualización o eliminación de múltiples instrucciones. No se admite un
db.collection.bulkWrite()con más de una operación de actualización o eliminación.Queryable Encryption limita los argumentos
db.collection.findAndModify().fieldsno está permitidonewdebe ser falso
Al realizar una operación de upsert, cualquier campo cifrado en el filtro se excluye de la inserción.
Colecciones
No se puede utilizar el cifrado a nivel de campo del lado del cliente con el cifrado consultable en la misma colección.
Queryable Encryption no admite la migración desde colecciones cifradas con cifrado a nivel de campo del lado del cliente. Debe descifrar sus documentos e insertarlos uno por uno.
Queryable Encryption no admite la migración automática desde una colección no encriptada. Debe insertar los documentos uno por uno.
Actualmente, Queryable Encryption solo admite nuevas colecciones. No puedes agregar ni remover Queryable Encryption a colecciones existentes.
No puedes renombrar una colección con campos cifrados.
No puede especificar
jsonSchemaendb.createCollection()al crear una colección de Queryable Encryption si eljsonSchemacontiene la palabra claveencrypt.Puede especificar tanto
encryptedFieldscomojsonSchemaparadb.createCollection()siempre que su jsonSchema no contenga validación para campos cifrados.
Queryable Encryption no admite Vistas, colecciones de series de tiempo o colección con tamaño fijo.
Queryable Encryption no admite Índices TTL ni Índices únicos.
No se puede deshabilitar la validación de
jsonSchema.Cuando una colección utiliza la opción
encryptedFields:No se puede establecer
validationLevelennone.No se puede establecer
validationActionenwarn.
Descartar Colección
Descartar colecciones de un
MongoClientque no está configurado para Cifrado Interrogable no descarta las colecciones de metadatos asociadas.mongodregistra una advertencia si elimina una colección con campos cifrados antes de eliminar las colecciones de metadatos.
Tip
Al descartar una colección con un MongoClient configurado para Queryable Encryption, los drivers compatibles descartan también las colecciones de metadatos asociadas.
Crear colección
Siempre cree explícitamente cualquier colección que utilice Queryable Encryption. La creación implícita de colecciones no crea los índices necesarios ni colecciones de metadatos, lo que resulta en un rendimiento deficiente en las consultas.
Tipos de consulta
El tipo de query que especifiques para un campo al crear la colección en encryptedFieldsMap es inmutable. No puedes añadir nuevos tipos de consulta a un campo existente, ni puedes cambiar el tipo de consulta existente.
Nombres de campos cifrados
Los nombres de campos cifrados son inmutables. Por ejemplo, si especificas ssn como un campo para cifrar, no puedes $rename el nombre del campo a taxPayerID.
Vistas
Las aplicaciones no pueden confiar en la validación de cifrado automático para evitar consultas no compatibles en vistas de colecciones con campos cifrados.
Las consultas sobre vistas en colecciones que contienen valores cifrados con Queryable Encryption pueden devolver resultados inesperados o incorrectos si el pipeline de agregación de la vista subyacente o la query refiere a campos cifrados. Si creas una vista en una colección que contiene valores cifrados con Queryable Encryption, evita operar en campos cifrados para mitigar el riesgo de resultados inesperados o incorrectos.
Para obtener más información sobre las vistas, consulte vistas.
Intercalación
Queryable Encryption ignora tanto las intercalaciones especificadas por el usuario como las intercalaciones por defecto de la colección. El cifrado oculta el valor del campo e impide el comportamiento normal de la intercalación. Las consultas sensibles a la intercalación en campos cifrados pueden arrojar resultados inesperados o incorrectos.
Para obtener más información sobre las intercalaciones, consulte el Documento de intercalación.
Los drivers compatibles con Queryable Encryption tienen una lista de operaciones admitidas para el cifrado automático. Para operaciones de lectura y guardar no soportadas, la librería de soporte subyacente no puede analizar el catálogo de colecciones para identificar la intercalación por defecto. Por lo tanto, las aplicaciones no pueden confiar en la validación de Queryable Encryption para evitar la consulta de campos cifrados con valores por defecto de intercalación.
Índices en campos cifrados
No cree índices en campos cifrados. La creación de índices en campos cifrados que utilizan Queryable Encryption afecta negativamente el rendimiento. En su lugar, puedes crear un índice en el campo __safeContent__ para admitir consultas en campos cifrados.
Unique Indexes
Los índices únicos no pueden garantizar la unicidad si la clave del índice especifica algún campo cifrado.
Queryable Encryption siempre genera un valor cifrado diferente, incluso para la misma entrada. El servidor considera cada valor cifrado como único, incluso aunque el valor descifrado pueda no serlo. Esto significa que, incluso si una colección utiliza una restricción única impuesta por un índice en los campos, la colección aún puede contener múltiples documentos con valores de texto sin formato duplicados para ese campo.
Los drivers compatibles con Queryable Encryption configurados para el cifrado automático admiten algunas operaciones para el cifrado automático. Para las operaciones de lectura y guardado no compatibles, la librería subyacente no puede analizar el catálogo de índices para identificar un campo dado como único. Las aplicaciones no pueden depender de la validación de cifrado automático para evitar violaciones de restricciones de unicidad en campos cifrados aleatoriamente.
El campo _id
No se puede configurar Queryable Encryption para cifrar el campo _id porque depende del valor autogenerado por MongoDB.
Soporte para queries de lectura/guardar
El cifrado automático admite un subconjunto de comandos, operadores del query, operadores de actualizar, etapas de agregación y expresiones de agregación. Para la lista de operaciones admitidas, consulte Operaciones admitidas para el cifrado automático.