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
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.
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
.
Tipos de BSON typescompatíveis e não suportados
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 inteirolong
: 64-bit inteirodouble
: double (IEEE 754 binário64)decimal
: Decimal (IEEE 754 Decimal128)date
: UTC DateTime (Int64)
CRUD
A Queryable Encryption não oferece suporte a operações de atualização ou exclusão de vários documentos.
db.collection.updateMany()
edb.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 é permitidonew
deve ser falso
Ao executar uma operação de upsert, todos os campos criptografados no filtro são excluídos da inserção.
Comandos de leitura e gravação compatíveis
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:
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.
|
Operadores de query suportados
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.
Queries não suportadas
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 :
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 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 coleção específica, como:
Change Streams para observar um reconhecimento de data center ou todo o cluster
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.
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 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. |
| |||||||||||||||
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 à 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