Gerenciamento de collection criptografada
Nesta página
Neste guia, você pode aprender como managed sua collection criptografadas e os custos de armazenamento e gravação da Queryable Encryption.
Visão geral
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 quatro estruturas de dados:
Três 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.
collection de metadados
Quando você cria uma collection criptografada usando o Queryable Encryption, o MongoDB cria três collection de metadados:
enxcol_.<collectionName>.esc
, denominadoESC
enxcol_.<collectionName>.ecc
, denominadoECC
enxcol_.<collectionName>.ecoc
, denominadoECOC
Exemplo
Se você criar uma collection chamada "clientes", o MongoDB criará as seguintes collection de metadados:
enxcol_.patients.esc
enxcol_.patients.ecc
enxcol_.patients.ecoc
Quando você insere documento com campo criptografados que deseja consultar, o MongoDB atualiza a collection de metadados para manter um índice que permite fazer query. O MongoDB se refere a isso como "campo indexado". Isso tem um custo de armazenamento e velocidade de gravação.
Custos de Armazenamento
Os custos de armazenamento e gravação aumentam com base no número de campos indexados por documento.
Importante
Pré-visualização técnica
A orientação do MongoDB durante a visualização técnica é esperar duas a três vezes o requisito de armazenamento para uma collection Queryable Encryption e collection de metadados associadas. Por exemplo, uma collection de 1 GB pode ter um requisito de armazenamento de 2 a 3 GB para collection de metadados associadas.
Essa orientação será ajustada em uma versão futura.
Custos de gravação
Inserir operações
Ao inserir um documento, cada campo requer duas gravações 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.
Atualizar operações
Ao atualizar um documento, cada campo indexado exige quatro gravações em collection de metadados.
Uma gravação para
ESC
Uma gravação para
ECC
Duas gravações em
ECOC
Exemplo
Atualizar um documento com dois campos indexados requer:
Uma gravação na coleção criptografada.
Oito gravações nas coleções de metadados.
Excluir operações
Ao excluir um documento, cada campo indexado requer duas gravações na collection de metadados.
Uma gravação para
ECC
Uma gravação para
ECOC
Exemplo
Excluir um documento com dois campos indexados requer:
Uma gravação na collection criptografada.
quatro gravações na collection de metadados.
Compactação de Índices
Importante
Pré-visualização técnica
Você é obrigado a executar a compactação de índice durante a visualização técnica. O MongoDB planeja executar automaticamente a compactação de índices em uma versão futura.
À medida que você insere, atualiza e exclui documento, a collection de metadados muda e cresce. A compactação de índice é um processo que remove a collection de metadados e reduz seu tamanho.
Você deve executar a compactação de índice quando o tamanho de 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
Importante
Você deve configurar seu cliente para que o Queryable Encryption execute a compactação do índice.
Para executar a compactação de índice, use mongosh
e execute o comando db.collection.compactStructuredEncryptionData()
para reduzir o tamanho das collections 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, ... }