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

Gestión de colecciones cifradas

En esta guía, puedes aprender a gestionar tus colecciones cifradas y los costes de almacenamiento y escritura de Queryable Encryption.

Queryable Encryption introduce la capacidad de cifrar campos sensibles en tus documentos utilizando cifrado aleatorizado, al mismo tiempo que puedes consultar los campos cifrados.

Con Queryable Encryption, un valor en texto sin formato dado siempre se cifra en un texto cifrado diferente, aunque sigue siendo consultable. Para habilitar esta funcionalidad, Queryable Encryption utiliza cuatro estructuras de datos:

  • Tres colecciones de metadatos

  • Un campo en cada documento de la colección cifrada llamado __safeContent__

Importante

Es fundamental que estas estructuras de datos no se modifiquen ni eliminen, o los resultados de la consulta serán incorrectos.

Cuando creas una colección cifrada usando Queryable Encryption, MongoDB crea tres colecciones de metadatos:

  • enxcol_.<collectionName>.escllamado ESC

  • enxcol_.<collectionName>.eccllamado ECC

  • enxcol_.<collectionName>.ecocllamado ECOC

Ejemplo

Si crea una colección llamada "pacientes", MongoDB crea las siguientes colecciones de metadatos:

  • enxcol_.patients.esc

  • enxcol_.patients.ecc

  • enxcol_.patients.ecoc

Cuando se insertan documentos con campos cifrados sobre los que se desea consultar, MongoDB actualiza las colecciones de metadatos para mantener un índice que permita la query. MongoDB se refiere a esto como "campo indexado". Esto tiene un costo en términos de almacenamiento y velocidad de escritura.

Los costos de almacenamiento y escritura aumentan según la cantidad de campos indexados por documento.

Importante

Presentación técnica

La recomendación de MongoDB durante la vista previa técnica es esperar de dos a tres veces el requisito de almacenamiento para una colección de Queryable Encryption y las colecciones de metadatos asociadas. Por ejemplo, una colección de 1 GB puede requerir entre 2 y 3 GB de almacenamiento para las colecciones de metadatos asociadas.

Esta orientación será ajustada en una futura actualización.

Al insertar un documento, cada campo indexado requiere dos escrituras en las colecciones de metadatos.

  • Una grabación sobre ESC

  • Una grabación sobre ECOC

Ejemplo

Para insertar un documento con dos campos indexados se requiere:

  • Un guardado en la colección cifrada.

  • Cuatro escrituras en las colecciones de metadatos.

Al actualizar un documento, cada campo indexado requiere cuatro escrituras en las colecciones de metadatos.

  • Una grabación sobre ESC

  • Una grabación sobre ECC

  • Dos guardados a ECOC

Ejemplo

Actualizar un documento con dos campos indexados requiere:

  • Un guardado en la colección cifrada.

  • Ocho escribe en las colecciones de metadatos.

Al borrar un documento, cada campo indexado requiere dos guardados en las colecciones de metadatos.

  • Una grabación sobre ECC

  • Una grabación sobre ECOC

Ejemplo

Para eliminar un documento con dos campos indexados se requiere:

  • Una operación de guardar en la colección cifrada.

  • Cuatro escrituras en las colecciones de metadatos.

Importante

Presentación técnica

Debes ejecutar la compactación de índices durante la vista previa técnica. MongoDB planea ejecutar automáticamente la compactación de índices en una próxima versión.

A medida que se insertan, actualizan y borran documentos, las colecciones de metadatos cambian y crecen. La compactación de índices es un proceso que recorta las colecciones de metadatos y reduce su tamaño.

Debe ejecutar la compactación de índice cuando el tamaño de ECOC supere 1 GB.

Puedes comprobar el tamaño de tus colecciones usando mongosh y ejecutando el comando db.collection.totalSize().

Ejemplo

En este ejemplo, la colección cifrada se llama "pacientes".

db.enxcol_.patients.ecoc.totalSize()
1407960328

Importante

Debe configurar su cliente para cifrado consultable para ejecutar la compactación de índice.

Para ejecutar la compactación de índice, utilice y ejecute mongosh el db.collection.compactStructuredEncryptionData() comando para reducir el tamaño de las colecciones de metadatos.

Ejemplo

const eDB = "encryption"
const eKV = "__keyVault"
const secretDB = "records"
const secretCollection = "patients"
const localKey = fs.readFileSync("master-key.txt")
const localKeyProvider = { key: localKey }
const queryableEncryptionOpts = {
kmsProviders: { local: localKeyProvider },
keyVaultNamespace: `${eDB}.${eKV}`,
}
const encryptedClient = Mongo("localhost:27017", queryableEncryptionOpts)
const encryptedDB = encryptedClient.getDB(secretDB)
const encryptedCollection = encryptedDB.getCollection(secretCollection)
encryptedCollection.compactStructuredEncryptionData()
{
"stats": {
...
},
"ok": 1,
...
}

Volver

Campos y query

En esta página