在mongod只存储加密BinData和适用的任何聚合表达或查询运算符指定针对加密的字段BinData值。尽管表达式或运算符可能支持BinData字段,但与针对解密后的值发布相同的表达式或运算符相比,结果值可能不正确或意外。所述mongod
如果表达或操作者不支持引发错误
BinData值。
例如,考虑确定性加密的integer Salary。查询会过滤Salary大于的
文档100000。在发出查询之前,应用程序使用确定性加密方式明确(手动)对查询值进行加密。该
mongod比较加密 BinData的值100000的加密 BinData存储在每个文件中的值。当操作成功返回时,BinData值的比较可能返回与解密后的整数值比较不同的结果。
自动客户端字段级加密会拒绝读取或写入操作,这些操作在针对加密字段发出时会返回不正确或意外的结果。有关完整的文档,请 参阅带有自动字段级加密的读/写支持。执行显式(手动)加密的应用程序可以引用链接的页面作为对加密字段发出读/写操作的指导。
如果基础视图聚合管道或查询引用了加密字段,则对包含客户端字段级加密值的集合中的视图的查询可能返回意外或不正确的结果。如果在包含客户端字段级加密值的集合上创建视图,请避免对加密字段进行操作,以减轻意外或错误结果的风险。
虽然为自动客户端字段级加密配置的4.2兼容驱动程序可以验证不受支持的读取和写入操作,但是底层支持库无法对视图目录进行内部检查,以将给定的集合标识为视图。因此,应用程序不能依靠自动字段级加密验证来防止针对具有加密字段的集合视图的不受支持的查询。
对于使用显式(手动)加密在包含加密值的集合上查询视图的应用程序,考虑对加密字段发出查询时,仅使用具有已知正常行为的查询运算符来构造查询。
客户端字段级加密不遵守用户指定的归类或集合默认归类。字段级加密会模糊字段值并阻止正常的整理行为。排序规则敏感的加密字段查询可能会返回意外或不正确的结果。
虽然为自动客户端字段级加密配置的与4.2兼容的驱动程序可以验证不支持的读取和写入操作,但是底层支持库无法对集合目录进行内部检查以标识默认排序规则。因此,应用程序不能依靠自动字段级加密验证来防止查询具有排序规则默认值的加密字段。
如果索引密钥指定任何随机加密的字段,则唯一索引不能保证唯一性。
给定特定输入,使用随机 算法加密的字段始终会产生不同的加密值。即使解密值本身不是唯一的,服务器也认为每个加密值都是唯一的。因此,该集合可以包含多个文档,这些文档对于具有索引强制的唯一约束的字段具有重复的解密值。
虽然为自动客户端字段级加密配置的与4.2兼容的驱动程序可以验证不支持的读取和写入操作,但是底层支持库无法内省索引目录以将给定字段标识为唯一字段。因此,应用程序不能依靠自动字段级加密验证来防止对随机加密字段的唯一约束违例。
在加密字段或 现有分片密钥的加密字段上指定分片密钥可能会导致意外的或不正确的分片行为。
虽然为自动客户端字段级加密配置的4.2兼容驱动程序可以验证不受支持的读取和写入操作,但是基础支持库无法对分片目录元数据进行内部检查以识别分片密钥字段。因此,应用程序不能依靠自动字段级加密验证来防止对分片密钥字段进行加密。
自动客户端字段级加密支持命令,查询运算符,更新运算符,聚合阶段和聚合表达式的子集。有关完整的文档,请 参阅带有自动字段级加密的读/写支持。