Overview
在此页面上,您可以了解客户端字段级加密 (CSFLE) 的安全优势,以及 CSFLE 与 MongoDB 支持的其他安全机制的比较。 您还可以查看一个虚构的场景,该场景演示了 CSFLE 在保护数据方面的价值。
客户端字段级加密 (Client-Side Field Level Encryption)
客户端字段级加密 (CSFLE) 是 MongoDB 的一项功能,可让客户端应用程序在通过网络传输数据之前对数据进行加密。 敏感数据由客户端透明地加密和解密,并且仅以加密形式与服务器通信。 CSFLE 在以下情况下确保加密字段的安全:
数据库超级用户直接访问加密字段
通过读取服务器内存来访问加密字段
通过不安全的网络捕获加密字段
通过读取数据库或备份文件访问磁盘加密字段
虽然所有客户端都可以访问非敏感数据字段,但只有适当配置的 CSFLE 客户端才能读取和写入加密数据字段。
重要
远程密钥管理系统
在生产中使用 CSFLE 时,必须使用远程密钥管理系统 (KMS) 来存储加密密钥。
要查看演示如何将远程KMS与 CSFLE 结合使用的分步指南,请参阅 CSFLE 教程。
要查看所有支持的 KMS 提供商的列表,请参阅CSFLE KMS 提供商。
要详细了解为什么要使用远程 KMS,请参阅使用远程密钥管理系统的理由。
安全考虑因素
CSFLE 不提供任何加密完整性保证,以防止对手获取您的客户主密钥或数据加密密钥。
CSFLE 不提供任何加密完整性保证,以防止对手任意写入包含加密数据的集合。
MongoDB 使用模式验证来实施集合中特定字段的加密。如果没有客户端模式,客户端将下载集合的服务器端模式来确定要加密哪些字段。如要避免此问题,请使用客户端模式验证。
由于 CSFLE 未提供验证模式完整性的机制,因此依赖服务器端模式意味着信任服务器的模式未被篡改。如果攻击者破坏了服务器,他们可以修改模式,让以前加密的字段不再标记为加密。这会导致客户端发送该字段的纯文本值。
有关客户端和服务器端模式的 CSFLE 配置示例,请参阅 CSFLE 服务器端字段级加密实施。
其他安全机制
本节介绍 MongoDB 支持的以下安全机制,并解释其使用案例和局限性:
基于角色的访问控制
基于角色的访问控制是一种安全机制,允许管理员授予和限制用户的集合级别权限。通过适当的角色定义和分配,此解决方案可防止意外泄露数据和访问。
基于角色的访问控制无法针对以下情况提供防护:
通过不安全的网络捕获数据
通过读取数据库或备份文件访问磁盘数据
通过读取服务器内存来访问数据
数据库超级用户直接访问数据
要了解更多信息,请参阅基于角色的访问控制。
静态加密
静态加密是一种对磁盘上的数据库文件进行加密的机制。此机制可防止缺少数据库凭据但有权访问托管数据库的计算机的人员查看您的数据。
该机制无法在以下情况下保护您的数据:
通过不安全的网络捕获数据
通过读取服务器内存来访问数据
数据库超级用户直接访问数据
要了解详情,请参阅静态加密。
传输加密 (TLS/SSL)
使用 TLS/SSL 的传输加密会加密您通过网络的数据。TLS/SSL 在数据通过不安全的网络传输时保护数据,但无法保护数据免受特权用户侵害或保护磁盘上的数据。
若要了解详情,请参阅使用 TLS/SSL 进行传输加密
功能对比
下图列出了 MongoDB 支持的安全功能及其解决的潜在安全漏洞:

重要
同时使用这些机制
要保护生产部署,请同时使用基于角色的访问控制、静态加密、传输加密和可选的正在使用的加密安全机制。 请注意,您不能同时使用 CSFLE 和 Queryable Encryption 来加密同一collection中的不同fields。
要了解有关 Queryable Encryption 的更多信息,请参阅Queryable Encryption 功能。
Scenario
以下虚构场景演示了客户端字段级加密 (CSFLE) 在保护应用程序数据方面的价值,以及 CSFLE 如何与本指南中讨论的其他安全机制交互。
在此场景中,我们保护医疗保健管理系统上的敏感数据,该系统为一家虚构的公司MedcoMD存储患者的个人信息、保险信息和医疗记录。 患者数据均不公开,而社会安全号(SSN,美国政府颁发的 ID 号)、保单号码和生命体征测量值等特定数据特别敏感,须遵守隐私合规性。 对于公司和患者来说,保持数据的私密性和安全性非常重要。
MedcoMD 需要该系统来满足以下使用案例:
医生使用该系统访问患者的病历和保险信息,并添加新的生命体征测量值。
导医使用该系统,通过患者的联系信息来验证其身份。
接待员可以查看患者的保单提供商,但不能查看其保单号码。
导医无法访问患者的病历。
MedcoMD 还关注通过以下任何一种方法披露敏感数据:
在导医的可公开查看的屏幕上意外泄露数据。
由超级用户(如数据库管理员)直接访问数据库。
通过不安全的网络捕获数据。
通过读取数据库服务器的内存来访问数据。
通过读取数据库或备份文件来访问数据。
MedcoMD 可以做些什么来平衡其医疗保健管理系统的功能和访问限制?
解决方案
MedcoMD 使用以下安全机制来满足其用例,并防止敏感医疗数据泄露:
传输加密 (TLS/SSL),确保数据在网络上传输时的安全。
静态加密,防止通过读取数据库或备份文件泄露数据。
基于角色的访问控制,将数据库用户访问权限限制在执行任务所需的集合范围内。
使用 CSFLE 加密敏感字段以满足以下使用案例和约束:
防止从服务器内存中读取数据,因为 CSFLE 加密数据永远不会以未加密的形式存在于数据库服务器上。
为接待员提供未启用 CSFLE 的客户端,允许接待员验证患者身份,并防止在接待员可公开查看的屏幕上意外泄露敏感数据。
为医生提供启用 CSFLE 的客户端,允许医生在办公室私下查看敏感数据。
了解详情
要查看为保护 MongoDB 部署而应实施的安全措施列表,请参阅安全清单。
要学习;了解有关 CSFLE 和合合规的更多信息,请参阅这篇文章。
要开始使用 CSFLE,请参阅 CSFLE 快速入门。