首页 > 解决方案 > MongoDB 客户端字段级加密 (CSFLE) 限制对未加密集合的操作

问题描述

我的数据库包含 3 个集合:“患者”、“治疗师”、“订阅”。

我已经在数据库连接上配置了 CSFLE,提供了一个 json 模式,它在“患者”集合中的“名称”和“电子邮件”字段上定义字段级加密。

“患者”集合上的字段级加密/解密按预期工作。

但是,现在一个不相关的聚合查询失败并显示“MongoError:加密集合上的管道无法引用其他集合”。

对“治疗师”集合执行聚合查询时会发生此错误,其中包括来自“订阅”集合的 $lookup(不是错误提示的“在加密集合上”)。

CSFLE json 模式中既没有定义“治疗师”也没有定义“订阅”,也没有加密。我不明白为什么这个 $lookup 在未加密的集合上会导致错误。根据文档

仅当from集合与运行聚合所针对的集合匹配(即自查找操作)时,自动客户端字段级加密才支持 $lookup 和 $graphLookup 。

虽然在处理“患者”集合时限制可能是可以接受的,但我认为在处理其他非 CSFLE 集合时它是不可接受的。

我知道我可以创建 2 个单独的 MongoClient 实例,一个启用 CSFLE,一个不启用,并使用非 CSFLE 客户端进行 $lookup,但这会带来额外的复杂性,而且它似乎不是一个干净合理的解决方案大部头书。

顺便说一句,我使用的是 mongoose,但是直接使用 mongodb 时的行为是相同的。

你会说这是mongodb的一个错误吗?

任何建议将不胜感激。

标签: mongodbmongoose

解决方案


原来这是 MongoDB 的一个错误。

Jira 票证: https ://jira.mongodb.org/browse/SERVER-50092

这是当前的限制,其中使用加密客户端假定它是必要的并且不允许 $lookup 进入另一个集合。

当前的解决方法是使用非加密客户端进行此类聚合。


推荐阅读