Overview
显式加密提供了对安全性的细粒度控制,但代价是在配置集合和为 MongoDB 驱动程序编写代码时增加了复杂性。 通过显式加密,您可以为对数据库执行的每个操作指定如何加密文档中的字段,并在整个应用程序中包含此逻辑。
以下 MongoDB 产品提供显式加密:
MongoDB 社区服务器
MongoDB Enterprise Advanced
MongoDB Atlas
使用显式加密
创建 ClientEncryption 实例
ClientEncryption 是跨驱动程序和 mongosh 使用的抽象,封装了显式加密中涉及的 Key Vault集合和KMS操作。
要创建ClientEncryption实例,请指定:
经过配置,具备您客户主密钥 KMS 托管提供商访问权限的
kmsProviders对象密钥保管库集合的命名空间
如果您使用 MongoDB Community Server,请将
bypassQueryAnalysis选项设置为True可以访问您的密钥保管库集合的
MongoClient实例
有关更多ClientEncryption选项,请参阅适用于 Queryable Encryption 的 MongoClient 选项。
加密读写操作中的字段
您必须在整个应用程序中更新读写操作,使应用程序在执行读写操作前对字段进行加密。
要加密字段,请使用ClientEncryption实例的encrypt方法。 指定以下内容:
要加密的值
数据加密密钥的 ID
算法
unindexed:用于不可查询的加密字段。indexed:支持相等查询。range:支持范围查询。text:支持 prefixPreview、suffixPreview 和 substringPreview 查询。
对于可查询的加密字段的读取操作,请指定 queryType。以下所有算法都需要在服务器上索引,该索引是您在 期间指定
encryptedFieldsdb.createCollection()选项时创建的。对于可查询的加密字段的读取操作,请指定任何其他选项,例如范围字段的最小和最大可查询值。
算法和查询类型
算法 | queryType | 其他参数 |
|---|---|---|
|
| |
|
| |
|
|
|
注意
从MongoDB 8.0 开始,rangePreview Queryable Encryption算法已弃用并删除。请改用 range算法。
自动解密
要自动解密字段,请按如下方式配置MongoClient实例:
指定
kmsProviders对象指定密钥保管库集合
如果您使用 MongoDB Community Server,请将
bypassQueryAnalysis选项设置为True
注意
MongoDB Community 服务器中的自动解密
MongoDB Community 服务器提供自动解密功能。自动加密需要 MongoDB Enterprise 或 MongoDB Atlas。
服务器端字段级加密实施
对集合中的特定字段实施加密的步骤。
Indexed 和Range字段需要在服务器上有索引。 通过在 db.createCollection() 中指定encryptedFields选项来创建索引
如果您的MongoDB实例强制执行特定字段的加密,则任何使用显式加密执行Queryable Encryption的客户端都必须按指定方式对这些字段进行加密。 要学习;了解如何设立服务器端Queryable Encryption强制实施,请参阅加密字段和启用的查询。
了解详情
要了解有关密钥保管库集合、数据加密密钥和客户主密钥的更多信息,请参阅加密密钥和密钥保管库。
要学习;了解有关KMS提供程序和 kmsProviders 对象的更多信息,请参阅KMS提供程序。