Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Operações suportadas para criptografia automática

Nesta página

  • Comandos de leitura e escrita suportados
  • Operadores de query suportados
  • Operações de inserção não suportadas
  • Operadores de atualização suportados
  • Estágios de aggregation suportados
  • $group Comportamento
  • Comportamento $lookup e $graphLookup
  • Expressões de aggregation 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 agregação e expressões de agregação suportados por drivers configurados para criptografia automática de nível de campo do lado do cliente.

Os drivers que usam a criptografia automática em nível de campo do lado do cliente são compatíveis com os seguintes comandos:

Para qualquer comando suportado, os drivers retornam um erro se o comando usar 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 desta página:

  • Operadores de query suportados

  • Operadores de atualização suportados

  • Estágios de aggregation suportados

  • Expressões de aggregation suportadas

Os comandos a seguir não exigem criptografia automática. Os drivers configurados para criptografia automática em nível de campo do lado do cliente passam estes comandos diretamente para mongod:

A emissão de qualquer outro comando por meio de um driver configurado para criptografia automática em nível de campo do lado do cliente retorna um erro.

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

Os drivers configurados para criptografia automática em nível de campo do lado do cliente permitem os seguintes operadores de query quando emitidos em campos criptografados deterministicamente :

As queries que comparam um campo codificado com null ou uma expressão regular sempre retornam um erro, mesmo ao usar um operador de query suportado. As queries que emitem esses operadores em um campo criptografado aleatoriamente retornam um erro.

O operador $exists tem comportamento normal quando emitido para campos criptografados de forma determinística e aleatória.

As queries que especificam qualquer outro operador de query em um campo criptografado retornam um erro.

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

Aviso

Comportamento inesperado com BinData

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 com relação ao 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.

  • Drivers que usam criptografia automática de nível de campo do lado do cliente analisam operações de leitura e gravação para operadores ou expressões que não oferecem suporte a valores BinData ou que têm comportamento inesperado quando emitidos em valores BinData .

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

Os drivers configurados para criptografia automática em nível de campo do lado do cliente 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. Quando mongod não pode gerar campos criptografados, o carimbo de data/hora resultante não é criptografado.

  • Inserir um documento sem um _id criptografado se o esquema automático configurado especificar um campo _id criptografado. Quando 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.

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

Os drivers configurados para criptografia automática em nível de campo do lado do cliente permitem os seguintes operadores de atualização quando emitidos em campos criptografados deterministicamente :

Quando você usa o operador $rename em campos criptografados, o JSON schema automático deve especificar 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 retornam 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 utiliza 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 configurados para criptografia automática em nível de campo do lado do cliente oferecem suporte aos seguintes estágios de pipeline de agregação:

Os pipelines que operam em collections configuradas para criptografia automática que especificam qualquer outro estágio retornam um erro.

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

Cada estágio suportado deve especificar somente os operadores de query e expressões de agregação suportados.

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

$group suporta:

  • Agrupamento em campos criptografados deterministicamente.

  • Uso de acumuladores $addToSet e $push em campos criptografados.

$group não suporta:

  • Correspondência na array retornada por $addToSet e $push acumuladores.

  • Acumuladores aritméticos em campos criptografados.

A criptografia automática em nível de campo do lado do cliente suporta $lookup e $graphLookup somente se a coleção from corresponder à coleção na qual a agregação é executada (especificamente, operações de autopesquisa).

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

Não é possível executar uma $lookup a partir de um MongoClient habilitado para CSFLE em collections não criptografadas.

Os drivers configurados para criptografia automática em nível de campo do lado do cliente permitem estágios de aggregation 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 aggregation com o seguinte comportamento retornam um erro mesmo se estiverem usando uma expressão de aggregation compatível:

Expressões
Comportamento rejeitado
Exemplo

$cond

$switch

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 faça 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 configurados para criptografia automática em nível de campo do lado do cliente (CSFLE) 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 para esses valores.

O CSFLE automático também não suporta operações de leitura ou escrita em um campo criptografado deterministicamente em que a operação compara o campo criptografado com os seguintes tipos de valor:

  • array

  • bool

  • decimal128

  • double

  • object

← Aplicação de esquema do lado do servidor CSFLE