Operações suportadas para criptografia automática
Nesta página
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.
Comandos de leitura e gravação compatíveis
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:
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.
|
Operadores de query suportados
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 valoresBinData
.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.
Operações de inserção sem suporte
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 omongod
deve gerar o carimbo de data/hora. Quandomongod
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. Quandomongod
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.
Operadores de atualização compatíveis
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.
Estágios de aggregation suportados
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:
$group
(Para requisitos de uso, consulte$group
Comportamento)$lookup
e$graphLookup
(para requisitos de uso, consulte$lookup
e$graphLookup
Comportamento)
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
Comportamento
$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:
$lookup
e $graphLookup
comportamento
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.
Expressões de agregação suportadas
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. |
| |||||||||||||||
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 |
| |||||||||||||||
O primeiro argumento para a expressão é um campo criptografado e
|
|
Tipos de campo não suportados
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