Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
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 crucial que estas estructuras de datos no se modifiquen ni borren, de lo contrario, los resultados de las queries 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

Insertar un documento con dos campos indexados 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

Borrar un documento con dos campos indexados 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.

Deberías ejecutar la compactación de índices 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

Debes configurar tu cliente para Queryable Encryption con el fin de ejecutar la compactación de índices.

Para ejecutar la compactación de índice, utiliza mongosh y ejecuta el comando db.collection.compactStructuredEncryptionData() 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