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

创建加密模式

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

重要

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

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

To use the Public Preview prefix, suffix, or substring queries with mongosh, you must separately download the Automatic Encryption Shared Library 8.2 or higher, then specify the library path to mongosh using the --cryptSharedLibPath option.

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"
},
]
}

后退

字段和查询

在此页面上