Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Crear un esquema de cifrado

Para que los campos cifrados sean consultables, cree un Esquema de cifrado. Este esquema define qué campos se pueden consultar y qué tipos de consultas están permitidos. Para obtener más información, consulta Campos cifrados y consultas habilitadas.

Importante

Queryable Encryption admite queries de igualdad y de rango. Solo puedes configurar un campo para un tipo de query.

Cuando hagas que los campos cifrados sean consultables, considera el rendimiento y la seguridad. Para obtener detalles sobre cómo cada opción de configuración afecta a estos, consulta Configura los campos cifrados para una búsqueda y almacenamiento óptimos.

Para utilizar los prefijos, sufijos o consultas de query de Public Preview con mongosh, debe descargar por separado la Librería compartida de cifrado automático 8.2 o superior, y luego especificar la ruta de la librería en mongosh usando la opción --cryptSharedLibPath.

Puedes configurar el cifrado para cada campo en el arreglo fields de tu encryptedFieldsObject. La siguiente tabla describe los subcampos disponibles:

Campo
Tipo
Descripción

path

String

Requerido. La ruta de notación de puntos al campo a cifrar, como "patientInfo.ssn". Puedes especificar cualquier campo excepto el campo _id.

bsonType

String

Obligatorio. El tipo BSON del campo que se va cifrar. Para obtener una lista completa de los tipos admitidos, consulte BSON types admitidos y no admitidos.

keyId

UUID

opcional. El UUID de la DEK a utilizar para encriptar este campo. El UUID es un BSON datos binarios elemento del subtipo 4.

Los ID de clave deben ser únicos. Especificar un keyId que ya está en uso devuelve un error.

Si se omite, puedes utilizar el método asistente createEncryptedCollection() para crear claves automáticamente.

queries

Objeto

opcional. Permite consultas sobre este campo cifrado. Si se omite, el campo se cifra pero no se puede consultar.

Para obtener más información sobre las opciones de query, consulta Configura campos cifrados para una búsqueda y almacenamiento óptimos.

1

Incluye un encryptedFieldsObject con un fields arreglo:

const encryptedFieldsObject = {
fields: []
}
2
  1. Agregue las cadenas path y bsonType a un documento dentro del arreglo de campos:

    const encryptedFieldsObject = {
    fields: [
    {
    path: "myDocumentField",
    bsonType: "int"
    }
    ]
    }

    Importante

    Puedes especificar cualquier campo para el cifrado excepto el campo _id.

  2. Opcionalmente, establece un campo keyId con el ID DEK.

    Importante

    Los ID de clave deben ser únicos, de lo contrario, el servidor devuelve un error.

    Al configurar AutoEncryptionSettings en el cliente, puedes utilizar el método asistente createEncryptedCollection para crear claves automáticamente.

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

Esto permite consultar con los operadores $eq, $ne, $in y $nin.

Agrega el objeto queries y establece queryType en "equality":

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

Esto permite consultar con los operadores $lt, $lte, $gt y $gte.

Para obtener detalles sobre cómo las siguientes opciones afectan la seguridad y el rendimiento, consulte Configurar campos cifrados para una búsqueda y almacenamiento óptimos.

  1. Agrega el objeto queries y establece queryType en "range":

    {
    path: "myDocumentRangeField",
    bsonType: "int",
    queries: { queryType: "range" }
    }
  2. Configura los siguientes campos:

    Campo
    Tipo
    Descripción

    Igual que campo bsonType

    Obligatorio si bsonType es decimal o double. Opcional pero muy recomendable si es int, long o date. Por defecto, se establecen en los valores mínimos y máximos del bsonType.

    Cuando sea posible, especificar límites en una query mejora el rendimiento. Si consulta valores fuera de estos límites inclusivos, MongoDB devuelve un error.

    {
    path: "myDocumentRangeField",
    bsonType: "int",
    queries: { queryType: "range",
    min: 0,
    max: 1200
    }
    }
5

Estos tipos de consultas son solo para campos string. Puedes habilitar tanto prefixPreview como suffixPreview en el mismo campo, pero no puedes habilitar ninguno si usas substringPreview.

Advertencia

Las consultas de prefijos, sufijos y subcadenas están en vista previa pública

Las búsquedas por prefijo, sufijo y subcadena de Queryable Encryption ya están disponibles en la vista previa pública en MongoDB 8.2. No habilite estos tipos de query en producción. La funcionalidad de la vista previa pública será incompatible con la funcionalidad GA, y deberá descartar cualquier colección que permita estas queries.

  1. Agrega el objeto queries y define queryType como "prefixPreview", "suffixPreview" o "substringPreview":

    {
    path: "myDocumentStringField",
    bsonType: "string",
    queries: { queryType: "substringPreview" }
    }
  2. Configura los siguientes campos.

    Para obtener detalles sobre cómo afectan la seguridad y el rendimiento, consulta Configurar campos cifrados para búsqueda y almacenamiento óptimos.

    Campo
    Tipo
    Descripción

    entero

    substringPreview solo queries. La longitud máxima permitida para un campo indexado por subcadena.

    entero

    La longitud mínima permitida de prefijo/sufijo/subcadena para query.

    entero

    La longitud máxima permitida de prefijo/sufijo/subcadena para query.

    IMPORTANTE: Este ajuste tiene un gran impacto en el rendimiento de las query. Limítalo siempre que sea posible.

    Booleano

    opcional. Si las consultas distinguen entre mayúsculas y minúsculas. Por defecto true.

    Booleano

    opcional. Si las búsquedas son sensibles a los signos diacríticos. Por defecto true.

    {
    path: "myDocumentStringField",
    bsonType: "string",
    queries: {
    "queryType": "substringPreview",
    "strMaxLength": 30,
    "strMinQueryLength": 1,
    "strMaxQueryLength": 20,
    "caseSensitive": false
    }
    }

Este ejemplo muestra cómo crear un esquema de cifrado para datos hospitalarios.

Considere el siguiente documento que contiene información de identidad personal (PII), información de tarjetas de crédito e información médica sensible:

{
"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 garantizar que la información médica confidencial y los datos personales identificables permanezcan seguros, este esquema de cifrado añade los campos relevantes:

const encryptedFieldsObject = {
fields: [
{
path: "patientId",
bsonType: "int"
},
{
path: "patientInfo.ssn",
bsonType: "string"
},
{
path: "medications",
bsonType: "array"
},
{
path: "patientInfo.billing",
bsonType: "object"
}
]
}

Añadir la propiedad queries hace que los campos patientId y patientInfo.ssn sean consultables. Este ejemplo permite consultas de igualdad:

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

Volver

Campos y query

En esta página