Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Menu Docs
Página inicial do Docs
/ /

Criar um esquema de criptografia

Para tornar os campos criptografados consultáveis, crie umesquema 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 e intervalo. Você pode configurar um campo para apenas um tipo de query.

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 usar as queries de prefixo, sufixo ou substring de visualização pública com mongosh, você deve baixar separadamente a Biblioteca compartilhada de criptografia automática 8.2 ou superior e, em seguida, especificar o caminho da biblioteca para mongosh usando a opção --cryptSharedLibPath.

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

path

String

Obrigatório. O caminho da notação de ponto para o campo a ser criptografado, como "patientInfo.ssn". Você pode especificar qualquer campo exceto o campo _id.

bsonType

String

Obrigatório. O tipo de BSON do campo a ser criptografado. Para obter uma lista completa dos tipos compatíveis, consulte BSON types compatíveis e não suportados.

keyId

UUID

opcional. O UUID daDEK a ser usado para criptografar esse campo. O UUID é um elemento de dados binários BSON do subtipo 4.

Os IDs de chave devem ser exclusivos. Especificar um keyId que já está em uso retorna um erro.

Se omitido, você pode usar o método assistente createEncryptedCollection() para criar chaves automaticamente.

queries

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.

1

Inclua um encryptedFieldsObject com uma array fields aninhada:

const encryptedFieldsObject = {
fields: []
}
2
  1. Adicione as strings path e bsonType a 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.

  2. Opcionalmente, defina um campo keyId com a ID da DEK.

    Importante

    Os IDs de chave devem ser exclusivos, caso contrário, o servidor retornará um erro.

    Ao configurar AutoEncryptionSettings no cliente, você pode usar o método assistente createEncryptedCollection para criar chaves automaticamente.

    {
    path: "myDocumentField",
    bsonType: "int",
    keyId: "<unique data encryption key>"
    }
3

Isso permite executar queries com os operadores $eq, $ne, $in e $nin .

Adicione o objeto queries e defina queryType como "equality":

{
path: "myDocumentField",
bsonType: "int",
queries: { queryType: "equality" }
}
4

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.

  1. Adicione o objeto queries e defina queryType como "range":

    {
    path: "myDocumentRangeField",
    bsonType: "int",
    queries: { queryType: "range" }
    }
  2. Defina os seguintes campos:

    Campo
    Tipo
    Descrição

    Igual ao campo bsonType

    Obrigatório se bsonType for decimal ou double. Opcional, mas altamente recomendado se for int, long ou date. O padrão é os valores mínimo e máximo de bsonType.

    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
    }
    }
5

Esses tipos de query são somente para campos string. Você pode habilitar prefixPreview e suffixPreview no mesmo campo, mas não pode habilitar nenhum dos dois se estiver usando substringPreview.

Aviso

As queries de prefixo, sufixo e substring estão em visualização pública

As queries de prefixo, sufixo e substring do Queryable Encryption estão disponíveis em visualização pública no MongoDB 8.2. Não habilite esses tipos de query em produção. A funcionalidade de visualização pública será incompatível com o recurso GA, e você terá que descartar todas as collections que habilitarem essas queries.

  1. Adicione o objeto queries e defina queryType para "prefixPreview", "suffixPreview" ou "substringPreview":

    {
    path: "myDocumentStringField",
    bsonType: "string",
    queries: { queryType: "substringPreview" }
    }
  2. 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.

    Campo
    Tipo
    Descrição

    inteiro

    substringPreview apenas 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": "substringPreview",
    "strMaxLength": 30,
    "strMinQueryLength": 1,
    "strMaxQueryLength": 20,
    "caseSensitive": false
    }
    }

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"
},
]
}

Voltar

Campos e queries

Nesta página