Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Gerenciamento de collection criptografada

Nesta página

  • Visão geral
  • collection de metadados
  • Descartando collection criptografadas
  • Custos de Armazenamento
  • Custos de gravação
  • Inserir operações
  • Atualizar operações
  • Excluir operações
  • compactação da collection de metadados

É importante que você entenda os custos de desempenho e armazenamento da criptografia em nível de campo. Cada campo criptografado:

  • Adiciona gravações para inserir e atualizar operações.

  • Requer armazenamento adicional, pois o MongoDB mantém um índice de campo criptografado.

Esta seção lista as gravações por operação e explica como compactar índices de collection criptografados para minimizar os custos de gravação e armazenamento.

O Queryable Encryption introduz a capacidade de criptografar campo confidenciais em seu documento usando criptografia aleatória, enquanto ainda pode query os campo criptografados.

Com o Queryable Encryption, um determinado valor de texto simples sempre é criptografado para um texto cifrado diferente, enquanto ainda permanece consultável. Para habilitar essa funcionalidade, o Queryable Encryption usa três estruturas de dados:

  • Duas collection de metadados

  • Um campo em cada documento na collection criptografada chamado __safeContent__

Importante

É fundamental que essas estruturas de dados não sejam modificadas ou excluídas, ou os resultados da query estarão incorretos.

Quando você cria uma collection criptografada, o MongoDB cria duas collection de metadados:

  • enxcol_.<collectionName>.esc, denominado ESC

  • enxcol_.<collectionName>.ecoc, denominado ECOC

Exemplo

Se você criar uma collection chamada "clientes", o MongoDB criará as seguintes collection de metadados:

  • enxcol_.patients.esc

  • enxcol_.patients.ecoc

Quando você insere documento com um campo criptografado que pode ser consultado, o MongoDB atualiza a collection de metadados para manter um índice que permite a consulta. O campo se torna um "campo indexado". Isso tem um custo em armazenamento e velocidade de gravação para cada um desses campos.

Ao descartar uma collection criptografada, elimine as collection de metadados associadas enxcol_.<collectionName>.esc e enxcol_.<collectionName>.ecoc imediatamente em seguida. Caso contrário, recriar a collection com o mesmo nome coloca a collection de metadados em um estado conflitante que consome um excesso de espaço de armazenamento e degrada o desempenho do CRUD.

Os custos de armazenamento e gravação aumentam com base no número de campos indexados por documento.

Importante

Espere que uma Queryable Encryption tenha 2 a 3 vezes os requisitos de armazenamento do documento, para levar em conta a collection de metadados. Por exemplo, uma collection de 1 GB pode ter um requisito de armazenamento de 2 a 3 GB.

Ao inserir um documento, cada campo indexado exige duas gravações adicionais em collection de metadados.

  • Uma gravação para ESC

  • Uma gravação para ECOC

Exemplo

A inserção de um documento com dois campos indexados requer:

  • Uma gravação na coleção criptografada.

  • quatro gravações na collection de metadados.

Ao atualizar um documento, cada campo indexado exige duas gravações adicionais para collection de metadados.

  • Uma gravação para ESC

  • Uma gravação para ECOC

Exemplo

Atualizar um documento com dois campos indexados requer:

  • Uma gravação na coleção criptografada.

  • quatro gravações na collection de metadados.

Ao excluir um documento, os campos indexados não exigem gravações adicionais.

À medida que você insere ou atualiza documento, a collection de metadados muda e cresce. A compactação da collection de metadados remove a collection de metadados e reduz seu tamanho.

Importante

Você deve executar manualmente a compactação da collection de metadados. A compactação só funciona em clientes configurados para Queryable Encryption.

Executar a compactação quando o tamanho do ECOC exceder 1 GB.

Você pode verificar o tamanho de suas coleções utilizando mongosh e emitindo o comando db.collection.totalSize() .

Exemplo

Neste exemplo, a collection criptografada é chamada de "pacients".

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

Para executar a compactação da coleta de metadados, utilize o mongosh e execute o comando db.collection.compactStructuredEncryptionData() para reduzir o tamanho das coletas de metadados.

Exemplo

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,
...
}
← Criptografia de campo e consultabilidade