Acerca de esta tarea
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.
Antes de comenzar
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.
Pasos
Especifica los campos a cifrar.
Agregue las cadenas
pathybsonTypea 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.Opcionalmente, establezca un campo
keyIdcon el ID DEK.Importante
Los identificadores de clave deben ser únicos; de lo contrario, el servidor devuelve un error.
Al configurar
AutoEncryptionSettingsen el cliente, puede utilizar el método auxiliarcreateEncryptedCollectionpara crear claves automáticamente.{ path: "myDocumentField", bsonType: "int", keyId: "<unique data encryption key>" }
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 un almacenamiento óptimos.
Agregue el objeto
queriesy establezcaqueryTypeen"range":{ path: "myDocumentRangeField", bsonType: "int", queries: { queryType: "range" } } Establezca los siguientes campos:
CampoTipoDescripciónLo mismo que el campo
bsonTypeObligatorio si
bsonTypeesdecimalodouble. Opcional, pero muy recomendable si esint,longodate. El valor predeterminado son los valores mínimo y máximo debsonType.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 } }
Habilite consultas de prefijo, sufijo o subcadena en los campos deseados.
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.
prefixPreviewLas consultas habilitan las expresiones de agregación$encStrStartsWith$encStrNormalizedEqy.suffixPreviewLas consultas habilitan las expresiones de agregación$encStrEndsWith$encStrNormalizedEqy.substringPreviewLas consultas habilitan las expresiones de agregación$encStrContains$encStrNormalizedEqy.
Agregue el objeto
queriesy establezcaqueryTypeen"prefixPreview","suffixPreview"o"substringPreview":{ path: "myDocumentStringField", bsonType: "string", queries: { queryType: "substringPreview" } } 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.
CampoTipoDescripciónentero
substringPreviewsolo 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 } }
Ejemplo
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" }, ] }