Suporte de leitura/gravação com criptografia automática de nível de campo
Nesta página
Observação
Funcionalidade de empresas
O recurso automático da criptografia no nível do campo só está disponível no MongoDB Enterprise 4.2 ou posterior e no MongoDB Atlas 4.2 ou clusters posteriores.
Novidades na versão 4.2.
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 compatíveis com 4.2+ configurados para criptografia automática de nível de campo do lado do cliente.
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 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 contra um valor BinData
retorna um erro.
Os drivers oficiais compatíveis com 4.2+ usando criptografia automática no nível do campo do lado do cliente analisam operações de leitura/gravação em busca de operadores ou expressões que não suportam valores
BinData
ou que têm um comportamento anormal quando emitidos em relação a valoresBinData
.Os aplicativos que usam criptografia explícita (manual) no nível do campo no lado do cliente podem usar esta página como orientação para emitir operações de leitura/gravação em campos criptografados.
Comandos de leitura e gravação compatíveis
Os drivers oficiais compatíveis com o MongoDB 4.2+ suportam criptografia automática no nível do campo do lado do cliente com os seguintes comandos:
Para qualquer comando suportado, os drivers compatíveis com 4.2+ retornam um erro se o comando usar um operador, estágio de agregação ou expressão de agregação não suportado:
Os comandos a seguir não exigem criptografia automática. Os drivers oficiais compatíveis com o MongoDB 4.2+ configurados para criptografia automática no nível do campo do lado do cliente passam esses comandos diretamente para o mongod
:
Emitir qualquer outro comando por meio de um driver compatível com 4.2+ configurado para criptografia automática no nível do campo do lado do cliente retorna um erro.
[1] | Embora a criptografia automática no nível do campo do lado do cliente não criptografe o comando getMore , a resposta ao comando pode conter valores de campo criptografados. Os aplicativos configurados com as opções corretas de criptografia de nível de campo do lado do cliente descriptografam automaticamente esses valores. Os aplicativos sem as opções de criptografia corretas veem apenas os valores criptografados. |
Operadores de query suportados
Os drivers oficiais compatíveis com 4.2+ configurados para criptografia automática no nível do campo do lado do cliente permitem o seguinte operador de query quando emitidos em campo criptografados deterministicamente :
As queries que comparam um campo criptografado com null
ou uma expressão regular sempre lançam um erro , mesmo se estiverem usando um operador de query compatível. Query que emitem esses operadores em um campo criptografado aleatoriamente geram um erro.
O operador $exists
tem comportamento normal quando emitido em campos criptografados deterministicamente e aleatoriamente .
As consultas que especificam qualquer outro operador de consulta em um campo criptografado retornam um erro.
Os seguintes operadores de query geram um erro mesmo que não sejam emitidos em um campo criptografado:
Operadores de atualização compatíveis
Os drivers oficiais compatíveis com 4.2+ configurados para criptografia automática no nível do campo do lado do cliente permitem os seguintes operadores de atualização quando emitidos em campos criptografados de forma determinística :
Para operações de atualização usando o operador $rename
em campos criptografados, certifique-se de que o JSON schema automático especifique 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 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 consulta em campos criptografados deterministicamente , o filtro de consulta deve usar somente operadores suportados nesses campos.
Operações de inserção sem suporte
Os drivers oficiais compatíveis com o MongoDB 4.2+ configurados para criptografia automática no nível do campo do lado do cliente não suportam 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 omongod
deve gerar o Timestamp. Comomongod
não pode gerar campos criptografados, o carimbo de data/hora resultante não será criptografado.Inserir um documento sem um
_id
criptografado se o esquema automático configurado especificar um campo_id
criptografado. Como omongod
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.Inserir um documento com um array associado a um campo criptografado de forma determinística . A criptografia automática no nível do campo do lado do cliente não oferece suporte à criptografia de arrays deterministicamente.
Estágios de aggregation suportados
Os drivers oficiais compatíveis com o MongoDB 4.2+ configurados para criptografia automática no nível do campo do lado do cliente suportam os seguintes estágios do pipeline de agregação:
$group
(consulte$group
Comportamento para requisitos de uso.)$lookup
e$graphLookup
(Consulte$lookup
e$graphLookup
Comportamento para obter os requisitos de uso)
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.
$group
Comportamento
$group
tem os seguintes comportamentos específicos para criptografia no nível do campo do lado do cliente:
$lookup
e $graphLookup
comportamento
A criptografia automática no nível do campo do lado do cliente suporta $lookup
e $graphLookup
somente se a collection from
corresponder à collection na qual a agregação é executada (ou seja, operações de auto-consulta).
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 oficiais compatíveis com 4.2+ configurados para criptografia automática no nível do campo do lado do cliente permitem estágios de agregação 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 agregação com o seguinte comportamento geram um erro mesmo se estiverem 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 religar $$CURRENT . |
| |||||||||||||||
O primeiro argumento para a expressão é um campo criptografado e
|
|
Tipos de campo não suportados
Os drivers oficiais compatíveis com o MongoDB 4.2+ configurados para criptografia automática no nível do campo do lado do cliente 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 desses valores.
A criptografia automática em nível de campo também não oferece suporte a operações de leitura ou gravação em um campo deterministicamente em que a operação compara o campo criptografado com os seguintes tipos de valor:
double
decimal128
bool
object