Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / / /

Coleções criptografadas

Nesta página

  • Visão geral
  • collection de metadados
  • Impacto da query de igualdade e intervalo
  • Custos de gravação para campos de query de igualdade
  • Inserir operações
  • Atualizar operações
  • Excluir operações
  • Custos de armazenamento para campos de query de igualdade
  • Melhores práticas
  • compactação da collection de metadados
  • Agendamento de compactação de metadados
  • Executando compactação de metadados

A criptografia em nível de campo vem com custos de desempenho e armazenamento. Cada campo que você escolher para criptografar:

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

  • Requer armazenamento adicional, pois o MongoDB mantém um índice de campos criptografados para melhorar o desempenho da query.

Esta seção resume o armazenamento e o impacto de gravação da criptografia de coleções e explica como compactar índices de coleção criptografados para minimizar esses custos. Se você deseja criptografar campos e configurá-los para consulta, consulte Campos criptografados e consultas ativadas.

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__

Aviso

É 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.

Importante

Quando você descartar uma coleção criptografada, descarte as coleções de metadados associadas imediatamente em seguida:

  • enxcol_.<collectionName>.esc

  • enxcol_.<collectionName>.ecoc

Caso contrário, recriar a coleção com o mesmo nome coloca as coleções de metadados em um estado conflitante que consome excesso de espaço de armazenamento e degrada o desempenho do CRUD.

Queries de igualdade acarretam custos adicionais fixos para operações de armazenamento e gravação. Os custos de query de faixa dependem dos parâmetros do campo que pode ser consultado. A delimitação hermética dessas queries diminui muito o impacto no desempenho .

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.

Antes de qualquer compactação de metadados, ESC e ECOC contêm um documento de metadados para cada campo/par de valor de cada campo indexado. A indexação de um par de campo/valores criptografados em 1000 documentos requer 1000 documentos nos ESC e 1000 documentos no ECOC.

Observação

Uma coleção do Queryable Encryption que criptografa todos os campo pode levar de 2a3 vezes o espaço de armazenamento, levando em conta as coleções de metadados. Por exemplo, uma collection 1 GB pode ter um requisito de armazenamento de 2a3 GB.

  • Não criptografe campos que não precisam dele. A maioria dos dados exige apenas que um pequeno subconjunto de campos seja criptografado, como aqueles que contêm informações de identificação pessoal.

  • Não habilite queries de intervalo em um campo se queries de igualdade forem suficientes para seus usuários.

  • Para campos criptografados com consultas de intervalo ativadas, revise a configuração do campo , especialmente os parâmetros mínimo, máximo e de precisão . A definição de limites rígidos para queries de intervalo diminui muito o impacto no desempenho desses campos.

  • Modele seus dados e faça um protótipo para determinar o armazenamento real e os aumentos de gravação para seu sistema.

À medida que você insere ou atualiza documentos, as coleções de metadados mudam e crescem. A compactação da coleção de metadados vazia o ECOC e reduz o tamanho do ESC.

Importante

No pior caso, a execução da compactação de metadados revela o número de pares de campo/valor únicos inseridos em todos os documentos desde a compactação anterior.

Para obter detalhes sobre as informações exatas revelados pela compactação de metadados, consulte "Seção 6: Análise Theoretical" e "Seção 9: Diretivas" noDocumento técnico sobre Queryable Encryption do MongoDB .

Como prática recomendada, acompanhe as seguintes informações:

  • encfields: o número de campos criptografados por documento.

  • docinserts: o número de documentos inseridos desde a última compactação.

  • valinserts: o número de pares de campo/valor únicos inseridos desde a última compactação.

Para reduzir o tamanho da coleção de metadados ESC em pelo menos t documentos, execute a compactação de metadados quando a fórmula a seguir for satisfeita:

(encfields docinserts) - valinsertst

O número de campos criptografados por documento multiplicado pelo número de inserções desde a última compactação, menos o número de pares de campo/valor inseridos em todos os documentos desde a última compactação, deve ser maior ou igual ao número de documentos a serem removidos do ESC.

Por exemplo, em uma collection com seis campos criptografados, você pode reduzir o tamanho do ESC em pelo menos 1000 documentos quando o total de documentos inseridos e os pares de campo/valor únicos inseridos desde a última compactação atenderem às seguintes condições:

(6 docinserts) - valinserts1000

A fórmula seria satisfeita, por exemplo, se 200 documentos fossem inseridos desde a última compactação com um total de 200 pares de campo/valor únicos em todos os documentos, ou se 400 documentos fossem inseridos desde a última compactação com 700 pares de campo/valor únicos.

Você deve executar a compactação de metadados manualmente. Utilize o mongosh e execute o comando db.collection.compactStructuredEncryptionData() :

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,
...
}

Você pode verificar o tamanho de uma coleção de metadados utilizando mongosh e executando o comando db.collection.totalSize() .

Exemplo

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

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

Voltar

Criptografar collections na criação