MongoDB客户端字段级加密(CSFLE)限制了对未加密集合的操作

时间:2020-08-03 10:44:09

标签: mongodb mongoose

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

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

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

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

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

在CSFLE json模式中未定义“治疗师”或“订阅”,并且未加密。 我不明白为什么对未加密的集合进行$ lookup会导致错误。 根据{{​​3}}

自动客户端字段级加密支持$ lookup和 仅当 from 集合中的与以下位置的集合匹配时,$ graphLookup 聚合所依据的(即自查找操作)。

虽然在处理“患者”馆藏时可以接受该限制,但是在处理其他非CSFLE馆藏时我认为这是不可接受的。

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

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

您会说这是mongodb的错误吗?

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

事实证明这是MongoDB的错误。

吉拉门票: https://jira.mongodb.org/browse/SERVER-50092

这是当前的局限性,在这种情况下,使用加密客户端会认为它是必要的,并且不允许$ lookup进入另一个集合。

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