Overview
显式加密提供了对安全性的细粒度控制,但代价是在配置集合和为 MongoDB 驱动程序编写代码时增加了复杂性。 通过显式加密,您可以为对数据库执行的每个操作指定如何加密文档中的字段,并在整个应用程序中包含此逻辑。
以下 MongoDB 产品提供显式加密:
MongoDB 社区服务器
MongoDB Enterprise Advanced
MongoDB Atlas
使用显式加密
创建 ClientEncryption 实例
ClientEncryption is an abstraction used across drivers and mongosh that encapsulates the Key Vault collection and KMS operations involved in explicit encryption.
要创建ClientEncryption实例,请指定:
经过配置,具备您客户主密钥 KMS 托管提供商访问权限的
kmsProviders对象密钥保管库集合的命名空间
如果您使用 MongoDB Community Server,请将
bypassQueryAnalysis选项设置为True可以访问您的密钥保管库集合的
MongoClient实例
有关更多ClientEncryption选项,请参阅适用于 Queryable Encryption 的 MongoClient 选项。
加密读写操作中的字段
您必须在整个应用程序中更新读写操作,使应用程序在执行读写操作前对字段进行加密。
要加密字段,请使用ClientEncryption实例的encrypt方法。 指定以下内容:
要加密的值
数据加密密钥的 ID
该算法
unindexed:对于不可查询的加密字段。indexed: 支持相等查询。range: 支持范围查询。string:支持前缀、后缀和子字符串查询。
您所选算法的参数。显式加密不使用加密模式,因此您必须在每次调用
encrypt时传递这些参数,无论是读取还是写入操作。读取操作必须指定与指定算法匹配的 queryType。
注意
indexed、range和string算法需要服务器上的索引,在 db.createCollection() 期间指定 encryptedFields 选项时创建。
算法和查询类型
算法 | queryType(读取操作) | 附加参数 |
|---|---|---|
|
|
|
|
| |
|
| |
|
|
对于写入操作,您可以在同一个调用中指定 prefix 和 suffix 选项,以便为两种查询类型对字段建立索引。您不能将 substring 与 prefix 或 suffix 同时设置。
注意
从 MongoDB 9.0 开始,使用 text 算法的 prefixPreview、suffixPreview 和 substringPreview 查询类型已弃用并删除。取而代之,使用 prefix、suffix 或 substring 查询类型和 string 算法。
自动解密
要自动解密字段,请按如下方式配置MongoClient实例:
指定
kmsProviders对象指定密钥保管库集合
如果您使用 MongoDB Community Server,请将
bypassQueryAnalysis选项设置为True
注意
MongoDB Community 服务器中的自动解密
MongoDB Community 服务器提供自动解密功能。自动加密需要 MongoDB Enterprise 或 MongoDB Atlas。
服务器端字段级加密实施
对集合中的特定字段实施加密的步骤。
如果您的MongoDB实例强制执行特定字段的加密,则任何使用显式加密执行Queryable Encryption的客户端都必须按指定方式对这些字段进行加密。 要学习;了解如何设立服务器端Queryable Encryption强制实施,请参阅加密字段和启用的查询。
了解详情
要了解有关密钥保管库集合、数据加密密钥和客户主密钥的更多信息,请参阅加密密钥和密钥保管库。
要了解有关 KMS 提供商和 kmsProviders 对象的详情,请参阅 KMS 提供商。