ClientEncryption.decrypt(encryptedValue)如果当前数据库连接配置为访问权限对密钥管理服务 (KMS) 和用于加密
encryptionValue的密钥保管库的访问权限,则ClientEncryption.decrypt()会解密encryptionValue。返回: 解密的值。
兼容性
此命令可用于以下环境中托管的部署:
- MongoDB Atlas :用于在云中部署MongoDB 的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
ClientEncryption.decrypt 通过以下语法实现:
clientEncryption = db.getMongo().getClientEncryption() clientEncryption.decrypt(encryptedValue)
encryptedValue 必须是使用客户端字段级加密创建的具有子类型 6 的binary data对象。
行为
从访问权限正确的密钥管理服务 (KMS ) 和密钥保管库的数据库连接 configured 发出的读取操作可以自动解密使用 ClientEncryption.encrypt()加密的字段值。客户端只需使用 decrypt() 来解密未存储在文档字段中的 Binary 子类型 6 值。
在数据库连接上启用客户端字段级加密
mongosh客户端字段级加密方法需要启用客户端字段级加密的数据库连接。如果当前数据库连接不是在启用客户端字段级加密的情况下启动的,则:
例子
以下示例使用本地托管的 KMS 进行客户端字段级加密配置。
创建加密连接
启动 mongosh
运行:
mongosh --nodb --nodb表示不连接到数据库。生成密钥string
生成一个基本 64 96 字节的string :
const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64") 创建加密选项对象
要创建客户端字段级加密选项对象,请使用上一步中的
TEST_LOCAL_KEYstring :var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, TEST_LOCAL_KEY) } } } 创建加密客户端对象
要创建加密的客户端对象,请使用
Mongo()构造函数。 将mongodb://myMongo.example.netURI 替换为目标集群的连接string URI 。 示例:encryptedClient = Mongo( "mongodb://myMongo.example.net:27017/?replSetName=myMongo", autoEncryptionOpts )
解密数据
检索 ClientEncryption对象并使用 ClientEncryption.decrypt() 方法对 ClientEncryption.encrypt()加密的值进行解密。
clientEncryption = encryptedClient.getClientEncryption(); clientEncryption.decrypt(BinData(6,"AmTi2H3xaEk8u9+jlFNaLLkC3Q/+kmwDbbWrq+h9nuv9W+u7A5a0UnpULBNZH+Q21fAztPpU09wpKPrju9dKfpN1Afpj1/ZhFcH6LYZOWSBBOAuUNjPLxMNSYOOuITuuYWo="))
结果示例
如果成功,decrypt() 将返回解密后的值:
"123-45-6789"
了解详情
有关在启用客户端字段级加密的情况下启动 MongoDB 连接的完整文档,请参阅Mongo() 。