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

创建加密模式

本页内容

  • 关于此任务
  • 开始之前
  • 步骤
  • 创建 JSON 加密模式文档。
  • 指定要加密的字段。
  • 在所需的字段上启用等值查询。
  • 在所需的字段上启用范围查询。
  • 示例

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

重要

可查询加密支持等价和范围查询。您可以为字段配置一种查询类型。

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

1

包括一个encryptedFieldsObject,它包含嵌套的fields数组

const encryptedFieldsObject = {
fields: []
}
2
  1. pathbsonType字符串添加到fields数组中的文档内

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

    重要

    您可以指定任何字段进行加密,除了_id字段。

  2. 如果您使用显式加密,请添加一个包含DEK ID的keyId字段DEK ID

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

    提示

    在自动加密中,MongoDB为每个字段创建加密密钥。您在客户端配置AutoEncryptionSettings,然后使用createEncryptedCollection辅助方法创建您的集合。

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
    }
    }

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

考虑以下包含个人身份信息(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"
},
]
}

返回

字段与查询