Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Criptografia de campo e consultabilidade

Nesta página

  • Visão geral
  • Especifique campos para criptografia
  • Exemplo
  • Especificar campos criptografados de query
  • Exemplo
  • Habilitar queryable encryption
  • Tipos de query
  • Considerações ao ativar a query

Neste guia, você pode aprender sobre os seguintes tópicos sobre Queryable Encryption:

  • Como especificar campos para criptografia.

  • Como especificar se um campo criptografado pode ser consultado quando você cria uma collection.

  • Tipos de query e quais você pode usar em campos criptografados.

  • O que considerar ao decidir se deseja habilitar query em um campo criptografado.

A Queryable Encryption permite que você especifique quais campos deseja criptografar automaticamente em seu documento MongoDB.

Importante

Você pode especificar qualquer campo no documento para criptografia, exceto o campo _id .

Para especificar campos para criptografia e consulta, defina um JSON schema que inclua as seguintes propriedades:

Nome da chave
Tipo
Obrigatório?
path
String
Obrigatório
bsonType
String
Obrigatório
keyId
Binário
Obrigatório
queries
Objeto
Opcional, omita a menos que queira poder fazer uma query do campo.

Este exemplo mostra como criar um JSON schema que especifica quais campos o recurso Queryable Encryption deve criptografar automaticamente.

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": [
"Adderal",
"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, crie um JSON schema que configure o Queryable Encryption para criptografar automaticamente esses campos. O seguinte exemplo de JSON schema mostra como você pode especificar quais campos criptografar:

const encryptedFieldsObject = {
fields: [
{
path: "patientId",
keyId: "<unique data encryption key>",
bsonType: "int"
},
{
path: "patientInfo.ssn",
keyId: "<unique data encryption key>",
bsonType: "string"
},
{
path: "medications",
keyId: "<unique data encryption key>",
bsonType: "array"
},
{
path: "patientInfo.billing",
keyId: "<unique data encryption key>",
bsonType: "object"
},
]
}

Observe que o campo keyId requer um diretório de dados (DEK) exclusivo que o Queryable Encryption usa para criptografar o campo. Para obter mais informações sobre DEKs, consulte Gerenciamento de chaves de criptografia.

Inclua a propriedade queries nos campos que você deseja tornar consultáveis em seu JSON schema. Isso permite que um cliente autorizado emita query de leitura e escrita usando campo criptografados. Você pode omitir a propriedade queries a menos que queira poder fazer uma query do campo.

O seguinte trecho de código mostra como adicionar a propriedade queries ao JSON schema para tornar os campos patientId e patientInfo.ssn consultáveis..

const encryptedFieldsObject = {
fields: [
{
path: "patientId",
keyId: "<unique data encryption key>",
bsonType: "int",
queries: { queryType: "equality" }
},
{
path: "patientInfo.ssn",
keyId: "<unique data encryption key>",
bsonType: "string",
queries: { queryType: "equality" }
},
{
path: "medications",
keyId: "<unique data encryption key>",
bsonType: "array"
},
{
path: "patientInfo.billing",
keyId: "<unique data encryption key>",
bsonType: "object"
},
]
}

Para mais informações sobre tipos de query, consulte Tipos de query.

Você pode ativar a Queryable Encryption em campos especificados em um JSON schema das seguintes maneiras:

  • Passe o JSON schema, representado pela constante encryptedFieldsObject , para o cliente que o aplicativo utiliza para criar a coleção como mostrado no seguinte trecho de código:

const client = new MongoClient(uri, {
autoEncryption: {
keyVaultNameSpace: "<your keyvault namespace>",
kmsProviders: "<your kms provider>",
extraOptions: {
cryptSharedLibPath: "<path to FLE Shared Library>"
},
encryptedFieldsMap: {
"<databaseName.collectionName>": { encryptedFieldsObject }
}
}
...
await client.db("<database name>").createCollection("<collection name>");
}

Observação

É importante habilitar a Queryable Encryption antes de criar a collection. A ativação da Queryable Encryption após a criação da collection não criptografa campo em documento que já estão nessa collection.

Para obter mais informações sobre as opções de configuração autoEncryption, consulte a seção sobre MongoClient Options for Queryable Encryption.

  • Passe o objeto de campo criptografados para sua chamada para criar uma nova collection, conforme mostrado no seguinte trecho de código:

await encryptedDB.createCollection("<collection name>", {
encryptedFields: encryptedFieldsObject
});

Dica

Para obter o mais alto nível de segurança, especifique os campo criptografados ao criar a collection e ao criar um cliente para acessar a collection. Isso garante que, se a segurança do servidor for comprometida, as informações ainda serão criptografadas por meio do cliente.

Importante

O MongoDB recomenda criar explicitamente sua collection ao usar Queryable Encryption, em vez de criar implicitamente a collection por meio de uma operação de inserção. Quando você cria uma collection utilizando createCollection(), a operação cria um índice no campo codificados. Sem um índice, a consulta de campos criptografados pode ser executada lentamente.

A Queryable Encryption permite que você especifique em quais campos deseja habilitar a query, passando um tipo de query para a opção queries em seu objeto de campos criptografados.

Atualmente, a Criptografia Consultável é compatível com os tipos de consulta none ou equality . A nova estrutura de criptografia introduzida como parte da Queryable Encryption no MongoDB 6.0 foi projetada para acomodar pesquisas criptografadas expressivas adicionais, como operadores de faixa e cadeia de caracteres.

Um tipo de query de none indica que os dados serão criptografados, mas não se destina a ser consultável. As queries não podem ser executadas em dados criptografados com um tipo de query de none. Os dados criptografados serão retornados se as queries forem executadas em:

  • campos não criptografados

  • campos com um tipo de query de equality na mesma coleção e descriptografados no cliente.

Importante

Tipos de query especificados nenhum

Se o tipo de query não for explicitamente especificado, o tipo de query será padronizado para none e os dados não poderão ser query.

O tipo de query do equality permite a você query campos criptografados utilizando as seguintes expressões:

Observação

As queries que comparam um campo codificado com null ou com uma expressão regular resultarão em um erro, mesmo ao utilizar um operador de query suportado.

A Queryable Encryption usando o tipo de query equality não suporta operações de leitura ou gravação em um campo quando a operação compara o campo criptografado a qualquer um dos seguintes tipos de BSON :

  • double

  • decimal128

  • object

  • array

  • javascriptWithScope (Obsoleto)

Ao usar a Queryable Encryption, você pode escolher se deseja tornar um campo criptografado consultável. Se você não precisar executar operações de leitura ou gravar operações que exijam que você leia um campo criptografado, você pode optar por não habilitar a query nesse campo. Você ainda pode recuperar o documento inteiro consultando outros campos que podem ser consultados ou não criptografados.

Quando você torna os campos criptografados consultáveis, o Queryable Encryption cria um índice para cada campo criptografado, o que pode tornar as operações de gravação nesse campo mais demoradas. Quando uma operação de gravação atualiza um campo indexado, MongoDB também atualiza o índice relacionado.

Quando você habilita a query em um campo criptografado, sua coleção exige mais espaço de armazenamento. Estes nomes de collection, que começam com enxcol_., contêm metadados de criptografia importantes.

Aviso

Não modifique a collection que começa com enxcol_..

← Fundamentos