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

Operações suportadas para Queryable Encryption

Nesta página

  • Operações usando BinData
  • Tipos de BSON typescompatíveis e não suportados
  • CRUD
  • Comandos de leitura e gravação compatíveis
  • Operadores de query suportados
  • Queries não suportadas
  • 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 tipos de dados, comandos, operadores de query, operadores de atualização, estágios de agregação e expressões de agregação específicos suportados para drivers compatíveis com Queryable Encryption . Ela descreve o comportamento de operações que usam criptografia automática e operações que usam criptografia explícita.

Observação

Funcionalidade de empresas

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

O MongoDB armazena Queryable Encryption 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 com um valor BinData retorna um erro.

Os drivers oficiais compatíveis com a Queryable Encryption analisam operações de leitura e gravação para operadores ou expressões que não suportam valores BinData .

Queryable Encryption oferece suporte a queries de igualdade em relação a todos os BSON types exceto para o seguinte:

  • double

  • decimal128

  • object

  • array

Queryable Encryption oferece suporte a queries de intervalo em relação aos seguintes BSON types:

  • int: 32-bit inteiro

  • long: 64-bit inteiro

  • double: double (IEEE 754 binário64)

  • decimal: Decimal (IEEE 754 Decimal128)

  • date: UTC DateTime (Int64)

  • A Queryable Encryption não oferece suporte a operações de atualização ou exclusão de vários documentos. db.collection.updateMany() e db.collection.bulkWrite() com mais de uma operação de atualização ou exclusão não são suportados.

  • A Queryable Encryption limita db.collection.findAndModify() argumentos.

    • fields não é permitido

    • new deve ser falso

  • Ao executar uma operação de upsert, todos os campos criptografados no filtro são excluídos da inserção.

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

Os drivers configurados para criptografia automática oferecem suporte a um conjunto limitado de operadores de query quando emitidos para um campo de query criptografado.

A query de campos não criptografados ou campos criptografados com um tipo de query com suporte retorna dados criptografados que são descriptografados no cliente.

Atualmente, a Queryable Encryption oferece suporte aos tipos de query none, equality e range . Se o tipo de query não for especificado, o padrão será none. Se o tipo de consulta for none, o campo será codificado e os clientes não poderão consultá-lo.

Importante

Suporte de comparação

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

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

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

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

Os campos configurados para queryType: "equality" suportam as seguintes expressões:

Os campos configurados para queryType: "range" suportam as seguintes expressões:

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

As queries que comparam um campo codificado com null ou uma expressão regular sempre lançam um erro, mesmo se estiver usando um operador de query suportado.

Ao usar um MongoClient configurado para Queryable Encryption, os seguintes operadores de query lançam um erro, mesmo se emitidos em um campo não criptografado :

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 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 coleção específica, como:

A criptografia automática não suporta o 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 aggregation com o seguinte comportamento retornam um erro, mesmo 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 à criptografia automática em campos dentro de uma array de documentos.

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

Referência