文档菜单
文档首页
/
MongoDB 手册
/ / / / /

显式加密

本页内容

  • 概述
  • 使用显式加密
  • 创建 ClientEncryption 实例
  • 在读写操作中加密字段
  • 自动解密
  • 服务器端字段级加密强制执行
  • 了解更多

显式加密提供了对安全的细粒度控制,但配置集合和为MongoDB驱动程序编写代码时复杂性增加。使用显式加密时,您指定如何加密数据库操作中每个操作的文档字段,并在整个应用程序中包含此逻辑。

显式加密在以下MongoDB产品中可用

  • MongoDB社区服务器

  • MongoDB企业高级版

  • MongoDB Atlas

ClientEncryption是一个跨驱动程序和mongosh使用的抽象,用于封装显式加密中涉及到的密钥保管库集合和KMS操作。

要创建ClientEncryption实例,指定

  • 一个配置了访问您的客户主密钥托管KMS提供商的kmsProviders对象

  • 您的密钥保管库集合的命名空间

  • 如果您使用MongoDB社区服务器,请将bypassQueryAnalysis选项设置为True

  • 一个具有访问您的密钥库集合权限的MongoClient实例

有关更多ClientEncryption选项,请参阅可查询加密的MongoClient选项.

您必须更新您应用程序中的所有读写操作,以确保在执行读写操作之前加密字段。

要加密字段,请使用您的ClientEncryption实例的encrypt方法。指定以下内容

  • 要加密的值

  • 使用的算法:IndexedUnindexedRange

  • 数据加密键的ID

  • (如果您使用的是IndexedRange算法)内容竞争因子

  • 如果您使用IndexedRange算法执行读取操作,请设置您字段定义的查询类型。

  • (如果您使用的是Range算法)范围选项min, max

注意

查询类型

查询类型仅适用于读取操作。

有关查询类型的更多信息,请参阅支持的查询类型和行为。

如果您在字段上指定了queryType,请使用IndexedRange算法。

Indexed 支持等值查询。 Range 支持范围查询。 IndexedRange 字段需要在服务器上创建索引。该索引通过在 db.createCollection() 中指定 encryptedFields 选项来创建。

注意

从 MongoDB 8.0 开始,rangePreview 可查询加密算法已被弃用并移除。请使用 Range 算法代替。

如果您的可查询加密集合使用 rangePreview,则必须在升级到 MongoDB 8.0 之前删除集合。

要自动解密字段,请按以下方式配置您的 MongoClient 实例

  • 指定一个 kmsProviders 对象

  • 指定您的密钥保管库集合

  • 如果您使用MongoDB社区服务器,请将bypassQueryAnalysis选项设置为True

注意

MongoDB 社区服务器中的自动解密

自动解密在 MongoDB 社区服务器中可用。自动加密需要 MongoDB Enterprise 或 MongoDB Atlas。

步骤 来强制执行集合中特定字段的加密。

IndexedRange 字段需要在服务器上创建索引。该索引通过在 db.createCollection() 中指定 encryptedFields 选项来创建。

如果您的 MongoDB 实例强制执行特定字段的加密,任何执行带有显式加密的可查询加密的客户端都必须按照指定方式加密这些字段。有关如何设置服务器端可查询加密强制执行的说明,请参阅 加密字段和启用的查询。

要了解更多关于密钥保管库集合、数据加密密钥和客户主密钥的信息,请参阅加密密钥和密钥保管库。

要了解更多关于密钥管理服务(KMS)提供商和kmsProviders对象的信息,请参阅KMS 提供商。

返回

集合