ClientEncryption.encrypt(keyId, value, algorithm or encOptions)ClientEncryption.encrypt()criptografavaluecom o especificadokeyIde o algoritmo especificado poralgorithmencOptionsou.encrypt()suporta criptografia explícita (manual) de valores de campo .Retorna: Um objeto
binary datacom subtipo.6
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
clientEncryption = db.getMongo().getClientEncryption() clientEncryption.encrypt( keyId, value, algorithm or encOptions, )
Parâmetro | Tipo | Descrição |
|---|---|---|
|
| A chave de criptografia de dados para utilizar para criptografar O UUID é um objeto BSON |
| Consulte Tipos de JSON não suportados. | O valor a ser criptografado. |
| string ou documento |
|
Comportamento
O mongosh nível do campo no lado do cliente e os métodos de Queryable Encryption do exigem uma conexão de banco de dados configurada para criptografia do lado do cliente . Se a conexão atual do banco de dados não tiver sido iniciada com a criptografia em nível de campo do lado do cliente ativada, faça o seguinte:
Utilize o construtor
Mongo()domongoshpara estabelecer uma conexão com as opções de criptografia do nível do campo do lado do cliente exigido. O métodoMongo()suporta os seguintes fornecedores de serviço de gerenciamento de chaves (KMS) para gerenciamento da chave mestra do cliente (CMK):
ou
- Utilize as opções da linha de comando do
mongoshpara estabelecer uma conexão com as opções exigidas. As opções de linha de comando são compatíveis apenas com o provedor Amazon Web Services KMS para gerenciamento da chave mestra do cliente.
Tipos de BSON não suportados
Você não pode utilizar para criptografar valores com os seguintes tipos de encrypt() BSON:
minKeymaxKeynullundefined
Se criptografar um campo AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic com, encrypt() não suportará os seguintes tipos de BSON:
doubledecimal128boolobjectarray
Exemplos
Criptografia no nível de campo do cliente
O exemplo a seguir usa um KMS managed localmente para a configuração de criptografia no nível do campo do lado do cliente.
Crie sua conexão criptografada
Inicie o mongosh
Executar:
mongosh --nodb --nodbsignifica não se conectar a um banco de dados de dados.Gerar uma string de chave
Gere uma string base de 64 96bytes:
const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64") Criar um objeto de opções de criptografia
Para criar um objeto de opções de criptografia no nível do campo do lado do cliente , use a string
TEST_LOCAL_KEYda etapa anterior:var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, TEST_LOCAL_KEY) } } } Criar um objeto de cliente criptografado
Para criar um objeto de cliente criptografado, use o construtor
Mongo(). Substitua omongodb://myMongo.example.netURI pelo URI da string de conexão para o cluster de destino. Por exemplo:encryptedClient = Mongo( "mongodb://myMongo.example.net:27017/?replSetName=myMongo", autoEncryptionOpts )
Criptografar seus dados
Recupere o ClientEncryption objeto e utilize ClientEncryption.encrypt() o método para criptografar um valor com uma chave de criptografia de dados específica e o UUID algoritmode criptografia:
clientEncryption = encryptedClient.getClientEncryption(); clientEncryption.encrypt( UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"), "123-45-6789", "AEAD_AES_256_CBC_HMAC_SHA_512-Random" )
Você também pode especificar o algoritmo usando um documento com um campo algorithm:
clientEncryption = encryptedClient.getClientEncryption(); clientEncryption.encrypt( UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"), "123-45-6789", { algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Random" } )
Exemplos de resultados
Se bem sucedido, retorna o valorencrypt() codificado:
BinData(6,"AmTi2H3xaEk8u9+jlFNaLLkC3Q/+kmwDbbWrq+h9nuv9W+u7A5a0UnpULBNZH+Q21fAztPpU09wpKPrju9dKfpN1Afpj1/ZhFcH6LYZOWSBBOAuUNjPLxMNSYOOuITuuYWo=")
Para obter a documentação completa sobre como iniciar conexões do MongoDB com a criptografia no nível do campo do lado do cliente habilitada, consulte Mongo().
Queryable Encryption
O exemplo a seguir usa um KMS gerenciado localmente para a configuração de Queryable Encryption.
Crie sua conexão criptografada
Inicie o mongosh
Inicie o cliente
mongosh.mongosh --nodb Gere sua chave
Para configurar a Queryable Encryption para uma chave gerenciada localmente, gere uma string64de bytes codificada de base 96sem quebras de linha.
const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64") Criar as opções de Queryable Encryption
Crie as opções de Queryable Encryption usando a string de chave local gerada:
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, TEST_LOCAL_KEY) } } } Crie seu cliente criptografado
Use o construtor
Mongo()com as opções de Queryable Encryption configuradas para criar uma conexão com o banco de dados. Substitua o URI domongodb://myMongo.example.netpelo URI da string de conexão do cluster de destino.encryptedClient = Mongo( "mongodb://myMongo.example.net:27017/?replSetName=myMongo", autoEncryptionOpts )
Criptografar seus dados
Recupere o ClientEncryption objeto e utilize ClientEncryption.encrypt() o método para criptografar um valor com uma chave de criptografia de dados específica e o UUID algoritmode criptografia:
const eDB = "encrypted" const eKV = "__keyVault" const clientEncryption = encryptedClient.getClientEncryption(); const keyVaultClient = Mongo().getDB(eDB).getCollection(eKV) const dek = keyVaultClient.findOne({ keyAltNames: "dataKey1" }) clientEncryption.encrypt( dek._id, "123-45-6789", "Unindexed" )
Você também pode especificar o algoritmo usando um documento contendo os campos:
algorithmqueryTypecontentionFactor
const eDB = "encrypted" const eKV = "__keyVault" const clientEncryption = encryptedClient.getClientEncryption(); const keyVaultClient = Mongo().getDB(eDB).getCollection(eKV) const dek = keyVaultClient.findOne({ keyAltNames: "dataKey1" }) clientEncryption.encrypt( dek._id, "123-45-6789", { algorithm: "Indexed", queryType: "equality", contentionFactor: 8 } )
Exemplos de resultados
Se bem sucedido, retorna o valorencrypt() codificado:
Binary(Buffer.from("05b100000005640020000000005ab3581a43e39a8e855b1ac87013e841735c09d19ae86535eea718dd56122ba50573002000000000703d2cba9832d90436c6c92eb232aa5b968cdcd7a3138570bc87ef0a9eb3a0e905630020000000009cb61df010b1bb54670a5ad979f25f4c48889059dfd8920782cf03dd27d1a50b05650020000000003f5acea703ea357d3eea4c6a5b19139a580089341424a247839fd4d5cf0d312a12636d00040000000000000000", "hex"), 6)
Saiba mais
Para obter a documentação completa sobre como iniciar conexões do MongoDB com a criptografia no nível do campo do lado do cliente habilitada, consulte Mongo().