显式加密
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 的 Queryable Encryption选项。
加密读写操作中的字段
您必须在整个应用程序中更新读写操作,使应用程序在执行读写操作前对字段进行加密。
要加密字段,请使用ClientEncryption
实例的encrypt
方法。 指定以下内容:
要加密的值
使用的算法:
Indexed
、Unindexed
或Range
数据加密密钥的 ID
争用因子(如果使用的是
Indexed
或Range
算法)如果使用
Indexed
或Range
算法执行读取操作,请设立为字段定义的查询类型。range
选项min、max (如果使用Range
算法)
算法选择
如果在字段上指定queryType
,请使用Indexed
或Range
算法。
Indexed
支持相等查询。 Range
支持范围查询。 Indexed
和Range
字段需要在服务器上建立索引。 通过在 db.createCollection()
中指定encryptedFields
选项来创建索引
注意
从MongoDB 8.0开始, rangePreview
Queryable Encryption算法已弃用并删除。请改用Range
算法。
如果您的Queryable Encryption集合使用rangePreview
,则必须删除该集合才能升级到MongoDB 8.0 。
自动解密
要自动解密字段,请按如下方式配置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 提供程序。