Nuevo en la versión 7.0.
db.createEncryptedCollection(collName, options)db.createEncryptedCollection()crea una colección cifrada especificada porcollNameen la base de datos actual.Este método es un envoltorio alrededor
ClientEncryption.createEncryptedCollection()que crea automáticamente claves de datos siencryptedFields.fields[*].keyIdesnullo se omite en laoptions.createCollectionOptions.encryptedFieldsdefinición.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
db.createEncryptedCollection() tiene la siguiente sintaxis:
db.createEncryptedCollection( collName, { provider: kmsProviderName, createCollectionOptions: encryptedFieldsMap, masterKey: customerMasterKeyCredentials } )
Campos de comandos
db.createEncryptedCollection() toma estos campos:
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| string | Requerido | Nombre de la colección que se va a cifrar en la base de datos actual. |
| Documento | Requerido | Opciones para configurar la colección encriptada. |
| string | Requerido | KMS que está utilizando para almacenar su clave maestra de cliente. |
| Documento | Requerido | Campos a cifrar. Debe contener un |
| Documento | Opcional | Especifica las credenciales y los campos de identificación de clave necesarios para acceder a la clave maestra cuando el proveedor de KMS es AWS, GCP o Azure. Opcional cuando el proveedor de KMS es |
Comportamiento
Los métodos de cifrado de campo y consulta del lado del cliente requieren una conexión a la base de datos configurada para el cifrado del lado del cliente. Si la conexión a la base de datos actual no se inició con el cifrado de campo del lado del cliente habilitado, puede ocurrir lo mongosh siguiente:
Utilice el constructor
Mongo()demongoshpara establecer una conexión con las opciones de cifrado de campo requeridas del lado del cliente. ElMongo()método admite los siguientes proveedores de Servicios de Gestión de Claves (KMS) para la gestión de la Clave Maestra del Cliente (CMK):
or
Utilice las
mongoshopciones de línea de comandos para establecer una conexión con las opciones requeridas. Estas opciones solo son compatibles con el proveedor KMS de Amazon Web Services para la gestión de CMK.
Comportamiento del contenedor
El método se ejecuta en el contexto del db.createEncryptedCollection() actual db y utiliza la misma conexión habilitada para cifrado consultable que la mongosh sesión actual. Internamente, llama a con el nombre ClientEncryption.createEncryptedCollection() de la base de datos actual, el nombre de la colección especificada y el documento de opciones proporcionado.
Cuando options.createCollectionOptions.encryptedFields.fields[*].keyId es null o se omite, el método crea automáticamente las claves de datos necesarias en el almacén de claves y rellena los valores keyId correspondientes en la definición encryptedFields de la colección creada.
Ejemplo
El siguiente ejemplo utiliza un KMS administrado localmente para la configuración de cifrado consultable.
Crea tu conexión cifrada
Inicia mongosh
Ejecuta:
mongosh --nodb --nodbsignifica no conectarse a una base de datos.Generar un String
Genera una cadena base de 64 96bytes:
const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64") Crear un objeto de opciones de cifrado
Para crear un objeto de opciones de cifrado a nivel de campo del lado del cliente, utilice la cadena
TEST_LOCAL_KEYdel paso anterior:var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, TEST_LOCAL_KEY) } } } Crear un objeto de cliente cifrado
Para crear un objeto cliente cifrado, utilice el constructor. Reemplace
Mongo()elmongodb://myMongo.example.netURI con el URI de la cadena de conexión del clúster de destino. Por ejemplo:encryptedClient = Mongo( "mongodb://myMongo.example.net:27017/?replSetName=myMongo", autoEncryptionOpts )
Especifique qué campos desea cifrar
Cree un encryptedFieldsMap para especificar qué campos cifrar:
const encryptedFieldsMap = { encryptedFields: { fields: [ { path: "secretField", bsonType: "string", queries: { queryType: "equality" }, // keyId omitted; db.createEncryptedCollection() generates it }, ], }, };
Cree su colección cifrada
Cree una colección enc.users cifrada utilizando la función auxiliar en la base de datos actual:
const encDb = encryptedClient.getDB("enc"); let result = encDb.createEncryptedCollection( "users", { provider: "local", createCollectionOptions: encryptedFieldsMap, masterKey: {} // masterKey is optional when provider is local } );
Comprueba tu objeto de resultado
db.createEncryptedCollection() devuelve un objeto de resultado que incluye el nombre de la colección creada y la definición encryptedFields de la colección.
Compruebe el valor de result.collection para confirmar que la colección se creó en la ubicación deseada y, opcionalmente, inspeccione el encryptedFields poblado:
enc> result.collection enc.users enc> result.encryptedFields { fields: [ { path: "secretField", bsonType: "string", queries: { queryType: "equality", /* ... */ }, keyId: UUID("...") } ] }
Obtén más información
Para obtener documentación completa sobre cómo iniciar conexiones MongoDB con el cifrado de nivel de campo del lado del cliente habilitado,
Mongo()consulte.Para un ejemplo completo de cómo crear y consultar una colección cifrada, consulta Queryable Encryption Quick Start.