You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB自动客户端字段级加密失效问题排查求助

关于MongoDB自动客户端字段级加密未生效的问题及排查

环境信息

  • MongoDB-crypt库版本:1.6.1
  • Mongo驱动core及sync版本:4.9.1
  • MongoCryptD版本:5.0.3
  • 操作系统:Linux(RHEL 7.9)
  • MongoDB版本:4.2.11企业版
  • Java JDK:17

实现代码

实体类定义

通过@Encrypted注解标记需要加密的文档类及字段:

@Data  // lombok
@Document
@Encrypted (keyID="<密钥ID>", algorithm= "<加密算法>")
public class MyDocument{
   @Id
   private UUID dataID;

   @Encrypted
   private String fieldToBeEncrypted;
   
   private String otherField;
} 

客户端配置

使用MongoJsonSchemaCreator生成加密字段对应的JSON Schema,构建schemaMap后配置到AutoEncryptionSettings:

MongoClientSettings clientSettings = MongoClientSettings.builder()
.autoEncryptionSettings(AutoEncryptionSettings.builder()
        .keyVaultNamespace(keyVaultNamespace)
        .kmsProviders(kmsProviders)
        .schemaMap(schemaMap)
        .extraOptions(extraOptions)
        .build())
...(其他配置)
    .build();

其中kmsProviders使用的主密钥是通过OpenSSL随机命令生成的96字节随机字符。

问题现象

数据写入集合后目标字段未被加密,且控制台无任何报错信息。

疑问点

  1. 实际加密操作在哪里执行?文档说明不是在mongocryptd中,那具体由谁处理?
  2. 是否需要在Mongo集群中配置特定设置以启用自动字段加密?
  3. 上述环境版本之间是否兼容?
  4. 有没有通用的排查清单可用于解决加密未生效问题?

排查过程与最终原因

曾尝试硬编码schemaMap(注释掉@Encrypted注解),但问题依旧。最终发现问题根源:schemaMap的键名与Mongo文档名大小写不匹配——文档实际名为“myDocument”,但schemaMap键名使用了“MyDocument”(首字母大写),导致无法匹配加密规则,因此加密未生效。

内容的提问来源于stack exchange,提问作者Wolf17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 01:45:00