Docs 菜单
Docs 主页
/
数据库手册
/ / / / /

创建加密模式

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

重要

可查询Queryable Encryption支持相等和范围查询。 您只能为一种查询类型配置一个字段。

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

1

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

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

    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

    如果bsonTypedecimaldouble ,则为必填项。 可选,但如果为intlongdate ,则强烈建议使用。 默认为bsonType的最小值和最大值。

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

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

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

警告

前缀、后缀和子字符串查询处于公共预览状态

Queryable Encryption前缀、后缀和子字符串查询在MongoDB 8.2 的公共预览版中可用。请勿在生产环境中启用这些查询类型。公共预览功能将与 GA功能不兼容,您必须删除任何启用这些查询的集合。

  1. 添加 queries对象并将 queryType设立为 "prefixPreview""suffixPreview""substringPreview"

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

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

    字段
    类型
    说明

    整型

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

    整型

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

    整型

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

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

    布尔

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

    布尔

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

    {
    path: "myDocumentStringField",
    bsonType: "string",
    queries: {
    "queryType": "substringPreview",
    "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属性后, patientIdpatientInfo.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"
},
]
}

后退

字段和查询

在此页面上