Sobre esta tarefa
Para tornar os campos criptografados consultáveis, crie um esquema de criptografia. Este esquema define quais campos são consultáveis e quais tipos de query são permitidos. Para obter mais informações, consulte Campos criptografados e queries ativadas.
Importante
A Queryable Encryption oferece suporte a queries de igualdade, faixa, prefixo, sufixo e substring. Você pode configurar um campo para apenas um dos tipos de query de igualdade ou de faixa. Você pode habilitar tanto prefix quanto suffix no mesmo campo, mas não pode combinar substring com outro tipo de query.
Antes de começar
Ao tornar campos criptografados consultáveis, considere o desempenho e a segurança. Para obter detalhes sobre como cada opção de configuração os afeta, consulte Configurar campos criptografados para otimização de pesquisa e armazenamento.
Para estimar o armazenamento que as query de prefixo, sufixo e substring exigem antes de configurá-las, consulte Estimar o impacto no armazenamento do Queryable Encryption.
Referência de campo
Você pode configurar a criptografia para cada campo na array fields do seu encryptedFieldsObject. A tabela a seguir descreve os subcampos disponíveis:
Campo | Tipo | Descrição |
|---|---|---|
| String | Obrigatório. O caminho da notação de ponto para o campo a ser criptografado, como |
| String | Obrigatório. O tipo de BSON do campo a ser criptografado. Para obter uma lista completa dos tipos compatíveis, consulte BSON Types. |
| UUID | Opcional. O UUID da DEK a ser usado para criptografar esse campo. O UUID é um elemento de dados binários BSON do subtipo Os IDs de chave devem ser exclusivos. Especificar um Se omitido, você pode usar o método assistente |
| Objeto | opcional. Habilita a query neste campo criptografado . Se omitido, o campo é criptografado, mas não pode ser consultado. Para saber mais sobre as opções de query, consulte Configurar campos criptografados para otimização de pesquisa e armazenamento. |
Passos
Especifique os campos a serem criptografados.
Adicione as strings
pathebsonTypea um documento dentro da array de campos:const encryptedFieldsObject = { fields: [ { path: "myDocumentField", bsonType: "int" } ]}Importante
Você pode especificar qualquer campo de criptografia, exceto o campo
_id.Opcionalmente, defina um campo
keyIdcom a ID da DEK.Importante
Os IDs de chave devem ser exclusivos, caso contrário, o servidor retornará um erro.
Ao configurar
AutoEncryptionSettingsno cliente, você pode usar o método assistentecreateEncryptedCollectionpara criar chaves automaticamente.{ path: "myDocumentField", bsonType: "int", keyId: "<unique data encryption key>"}
Habilite as queries de intervalo nos campos desejados.
Isso permite executar queries com os operadores $lt, $lte, $gt e $gte .
Para obter detalhes sobre como as seguintes opções afetam a segurança e o desempenho, consulte Configurar campos criptografados para otimização de pesquisa e armazenamento.
Adicione o objeto
queriese definaqueryTypecomo"range":{ path: "myDocumentRangeField", bsonType: "int", queries: { queryType: "range" }}Defina os seguintes campos:
CampoTipoDescriçãoIgual ao campo
bsonTypeObrigatório se
bsonTypefordecimaloudouble. Opcional, mas altamente recomendado se forint,longoudate. O padrão é os valores mínimo e máximo debsonType.Quando possível, especificar limites em uma query melhora o desempenho. Se estiver consultando valores fora desses limites inclusivos, o MongoDB retornará um erro.
{ path: "myDocumentRangeField", bsonType: "int", queries: { queryType: "range", min: 0, max: 1200 }}
Ative queries de prefixo, sufixo ou substring nos campos desejados.
Esses tipos de query são somente para campos string. Você pode habilitar prefix e suffix no mesmo campo, mas não pode habilitar nenhum dos dois se estiver usando substring.
prefixas queries habilitam as expressões de agregação$encStrStartsWithe$encStrNormalizedEq.suffixas queries habilitam as expressões de agregação$encStrEndsWithe$encStrNormalizedEq.substringas queries habilitam as expressões de agregação$encStrContainse$encStrNormalizedEq.
Adicione o objeto
queriese definaqueryTypepara"prefix","suffix"ou"substring":{ path: "myDocumentStringField", bsonType: "string", queries: { queryType: "substring" }}Defina os seguintes campos.
Para obter detalhes sobre como eles afetam a segurança e o desempenho, consulte Configurar campos criptografados para otimização de pesquisa e armazenamento.
CampoTipoDescriçãointeiro
substringapenas consultas. O comprimento máximo permitido para um campo indexado por substring.inteiro
O comprimento mínimo de prefixo/sufixo/substring permitido para query.
inteiro
O comprimento máximo de prefixo/sufixo/substring permitido para query.
IMPORTANTE: esta configuração afeta fortemente o desempenho da query. Limite-o sempre que possível.
Boolean
Opcional. Se as queries diferenciam maiúsculas de minúsculas. Padrão é
true.Boolean
Opcional. Se as queries são sensíveis a diacríticos. Padrão é
true.{ path: "myDocumentStringField", bsonType: "string", queries: { "queryType": "substring", "strMaxLength": 30, "strMinQueryLength": 1, "strMaxQueryLength": 20, "caseSensitive": false }}
Exemplo
Este exemplo mostra como criar um esquema de criptografia para dados do internamento.
Considere o seguinte documento que contenha informações de identificação pessoal (PII), informações de cartão de crédito e informações médicas confidenciais:
{ "firstName": "Jon", "lastName": "Snow", "patientId": 12345187, "address": "123 Cherry Ave", "medications": [ "Adderall", "Lipitor" ], "patientInfo": { "ssn": "921-12-1234", "billing": { "type": "visa", "number": "1234-1234-1234-1234" } }}Para garantir que os PII e as informações médicas confidenciais permaneçam seguras, esse esquema de criptografia adiciona os campos relevantes:
const encryptedFieldsObject = { fields: [ { path: "patientId", bsonType: "int" }, { path: "patientInfo.ssn", bsonType: "string" }, { path: "medications", bsonType: "array" }, { path: "patientInfo.billing", bsonType: "object" } ]}Adicionar a propriedade queries torna os campos patientId e patientInfo.ssn aptos para queries. Este exemplo habilita queries de igualdade:
const encryptedFieldsObject = { fields: [ { path: "patientId", bsonType: "int", queries: { queryType: "equality" } }, { path: "patientInfo.ssn", bsonType: "string", queries: { queryType: "equality" } }, { path: "medications", bsonType: "array" }, { path: "patientInfo.billing", bsonType: "object" }, ]}