Docs Menu
Docs Home
/ /

Crear un esquema de cifrado

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

Importante

El cifrado consultable admite consultas de igualdad y de rango. Puede configurar un campo para un solo tipo de consulta.

Al configurar campos cifrados para que sean consultables, tenga en cuenta el rendimiento y la seguridad. Para obtener más información sobre cómo cada opción de configuración afecta estos aspectos, consulte Configurar campos cifrados para una búsqueda y un almacenamiento óptimos.

Para utilizar las consultas de prefijo, sufijo o subcadena de Vista previa pública con mongosh, debe descargar por separado la biblioteca compartida de cifrado automático 8.2 o superior, luego especificar la ruta de la biblioteca a mongosh usando la opción --cryptSharedLibPath.

1

Incluya un encryptedFieldsObject con una matriz fields anidada:

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

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

    Importante

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

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

    Importante

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

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

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

Esto permite realizar consultas con los $eq $ne$inoperadores,,$nin y.

Agregue el objeto queries y establezca queryType en "equality":

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

Esto permite realizar consultas con los $lt $lte$gtoperadores,,$gte y.

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

  1. Agregue el objeto queries y establezca queryType en "range":

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

    Campo
    Tipo
    Descripción

    Lo mismo que el campo bsonType

    Obligatorio si bsonType es decimal o double. Opcional, pero muy recomendable si es int, long o date. El valor predeterminado son los valores mínimo y máximo de bsonType.

    Siempre que sea posible, especificar límites en una consulta mejora el rendimiento. Si se consultan 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 consulta son solo para los campos string. Puede habilitar prefixPreview y suffixPreview en el mismo campo, pero no podrá habilitar ninguno si usa substringPreview.

Advertencia

Las consultas de prefijo, sufijo y subcadena están en vista previa pública

Las consultas de prefijo, sufijo y subcadena de cifrado consultable están disponibles en la vista previa pública de MongoDB 8.2. No habilite estos tipos de consulta en producción. La función de vista previa pública será incompatible con la función GA, y deberá eliminar cualquier colección que las habilite.

  1. Agregue el objeto queries y establezca queryType en "prefixPreview", "suffixPreview" o "substringPreview":

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

    Para obtener detalles sobre cómo afectan la seguridad y el rendimiento,consulte Configurar campos cifrados para una búsqueda y un 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 realizar consultas.

    entero

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

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

    Booleano

    Opcional. Indica si las consultas distinguen entre mayúsculas y minúsculas. El valor predeterminado es true.

    Booleano

    Opcional. Indica si las consultas distinguen entre diacríticos. El valor predeterminado es 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 del hospital.

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

{
"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 PII y la información médica confidencial se mantengan seguras, este esquema de cifrado agrega los campos relevantes:

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

Al añadir la propiedad queries, los campos patientId y patientInfo.ssn se pueden consultar. Este ejemplo permite realizar 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 consultas

En esta página