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 agregação e expressões de agregação suportados pelos drivers compatíveis com o MongoDB versão 6.0 ou posterior configurados para criptografia automática.
Observação
Funcionalidade de empresas
A criptografia automática está disponível no MongoDB Enterprise e MongoDB Atlas usando o MongoDB versão 6.0 ou posterior.
Operações usando BinData
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. Drivers oficiais compatíveis com o MongoDB versão 6.0 ou posterior usando o Automatic Encryption com Queryable Encryption 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 anormal quando emitidos com valores BinData
.
Os aplicativos que usam Queryable Encryption podem usar esta página como orientação para emitir operações de leitura e gravação em campos criptografados.
Comandos de leitura e gravação compatíveis
Os drivers oficiais do MongoDB versão 6.0 ou posterior suportam criptografia automática com os seguintes comandos:
Para qualquer comando suportado, os drivers compatíveis com Queryable Encryption 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:
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.
|
Operadores de query suportados
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:
Operadores de atualização compatíveis
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 do tipo substituição
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.
Operações de inserção sem suporte
Drivers compatíveis configurados para criptografia automática não oferecem suporte a comandos de inserção com o seguinte comportamento:
Estágios de agregação não suportados
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:
Estágios de aggregation suportados
Os drivers compatíveis configurados para criptografia automática suportam os seguintes estágios do pipeline de agregação:
$group
em campos não criptografados$lookup
e$graphLookup
(para requisitos de uso, consulte$lookup
e$graphLookup
Comportamento)
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.
$lookup
e $graphLookup
comportamento
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:
Change Streams para observar um reconhecimento de data center ou todo o cluster
A criptografia automática não oferece suporte ao estágio $planCacheStats
, pois o resultado pode conter informações confidenciais.
Expressões de agregação suportadas
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. |
| |||||||||||||||
A expressão cria um novo campo que faz referência a um campo criptografado e opera nesse novo campo na mesma expressão. |
| |||||||||||||||
A expressão faz referência ao prefixo de um campo criptografado dentro da expressão de comparação. |
| |||||||||||||||
O resultado da expressão é comparado a um campo criptografado. |
| |||||||||||||||
A expressão vincula uma variável a um campo criptografado ou tenta revincular $$CURRENT . |
| |||||||||||||||
O primeiro argumento para a expressão é um campo criptografado e
|
|
Tipos de campo não suportados
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