创建加密模式
关于此任务
为了使加密字段可查询,创建一个加密模式。此模式定义了哪些字段是可查询的,以及哪些查询类型是允许的。有关更多信息,请参阅加密字段和启用查询。
重要
可查询加密支持等价和范围查询。您可以为字段配置一种查询类型。
在开始之前
当您使加密字段可查询时,请考虑性能和安全。有关每个配置选项如何影响这些的详细信息,请参阅为最佳搜索和存储配置加密字段。
步骤
2
指定要加密的字段。
将
path
和bsonType
字符串添加到fields数组中的文档内const encryptedFieldsObject = { fields: [ { path: "myDocumentField", bsonType: "int" } ] } 重要
您可以指定任何字段进行加密,除了
_id
字段。如果您使用显式加密,请添加一个包含DEK ID的
keyId
字段DEK ID{ path: "myDocumentField", bsonType: "int", keyId: "<unique data encryption key>" } 提示
在自动加密中,MongoDB为每个字段创建加密密钥。您在客户端配置
AutoEncryptionSettings
,然后使用createEncryptedCollection
辅助方法创建您的集合。
3
4
在所需字段上启用范围查询。
这可以通过使用$lt
、$lte
、$gt
和$gte
操作符来进行查询。
关于以下选项如何影响安全和性能的详细信息,请参阅配置加密字段以实现最佳搜索和存储。
添加
queries
对象并将queryType
设置为"range"
{ path: "myDocumentRangeField", bsonType: "int", queries: { queryType: "range" } } 设置以下字段
字段类型描述与字段的bsonType
相同如果
bsonType
是decimal
或double
,则必需。如果它是int
、long
或date
,则虽然可选但强烈推荐。默认值为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
属性使 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" }, ] }