创建加密模式
带有相等查询的 Queryable Encryption 在 MongoDB 7中正式可用 (GA)。 0及更高版本。 Queryable Encryption 公共预览版,在版本6中发布。 0 ,不再受支持。使用公共预览版加密的数据与功能版本不兼容。有关更多信息,请参阅 MongoDB 7中的兼容性更改。 0 。
关于此任务
要使加密字段可查询,请创建加密模式。 此模式定义了哪些字段可查询,以及允许哪些查询类型。 有关更多信息,请参阅加密字段和查询。
步骤
1
2
为要加密的每个字段指定加密参数。
将
path
和bsonType
字符串添加到fields
数组中:const encryptedFieldsObject = { fields: [ { path: "myDocumentField", bsonType: "int" } ] } 重要
您可以指定除
_id
字段之外的任何字段进行加密。如果使用显式加密,请添加具有 DEK ID 的
keyId
字段。{ path: "myDocumentField", bsonType: "int", keyId: "<unique data encryption key>" } 提示
通过自动加密,MongoDB 为每个字段创建加密密钥。 您可以在客户端上配置
AutoEncryptionSettings
,然后使用createEncryptedCollection
辅助方法创建集合。如果您希望某个字段可查询,请添加
queries
属性并列出允许的queryTypes
。Queryable Encryption 目前仅支持
equality
查询。{ path: "myDocumentField", bsonType: "int", queries: { queryType: "equality" } } (可选)在可查询字段中包含
contention
属性,以提高查找性能或写入和更新性能:{ path: "myDocumentField", bsonType: "int", queries: { queryType: "equality", contention: "0"} } 有关详细信息,请参阅争用。
例子
此示例展示了如何为医院数据创建加密模式。
考虑以下包含个人身份信息 (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" }, ] }