显式加密
概述
显式加密提供了对安全的细粒度控制,但配置集合和为MongoDB驱动程序编写代码时复杂性增加。使用显式加密时,您指定如何加密数据库操作中每个操作的文档字段,并在整个应用程序中包含此逻辑。
显式加密在以下MongoDB产品中可用
MongoDB社区服务器
MongoDB企业高级版
MongoDB Atlas
使用显式加密
创建ClientEncryption实例
ClientEncryption
是一个跨驱动程序和mongosh
使用的抽象,用于封装显式加密中涉及到的密钥保管库集合和KMS操作。
要创建ClientEncryption
实例,指定
一个配置了访问您的客户主密钥托管KMS提供商的
kmsProviders
对象您的密钥保管库集合的命名空间
如果您使用MongoDB社区服务器,请将
bypassQueryAnalysis
选项设置为True
一个具有访问您的密钥库集合权限的
MongoClient
实例
有关更多ClientEncryption
选项,请参阅可查询加密的MongoClient选项.
在读写操作中加密字段
您必须更新您应用程序中的所有读写操作,以确保在执行读写操作之前加密字段。
要加密字段,请使用您的ClientEncryption
实例的encrypt
方法。指定以下内容
要加密的值
使用的算法:
Indexed
、Unindexed
或Range
数据加密键的ID
(如果您使用的是
Indexed
或Range
算法)内容竞争因子如果您使用
Indexed
或Range
算法执行读取操作,请设置您字段定义的查询类型。(如果您使用的是
Range
算法)范围选项min, max
算法选择
如果您在字段上指定了queryType
,请使用Indexed
或Range
算法。
Indexed
支持等值查询。 Range
支持范围查询。 Indexed
和 Range
字段需要在服务器上创建索引。该索引通过在 db.createCollection()
中指定 encryptedFields
选项来创建。
注意
从 MongoDB 8.0 开始,rangePreview
可查询加密算法已被弃用并移除。请使用 Range
算法代替。
如果您的可查询加密集合使用 rangePreview
,则必须在升级到 MongoDB 8.0 之前删除集合。
自动解密
要自动解密字段,请按以下方式配置您的 MongoClient
实例
指定一个
kmsProviders
对象指定您的密钥保管库集合
如果您使用MongoDB社区服务器,请将
bypassQueryAnalysis
选项设置为True
注意
MongoDB 社区服务器中的自动解密
自动解密在 MongoDB 社区服务器中可用。自动加密需要 MongoDB Enterprise 或 MongoDB Atlas。
服务器端字段级加密强制执行
步骤 来强制执行集合中特定字段的加密。
Indexed
和 Range
字段需要在服务器上创建索引。该索引通过在 db.createCollection()
中指定 encryptedFields
选项来创建。
如果您的 MongoDB 实例强制执行特定字段的加密,任何执行带有显式加密的可查询加密的客户端都必须按照指定方式加密这些字段。有关如何设置服务器端可查询加密强制执行的说明,请参阅 加密字段和启用的查询。
了解更多
要了解更多关于密钥保管库集合、数据加密密钥和客户主密钥的信息,请参阅加密密钥和密钥保管库。
要了解更多关于密钥管理服务(KMS)提供商和kmsProviders
对象的信息,请参阅KMS 提供商。