Acerca de esta tarea
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.
Antes de comenzar
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.
Referencia de campo
Puedes configurar el cifrado para cada campo en el fields arreglo de tu encryptedFieldsObject. La siguiente tabla describe los subcampos disponibles:
Campo | Tipo | Descripción |
|---|---|---|
| String | Obligatorio. La ruta en notación de puntos al campo |
| 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. |
| UUID | Opcional. El UUID del DEK que se utilizará para cifrar este campo. El UUID es un BSON. datos binarios elemento del subtipo Los ID de clave deben ser únicos. Especificar un Si se omite, puedes utilizar el método asistente |
| 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. |
Pasos
Especifica los campos a cifrar.
Agregue las cadenas
pathybsonTypea 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.Si estás utilizando encriptación explícita, añade un campo
keyIdcon la ID del DEK:{ path: "myDocumentField", bsonType: "int", keyId: "<unique data encryption key>" } Tip
Con el cifrado automático, MongoDB crea llaves de cifrado para cada campo. Configuras
AutoEncryptionSettingsen el cliente, luego usas el método asistentecreateEncryptedCollectionpara crear tus colecciones.
Habilitar consultas de rango en los campos deseados.
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 almacenamiento óptimos.
Agregue el objeto
queriesy establezcaqueryTypeen"range":{ path: "myDocumentRangeField", bsonType: "int", queries: { queryType: "range" } } Configura los siguientes campos:
CampoTipoDescripciónIgual que campo
bsonTypeObligatorio si
bsonTypeesdecimalodouble. Opcional pero muy recomendable si esint,longodate. Por defecto, se establecen en los valores mínimos y máximos delbsonType.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 } }
Ejemplo
Este ejemplo muestra cómo crear un esquema de cifrado para datos hospitalarios.
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 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" }, ] }