Docs 菜单

Docs 主页开发应用程序MongoDB Manual

getClientEncryption()

在此页面上

  • 行为
  • 例子

4.2 版本中的新增功能

getClientEncryption()

返回当前数据库collection的ClientEncryption对象。ClientEncryption对象支持对字段值进行显式(手动)加密和解密,以实现客户端字段级加密。

getClientEncryption() 通过以下语法实现:

db.getMongo().getClientEncryption();
返回:当前数据库连接的ClientEncryption对象。

使用ClientEncryption对象访问以下显式加密方法:

mongo客户端字段级加密方法需要启用客户端字段级加密的数据库连接。 如果当前数据库连接不是在启用客户端字段级加密的情况下启动的,则:

getKeyVault()方法自动在keyAltNames字段上创建唯一索引,并使用仅针对存在keyAltNames的文档的部分索引筛选器。 getKeyVault()在密钥保管库集合中创建此索引。 这样可以防止同一密钥保管库中的任何两个数据加密密钥具有相同的密钥备用名称,从而避免混淆哪个数据加密密钥适合加密/解密。

警告

请勿删除getKeyVault()创建的唯一索引。客户端字段级加密操作取决于服务器强制执行的keyAltNames唯一性。删除索引可能会导致意外或不可预知的行为。

以下示例使用本地托管的 KMS 进行客户端字段级加密配置。

为本地托管的密钥配置客户端字段级加密需要指定一个不带换行符的 base64 编码的 96 字节字符串。以下操作生成满足所述要求的密钥并将其加载到mongo shell:

TEST_LOCAL_KEY=$(echo "$(head -c 96 /dev/urandom | base64 | tr -d '\n')")
mongosh --nodb --shell --eval "var TEST_LOCAL_KEY='$TEST_LOCAL_KEY'"

使用生成的本地密钥字符串创建客户端字段级加密对象:

var ClientSideFieldLevelEncryptionOptions = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"local" : {
"key" : BinData(0, TEST_LOCAL_KEY)
}
}
}

使用Mongo()构造函数创建具有客户端字段级加密选项的数据库连接。 将mongodb://myMongo.example.net URI 替换为目标集群的连接字符串 URI

encryptedClient = Mongo(
"mongodb://myMongo.example.net:27017/?replSetName=myMongo",
ClientSideFieldLevelEncryptionOptions
)

使用getClientEncryption()方法检索客户端加密对象:

clientEncryption = encryptedClient.getClientEncryption()

有关在启用客户端字段级加密的情况下启动 MongoDB 连接的完整文档,请参阅Mongo()

← KeyVault.getKeyByAltName()

在此页面上