Docs 菜单
Docs 主页
/
MongoDB Manual
/ / / / /

字段和加密类型

在此页面上

  • 确定性加密
  • 在确定性加密字段上查询文档
  • 随机加密
  • 支持加密对象和数组
  • 在随机加密字段上查询文档

本页介绍 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_informationphone_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
}
}

后退

密钥管理