Docs 菜单

Docs 主页开发应用程序MongoDB Manual

显式(手动)客户端字段级加密

在此页面上

  • 概述
  • 启用显式客户端字段级加密
  • 服务器端字段级加密实施

MongoDB 4 。 2 + 兼容驱动程序、 mongosh和 MongoDB 4 。 2或更高版本的旧版mongo Shell 支持使用特定数据加密密钥和加密算法对字段进行显式加密或解密。

应用程序必须修改与构造读取和写入操作相关的任何代码,以包含通过驱动程序加密库的加密/解密逻辑。 应用程序负责根据每个操作选择适当的数据加密密钥进行加密/解密。

mongosh 提供了以下用于执行显式加密和解密的方法:

MongoDB 4 。 2 + 兼容驱动程序具有用于执行显式客户端字段级加密的特定语法。有关4的完整列表,请参阅驱动程序兼容性表。 2 + 兼容驱动程序,支持客户端字段级加密。有关执行客户端字段级加密的具体说明,请参阅首选驱动程序的文档。

mongosh发出的以下操作对taxid字段进行显式加密,以作为写入操作的一部分。

clientEncryption = encryptedClient.getClientEncryption()
db.getSiblingDB("hr").getCollection("employees").insertOne({
"name" : "J. Doe",
"taxid" : clientEncryption.encrypt(
UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"),
"123-45-6789",
"AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
)
})

作为读操作的一部分,从mongosh发出的以下操作对taxid字段进行显式加密:

encrypt = encryptedClient.getClientEncryption()
db.getSiblingDB("hr").getCollection("employees").findOne({
"taxid" : clientEncryption.encrypt(
UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"),
"123-45-6789",
"AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
)
})

这些操作假定数据库配置指定了密钥保管库和KMS,可以访问指定的数据加密密钥及其关联的客户主密钥。

对于返回加密字段的读操作, 仅当 驱动程序/shell 配置为可以访问用于保护这些值的密钥时,驱动程序/shell 才会 自动解密 加密值。

每个官方 MongoDB 4 . 2 + 兼容驱动程序引入了支持客户端字段级加密和数据加密密钥管理的新功能。请参阅您首选驱动程序的文档,获取有关实施显式客户端字段级加密的特定于语言的说明。

mongoshMongo()方法添加了一个附加选项,用于实例化具有显式客户端字段级加密的数据库连接。有关完整示例,请参阅连接到已启用客户端加密的集群。

在实例化数据库连接以启用显式客户端字段级加密时,应用程序必须指定以下组件:

  • 数据加密密钥的密钥保管库。密钥保管库可以驻留在远程 MongoDB cluster,也可以驻留在存储客户端加密数据的 MongoDB cluster 上。

  • 受支持的KMS提供商,用于托管客户主密钥。 MongoDB 在将所有数据加密密钥存储在密钥保管库之前,使用指定的客户主密钥对其进行加密,仅元数据未加密。

    4 。 2 + 兼容驱动程序、 mongosh和 MongoDB 4 。 2或更高版本的旧版mongo Shell 需要访问 KMS 才能加密和解密受保护字段创建新的数据加密密钥。

MongoDB 4 。 2服务器支持使用模式验证来强制对collection中的特定字段进行加密。如果collection验证$jsonSchema要求对某个字段进行加密,则执行显式(手动)字段级加密的客户端必须encrypt该字段。

有关服务器端客户端字段级加密实施的完整文档,请参阅实施字段级加密模式。

← mongocryptd