ClientEncryption.encrypt()
ClientEncryption.encrypt(keyId, value, algorithm or encOptions)
ClientEncryption.encrypt()
criptografavalue
usando okeyId
especificado e o algoritmo especificado poralgorithm
ouencOptions
.encrypt()
suporta criptografia explícita (manual) de valores de campo.Retorna: Um binary data
objeto com 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 |
| O valor a ser criptografado. | |
| string ou documento |
|
Comportamento
Os métodos de nível do campo no lado do cliente e Queryable Encryption do mongosh
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()
domongosh
para 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
mongosh
para estabelecer uma conexão com as opções exigidas. As opções de linha de comando são compatíveis apenas com o fornecedor Amazon Web Services KMS para gerenciamento da chave mestra do cliente.
Tipos de BSON não suportados
Você não pode usar encrypt()
para criptografar valores com os seguintes BSON types:
minKey
maxKey
null
undefined
Se criptografar um campo com AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic
, encrypt()
não suportará os seguintes BSON types:
double
decimal128
bool
object
array
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 --nodb
significa 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_KEY
da 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.net
URI 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 objeto ClientEncryption
e utilize o método ClientEncryption.encrypt()
para criptografar um valor com uma chave de criptografia de dados UUID
específica e o algoritmo de 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, encrypt()
retorna o valor 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.net
pelo 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 objeto ClientEncryption
e utilize o método ClientEncryption.encrypt()
para criptografar um valor com uma chave de criptografia de dados UUID
específica e o algoritmo de 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:
algorithm
queryType
contentionFactor
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, encrypt()
retorna o valor 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()
.