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

Operações suportadas para criptografia automática

Nesta página

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

Os drivers que usam criptografia automática no nível de campo do lado do cliente suportam os seguintes comandos:

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

  • 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 configurados para criptografia automática em nível de campo do lado do cliente passam esses comandos diretamente para o mongod:

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

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

Os drivers configurados para criptografia automática no nível do campo do lado do cliente possibilitam que os seguintes operadores de query sejam emitidos em campos criptografados de forma determinística:

As consultas que comparam um campo criptografado a null ou a uma expressão regular sempre retornam um erro, mesmo ao usar um operador de consulta compatível. As consultas que emitem esses operadores em um campo criptografado aleatoriamente retornam um erro.

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

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

Os operadores de query a seguir 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 de campo do lado do cliente como um blob BinData. As operações de leitura e gravação emitidas em relação ao valor criptografado BinData podem ter um comportamento inesperado ou incorreto em comparação com a emissão dessa mesma operação em relação ao valor descriptografado. Certas operações têm suporte estrito ao tipo BSON, e emiti-las com um valor BinData retorna um erro.

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

  • Os aplicativos que usam criptografia explícita (manual) em nível de 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 de nível de campo no lado do cliente não são compatíveis com comandos de inserção com o seguinte comportamento:

  • Inserir um documento com Timestamp(0,0) associado a um campo criptografado. O valor (0,0) indica que o mongod deve gerar o carimbo de data/hora. Quando mongod não consegue 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 fora de conformidade com as regras de criptografia automática.

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

Os drivers configurados para criptografia automática no nível do campo do lado do cliente possibilitam que os seguintes operadores de atualização sejam emitidos em campos criptografados de forma determinística:

Quando você usa o operador $rename em campos criptografados, o JSON schema automático precisa 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 comportamento a seguir retornam um erro, mesmo que estejam 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 deterministicamente, o filtro de query deve usar somente operadores suportados nesses campo.

Os drivers configurados para criptografia automática no nível do campo do lado do cliente oferecem suporte às seguintes fases do pipeline de agregação:

Os pipelines que operam em coleções 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 a criptografia no nível de campo do lado do cliente:

$group suporta:

  • Agrupamento em campos criptografados de forma determinística.

  • Usando acumuladores $addToSet e $push em campos criptografados.

$group não é compatível com:

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

  • Acumuladores aritméticos em campos criptografados.

A criptografia automática no nível do campo do lado do cliente é compatível com $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.

Os drivers configurados para criptografia automática em nível de campo do lado do cliente possibilitam estágios de agregação utilizando as seguintes expressões em campos criptografados de forma determinística:

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 de nível de campo do lado do cliente (CSFLE) não possibilitam 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 CSFLE automática também não é compatível com operações de leitura ou gravação em um campo criptografado de forma determinística em que a operação compara o campo criptografado com os seguintes tipos de valores:

  • array

  • bool

  • decimal128

  • double

  • object

Voltar

Aplicação de esquema