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

Suporte de leitura/gravação com criptografia automática de nível de campo

Nesta página

  • Comandos de leitura e gravação compatíveis
  • Operadores de query suportados
  • Operadores de atualização compatíveis
  • Operações de inserção sem suporte
  • Estágios de aggregation suportados
  • Tipos de campo não suportados

Observação

Funcionalidade de empresas

O recurso automático da criptografia no nível do campo só está disponível no MongoDB Enterprise 4.2 ou posterior e no MongoDB Atlas 4.2 ou clusters posteriores.

Novidades na versão 4.2.

Esta página documenta os comandos específicos, operadores de query, operadores de atualização, estágios de agregação e expressões de agregação suportados por drivers compatíveis com 4.2+ configurados para criptografia automática de nível de campo do lado do cliente.

O MongoDB armazena campos criptografados no nível do campo do lado do cliente como um blob BinData . As operações de leitura e gravação emitidas contra o valor BinData criptografado podem ter um comportamento inesperado ou incorreto em comparação com a emissão da mesma operação com relação ao valor descriptografado. Certas operações têm suporte rigoroso ao tipo BSON, em que emiti-las contra um valor BinData retorna um erro.

  • Os drivers oficiais compatíveis com 4.2+ usando criptografia automática no nível do campo do lado do cliente analisam operações de leitura/gravação em busca de operadores ou expressões que não suportam valores BinData ou que têm um comportamento anormal quando emitidos em relação a valores BinData .

  • Os aplicativos que usam criptografia explícita (manual) no nível do campo no lado do cliente podem usar esta página como orientação para emitir operações de leitura/gravação em campos criptografados.

Os drivers oficiais compatíveis com o MongoDB 4.2+ suportam criptografia automática no nível do campo do lado do cliente com os seguintes comandos:

Para qualquer comando suportado, os drivers compatíveis com 4.2+ retornam um erro se o comando usar um operador, estágio de agregação ou expressão de agregação não suportado:

Os comandos a seguir não exigem criptografia automática. Os drivers oficiais compatíveis com o MongoDB 4.2+ configurados para criptografia automática no nível do campo do lado do cliente passam esses comandos diretamente para o mongod:

Emitir qualquer outro comando por meio de um driver compatível com 4.2+ configurado para criptografia automática no nível do campo do lado do cliente retorna um erro.

[1] Embora a criptografia automática no nível do campo do lado do cliente não criptografe o comando getMore , a resposta ao comando pode conter valores de campo criptografados. Os aplicativos configurados com as opções corretas de criptografia de nível de campo do lado do cliente descriptografam automaticamente esses valores. Os aplicativos sem as opções de criptografia corretas veem apenas os valores criptografados.

Os drivers oficiais compatíveis com 4.2+ configurados para criptografia automática no nível do campo do lado do cliente permitem o seguinte operador de query quando emitidos em campo criptografados deterministicamente :

As queries que comparam um campo criptografado com null ou uma expressão regular sempre lançam um erro , mesmo se estiverem usando um operador de query compatível. Query que emitem esses operadores em um campo criptografado aleatoriamente geram um erro.

O operador $exists tem comportamento normal quando emitido em campos criptografados deterministicamente e aleatoriamente .

As consultas que especificam qualquer outro operador de consulta em um campo criptografado retornam um erro.

Os seguintes operadores de query geram um erro mesmo que não sejam emitidos em um campo criptografado:

Os drivers oficiais compatíveis com 4.2+ configurados para criptografia automática no nível do campo do lado do cliente permitem os seguintes operadores de atualização quando emitidos em campos criptografados de forma determinística :

Para operações de atualização usando o operador $rename em campos criptografados, certifique-se de que o JSON schema automático especifique os mesmos metadados de criptografia para os nomes dos campos de origem e destino.

As atualizações que especificam qualquer outro operador de atualização em um campo criptografado retornam um erro.

As operações de atualização com o seguinte comportamento geram um erro , mesmo se estiverem usando um operador compatível:

  • A operação de atualização produz uma array dentro de um caminho criptografado.

  • A operação de atualização usa a sintaxe de expressão de agregação.

Para operações de atualização que especificam um filtro de consulta em campos criptografados deterministicamente , o filtro de consulta deve usar somente operadores suportados nesses campos.

Os drivers oficiais compatíveis com o MongoDB 4.2+ configurados para criptografia automática no nível do campo do lado do cliente não suportam comandos de inserção com o seguinte comportamento:

  • Inserindo um documento com Timestamp(0,0) associado a um campo criptografado. O valor (0,0) indica que o mongod deve gerar o Timestamp. Como mongod não pode gerar campos criptografados, o carimbo de data/hora resultante não será criptografado.

  • Inserir um documento sem um _id criptografado se o esquema automático configurado especificar um campo _id criptografado. Como o mongod gera automaticamente um ObjectId não criptografado, a omissão _id dos documentos resulta em documentos que não estão em conformidade com as regras de criptografia automática.

  • Inserir um documento com um array associado a um campo criptografado de forma determinística . A criptografia automática no nível do campo do lado do cliente não oferece suporte à criptografia de arrays deterministicamente.

Os drivers oficiais compatíveis com o MongoDB 4.2+ configurados para criptografia automática no nível do campo do lado do cliente suportam os seguintes estágios do pipeline de agregação:

Os pipelines de agregação que operam em collection configuradas para criptografia automática que especificam qualquer outro estágio retornam um erro.

Para cada estágio de pipeline compatível, o MongoDB acompanha os campos que devem ser criptografados à medida que passam pelos pipelines compatíveis e os marca para criptografia.

Cada estágio compatível deve especificar apenas os operadores de query e as expressões de agregação compatíveis.

$group tem os seguintes comportamentos específicos para criptografia no nível do campo do lado do cliente:

  • Suporta agrupamento em campos criptografados deterministicamente.

  • Não suporta acumuladores aritméticos em campos criptografados.

  • Suporta acumuladores $addToSet e $push em campos criptografados. Não oferece suporte à correspondência na array resultante.

A criptografia automática no nível do campo do lado do cliente suporta $lookup e $graphLookup somente se a collection from corresponder à collection na qual a agregação é executada (ou seja, operações de auto-consulta).

Os estágios $lookup e $graphLookup que fazem referência a uma coleção from diferente retornam um erro.

Os drivers oficiais compatíveis com 4.2+ configurados para criptografia automática no nível do campo do lado do cliente permitem estágios de agregação usando as seguintes expressões em campos criptografados deterministicamente :

Todas as outras expressões de aggregation retornam um erro se forem emitidas em campos criptografados.

Os estágios de agregação com o seguinte comportamento geram um erro mesmo se estiverem usando uma expressão de agregação compatível:

Expressões
Comportamento rejeitado
Exemplo

A expressão especifica um campo cujas propriedades de criptografia não podem ser conhecidas até o tempo de execução e um estágio de agregação subsequente inclui uma expressão que faz referência a esse campo.

$addFields : {
"valueWithUnknownEncryption" : {
$cond : {
if : { "$encryptedField" : "value" },
then : "$encryptedField",
else: "unencryptedValue"
}
}
},
{
$match : {
"valueWithUnknownEncryption" : "someNewValue"
}
}

A expressão cria um novo campo que faz referência a um campo criptografado e opera nesse novo campo na mesma expressão.

{
$eq : [
{"newField" : "$encryptedField"},
{"newField" : "value"
]
}

A expressão faz referência ao prefixo de um campo criptografado dentro da expressão de comparação.

{ $eq : [ "$prefixOfEncryptedField" , "value"] }

O resultado da expressão é comparado a um campo criptografado.

{
$eq : [
"$encryptedField" ,
{ $ne : [ "field", "value" ] }
]
}

A expressão vincula uma variável a um campo criptografado ou tenta religar $$CURRENT.

{
$let: {
"vars" : {
"newVariable" : "$encryptedField"
}
}
}

O primeiro argumento para a expressão é um campo criptografado e

  • O segundo argumento para a expressão não é uma array literal

    -OU-

  • O segundo argumento para a expressão é um campo criptografado.

{
$in : [
"$encryptedField" ,
"$otherEncryptedField"
]
}

Os drivers oficiais compatíveis com o MongoDB 4.2+ configurados para criptografia automática no nível do campo do lado do cliente não suportam nenhuma operação de leitura ou gravação que exija criptografar os seguintes tipos de valor:

A criptografia não oculta adequadamente as informações de tipo desses valores.

A criptografia automática em nível de campo também não oferece suporte a operações de leitura ou gravação em um campo deterministicamente em que a operação compara o campo criptografado com os seguintes tipos de valor:

  • double

  • decimal128

  • bool

  • object

Voltar

Regras de criptografia automática