对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

创建加密模式

要使加密字段可查询,请创建加密模式。 此模式定义了哪些字段可查询,以及允许哪些查询类型。 有关更多信息,请参阅加密字段和启用的查询。

重要

Queryable Encryption 支持等值、范围、前缀、后缀和子字符串查询。字段只能配置为相等查询类型或范围查询类型中的一种。您可以在同一字段上启用 prefix 和 suffix 两者,但是,您不能将 substring 与另一种查询类型结合使用。

当您将加密字段设置为可查询时,请考虑性能和安全性。 有关每个配置选项如何影响这些字段的详细信息,请参阅配置加密字段以实现最佳搜索和存储。

若要在配置前估算前缀、后缀和子字符串查询所需的存储空间,请参阅估算 Queryable Encryption 存储影响。

您可以为 encryptedFieldsObject 的 fields数组中的每个字段配置加密。下表描述了可用的子字段:

字段
类型
说明

path

字符串

必需。要加密的字段的点表示法路径,例如 "patientInfo.ssn"。您可以指定除 _id字段之外的任何字段。

bsonType

字符串

必需。要加密的字段的BSON类型。有关支持类型的完整列表,请参阅 BSON Types。

keyId

UUID

可选。用于加密该字段的 DEK 的 UUID。 UUID 是子类型4 的BSON二进制数据元素。

密钥 ID 必须是唯一的。指定已在使用的 keyId 会返回错误。

如果省略,则可以使用 createEncryptedCollection() 辅助方法自动创建密钥。

queries

对象

可选.启用对此加密字段的查询。如果省略,则字段将被加密,但不可查询。

要学习;了解有关查询选项的更多信息,请参阅配置加密字段以实现最佳搜索和存储。

1

包含一个带有嵌套fields大量的encryptedFieldsObject :

const encryptedFieldsObject = { fields: []}
2
  1. 将path和bsonType字符串添加到文档的字段大量中:

    const encryptedFieldsObject = { fields: [ { path: "myDocumentField", bsonType: "int" } ]}

    重要

    您可以指定除 _id 字段之外的任何字段进行加密。

  2. (可选)设立具有 DEK ID的 keyId字段。

    重要

    密钥 ID 必须是唯一的,否则服务器会返回错误。

    通过在客户端上配置 AutoEncryptionSettings,您可以使用 createEncryptedCollection 辅助方法自动创建密钥。

    { path: "myDocumentField", bsonType: "int", keyId: "<unique data encryption key>"}
3

这样就可以使用$eq 、 $ne 、 $in和$nin操作符进行查询。

添加queries对象设立queryType设置为"equality" :

{ path: "myDocumentField", bsonType: "int", queries: { queryType: "equality" }}
4

这样就可以使用$lt 、 $lte 、 $gt和$gte操作符进行查询。

有关以下选项如何影响安全性和性能的详细信息,请参阅配置加密字段以实现最佳搜索和存储。

  1. 添加queries对象设立queryType设置为"range" :

    { path: "myDocumentRangeField", bsonType: "int", queries: { queryType: "range" }}
  2. 设置以下字段:

    字段
    类型
    说明

    与字段相同 bsonType

    如果bsonType为decimal或double ,则为必填项。 可选,但如果为int 、 long或date ,则强烈建议使用。 默认为bsonType的最小值和最大值。

    在可能的情况下,为查询指定边界可以提高性能。 如果查询的值超出这些包含边界, MongoDB将返回错误。

    { path: "myDocumentRangeField", bsonType: "int", queries: { queryType: "range", min: 0, max: 1200 }}
5

这些查询类型仅适用于 string 字段。您可以在同一字段上同时启用prefix 和 suffix,但如果使用 substring,则无法启用任何一个。

  1. 添加 queries对象并将 queryType设立为 "prefix"、"suffix" 或 "substring":

    { path: "myDocumentStringField", bsonType: "string", queries: { queryType: "substring" }}
  2. 设置以下字段。

    有关它们如何影响安全和性能的详细信息,请参阅配置加密字段以实现最佳搜索和存储。

    字段
    类型
    说明

    整型

    substring 仅限查询。子字符串索引字段的最大允许长度。

    整型

    允许的最小前缀/后缀/子字符串长度。

    整型

    要查询的最大允许前缀/后缀/子字符串长度。

    重要提示:此设置会严重影响查询性能。尽可能限制它。

    布尔

    可选。查询是否区分大小写。默认为 true。

    布尔

    可选。查询是否区分变音符号。默认为 true。

    { path: "myDocumentStringField", bsonType: "string", queries: { "queryType": "substring", "strMaxLength": 30, "strMinQueryLength": 1, "strMaxQueryLength": 20, "caseSensitive": false }}

此示例展示了如何为医院数据创建加密模式。

考虑以下包含个人身份信息 (PII)、信用卡信息和敏感医疗信息的文档:

{ "firstName": "Jon", "lastName": "Snow", "patientId": 12345187, "address": "123 Cherry Ave", "medications": [ "Adderall", "Lipitor" ], "patientInfo": { "ssn": "921-12-1234", "billing": { "type": "visa", "number": "1234-1234-1234-1234" } }}

为了确保 PII 和敏感医疗信息的安全,此加密模式添加了相关字段:

const encryptedFieldsObject = { fields: [ { path: "patientId", bsonType: "int" }, { path: "patientInfo.ssn", bsonType: "string" }, { path: "medications", bsonType: "array" }, { path: "patientInfo.billing", bsonType: "object" } ]}

添加queries属性后, patientId和patientInfo.ssn字段将成为可查询字段。 此示例启用相等查询:

const encryptedFieldsObject = { fields: [ { path: "patientId", bsonType: "int", queries: { queryType: "equality" } }, { path: "patientInfo.ssn", bsonType: "string", queries: { queryType: "equality" } }, { path: "medications", bsonType: "array" }, { path: "patientInfo.billing", bsonType: "object" }, ]}