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

Operações suportadas para Queryable Encryption

Nesta página

  • Operações usando BinData
  • Comandos de leitura e gravação compatíveis
  • Operadores de query suportados
  • Operadores de atualização compatíveis
  • Atualizações do tipo substituição
  • Operações de inserção sem suporte
  • Estágios de agregação não suportados
  • Estágios de aggregation suportados
  • Comportamento $lookup e $graphLookup
  • Expressões de agregação suportadas
  • Tipos de campo não suportados

Esta página documenta os comandos específicos, operadores de query, operadores de atualização, estágios de aggregation e expressões de aggregation suportados para drivers compatíveis com Queryable Encryption.

Observação

Funcionalidade de empresas

A criptografia automática está disponível no MongoDB Enterprise e MongoDB Atlas

O MongoDB armazena campos criptografados da Queryable Encryption como um blob BinData . As operações de leitura e gravação emitidas em relação ao valor BinData criptografado podem ter um comportamento inesperado ou incorreto em comparação com a emissão da mesma operação em relação ao valor descriptografado. Certas operações têm suporte rigoroso do tipo BSON, em que emiti-las em relação a um valor BinData retorna um erro. Drivers oficiais compatíveis com Queryable Encryption analisam operações de leitura e 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 .

A aplicação que usam criptografia explícita podem usar esta página como orientação para emitir operações de leitura e gravação em campo criptografados.

Os drivers compatíveis com Queryable Encryption suportam criptografia automática com os seguintes comandos:

Para qualquer comando suportado, os drivers retornam um erro se o comando utilizar um operador, estágio de agregação ou expressão de agregação não suportado. Para obter uma lista completa dos operadores, estágios e expressões suportados, consulte as seguintes seções:

  • Operadores de query suportados

  • Operadores de atualização compatíveis

  • Estágios de aggregation suportados

  • Expressões de agregação suportadas

Os comandos a seguir não exigem criptografia automática. Os drivers oficiais configurados para criptografia automática passam esses comandos diretamente para o mongod :

A emissão de qualquer outro comando por meio de um driver compatível configurado para criptografia automática retorna um erro.

[1] Embora a criptografia automática 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 Queryable Encryption descriptografam automaticamente esses valores.
  • Os aplicativos sem as opções de criptografia corretas veem os valores criptografados.

Para transações de cluster fragmentado que usam Queryable Encryption, deve-se configurar readConcern como snapshot.

Os drivers configurados para criptografia automática suportam o seguinte operador de query quando emitidos em um campo de query criptografado:

Importante

Suporte de comparação

A comparação de um campo criptografado com outro campo criptografado falhará.

{$expr: {$eq: ["$encrypted1", "$encrypted2"]}}

A comparação de um campo criptografado com um valor de texto simples é suportada.

{$expr: {$eq: ["$encrypted1", "plaintext_value"]}}

As queries que comparam um campo criptografado com null ou uma expressão regular sempre lançam um erro, mesmo ao usar um operador de query suportado.

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

As queries que especificam qualquer outro operador de query em um campo criptografado retornam um erro. Os seguintes operadores de query lançam um erro mesmo se não forem emitidos em um campo criptografado ao usar um MongoClient configurado para Queryable Encryption:

Os drivers configurados para criptografia automática suportam os seguintes operadores de atualização quando emitidos em campos criptografados:

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 query em campos criptografados, o filtro de query deve usar somente operadores suportados nesses campos.

Atualizações no estilo de substituição são suportadas, no entanto, se o documento de substituição contiver um Timestamp(0,0) dentro de um campo criptografado de nível superior, a Queryable Encryption apresentará erro. O valor (0,0) indica que o mongod deve gerar o Timestamp. mongod não pode gerar campos criptografados.

Drivers compatíveis configurados para criptografia automática não oferecem suporte a 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.

A criptografia automática não oferecerá suporte a estágios de agregação que leem ou gravam em collection adicionais. Esses estágios são:

Os drivers compatíveis configurados para criptografia automática 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.

A criptografia automática suporta $lookup e $graphLookup somente se a collection from corresponder à collection em que a agregação é executada. Os estágios $lookup e $graphLookup que fazem referência a uma collection from diferente retornam um erro.

A criptografia automática não oferece suporte a fontes de metadados de agregação "sem conexão", que leem metadados que não pertencem a uma collection específica, como:

A criptografia automática não oferece suporte ao estágio $planCacheStats , pois o resultado pode conter informações confidenciais.

Não é possível executar um a partir de um Queryable $lookup Encryption MongoClient em collection não criptografadas.

Drivers compatíveis configurados para criptografia automática suportam a seguinte expressão em relação a qualquer tipo de query de igualdade campo criptografado:

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

Os estágios de agregação com o comportamento a seguir retornam um erro , mesmo que estejam 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 revincular $$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 configurados para criptografia automática não oferecem suporte a operações de leitura ou gravação que exija criptografar os seguintes tipos de valor:

A Queryable Encryption não oculta adequadamente as informações de tipo para esses valores.

A Queryable Encryption não oferece suporte a operações de leitura ou gravação em um campo criptografado em que a operação compara o campo criptografado aos seguintes tipos de valor:

  • array

  • decimal128

  • double

  • object

Voltar

Limitações do Queryable Encryption