关于此任务
要使加密字段可查询,请创建加密模式。 此模式定义了哪些字段可查询,以及允许哪些查询类型。 有关更多信息,请参阅加密字段和启用的查询。
重要
可查询Queryable Encryption支持相等和范围查询。 您只能为一种查询类型配置一个字段。
开始之前
当您将加密字段设置为可查询时,请考虑性能和安全性。 有关每个配置选项如何影响这些字段的详细信息,请参阅配置加密字段以实现最佳搜索和存储。
步骤
指定要加密的字段。
将
path
和bsonType
字符串添加到文档的字段大量中:const encryptedFieldsObject = { fields: [ { path: "myDocumentField", bsonType: "int" } ] } 重要
您可以指定除
_id
字段之外的任何字段进行加密。(可选)设立具有 DEK ID的
keyId
字段。重要
密钥 ID 必须是唯一的,否则服务器会返回错误。
通过在客户端上配置
AutoEncryptionSettings
,您可以使用createEncryptedCollection
辅助方法自动创建密钥。{ path: "myDocumentField", bsonType: "int", keyId: "<unique data encryption key>" }
对所需字段启用范围查询。
这样就可以使用$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 } }
对所需字段启用前缀、后缀或子字符串查询。
这些查询类型仅适用于 string
字段。您可以在同一字段上同时启用prefixPreview
和 suffixPreview
,但如果使用 substringPreview
,则无法启用任何一个。
警告
前缀、后缀和子字符串查询处于公共预览状态
Queryable Encryption前缀、后缀和子字符串查询在MongoDB 8.2 的公共预览版中可用。请勿在生产环境中启用这些查询类型。公共预览功能将与 GA功能不兼容,您必须删除任何启用这些查询的集合。
prefixPreview
查询启用$encStrStartsWith
和$encStrNormalizedEq
聚合表达式。suffixPreview
查询启用$encStrEndsWith
和$encStrNormalizedEq
聚合表达式。substringPreview
查询启用$encStrContains
和$encStrNormalizedEq
聚合表达式。
添加
queries
对象并将queryType
设立为"prefixPreview"
、"suffixPreview"
或"substringPreview"
:{ path: "myDocumentStringField", bsonType: "string", queries: { queryType: "substringPreview" } } 设置以下字段。
有关它们如何影响安全和性能的详细信息,请参阅配置加密字段以实现最佳搜索和存储。
字段类型说明整型
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
属性后, 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" }, ] }