显式(手动)客户端字段级加密
Overview
MongoDB4.2 + 兼容驱动程序、mongosh
和MongoDB4.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 + 兼容驱动程序都引入了支持客户端字段级加密和数据加密密钥管理的新功能。 请参阅您首选驱动程序的文档,获取有关实施显式客户端字段级加密的特定于语言的说明。
mongosh
向Mongo()
方法添加了一个附加选项,用于实例化具有显式客户端字段级加密的数据库连接。 有关完整示例,请参阅连接到已启用客户端加密的集群。
在实例化数据库连接以启用显式客户端字段级加密时,应用程序必须指定以下组件:
数据加密密钥的密钥保管库。 密钥保管库可以驻留在远程MongoDB 集群上,也可以驻留在存储客户端加密数据的MongoDB 集群上。
受支持的KMS ( KMS )提供商,用于管理客户主密钥 (CMK)。 MongoDB 在将所有数据加密密钥存储在密钥保管库之前,使用指定的 CMK 对其进行加密,仅元数据未加密。
4.2+ 兼容驱动程序、
mongosh
和MongoDB 4.2 或更高版本的旧版mongo
shell需要访问权限KMS才能加密和解密受保护字段或创建新的数据加密密钥。
服务器端字段级加密实施
MongoDB 4.2服务器支持使用模式验证来实施对集合中的特定字段进行加密。 如果集合验证$jsonSchema
要求对字段进行加密,则执行显式(手动)字段级加密的客户端必须encrypt
该字段。
有关服务器端客户端字段级加密实施的完整文档,请参阅实施字段级加密模式。