字段和加密类型
本页介绍 MongoDB 用于执行客户端字段级加密 (CSFLE) 的加密类型。为了执行 CSFLE,MongoDB 使用以下类型的加密算法:
确定性加密
确定性加密算法确保每次算法执行时,给定的输入值总是加密为相同的输出值。虽然确定性加密为读取操作提供了更大的支持,但低关联基数的加密数据容易出现通过频率分析恢复数据的情况。
对于不在读取操作中使用的敏感字段,应用程序可以使用随机加密来提高保护,防止通过频率分析恢复数据。
在确定性加密字段上查询文档
您可以使用标准 MongoDB 驱动程序和 mongosh
方法查询确定性加密字段。
如要查看确定性加密字段上所有支持的查询操作符的完整列表,请参阅自动加密支持的操作。
若要了解有关加密数据读取的详细信息,请参阅加密读取。
注意
从未配置 CSFLE 的客户端进行查询
使用未配置为使用客户端字段级加密 (CSFLE) 的客户端对加密字段进行查询时,查询会返回一个空值。未配置 CSFLE 的客户端无法查询加密字段。
随机加密
随机加密算法确保每次算法执行时,给定的输入值总是加密为不同的输出值。虽然随机加密能最有力地保证数据的机密性,但它也会阻止对任何读取操作的支持,因为这些操作必须在加密字段上操作才能评估查询。
对于在读取操作中使用的敏感字段,应用程序必须使用确定性加密来改进对加密字段的读取支持。
支持加密对象和数组
只有随机加密才支持对整个对象或数组进行加密。
例如,考虑以下文档:
{ "personal_information" : { "ssn" : "123-45-6789", "credit_score" : 750, "credit_cards" : [ "1234-5678-9012-3456", "9876-5432-1098-7654"] }, "phone_numbers" : [ "(212) 555-0153" ] }
使用随机加密算法加密 personal_information
和 phone_numbers
字段会加密整个对象。虽然这可以保护嵌套在这些字段下的所有字段,但它也会阻止对这些嵌套字段进行查询。
要了解有关支持的加密操作的更多信息,请参阅自动加密支持的操作。
在随机加密字段上查询文档
您不能直接在随机加密字段上查询文档。但是,您可以使用另一个字段来查找包含随机加密字段数据近似值的文档。
例如,请考虑以下文档,其中 ssn
字段是随机加密的:
{ "_id": "5d6ecdce70401f03b27448fc", "name": "Jon Doe", "ssn": 241014209, "bloodType": "AB+", "medicalRecords": [ { "weight": 180, "bloodPressure": "120/80" } ], "insurance": { "provider": "MaestCare", "policyNumber": 123142 } }
您可以添加另一个名为 last4ssn
的纯文本字段,其中包含 ssn
字段的最后 4 位数字,而不是查询 ssn
字段。然后,您可以在作为 ssn
的代理的 last4ssn
字段上查询:
{ "_id": "5d6ecdce70401f03b27448fc", "name": "Jon Doe", "ssn": 241014209, "last4ssn": 4209, "bloodType": "AB+", "medicalRecords": [ { "weight": 180, "bloodPressure": "120/80" } ], "insurance": { "provider": "MaestCare", "policyNumber": 123142 } }