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字节随机字符。
问题现象
数据写入集合后目标字段未被加密,且控制台无任何报错信息。
疑问点
- 实际加密操作在哪里执行?文档说明不是在mongocryptd中,那具体由谁处理?
- 是否需要在Mongo集群中配置特定设置以启用自动字段加密?
- 上述环境版本之间是否兼容?
- 有没有通用的排查清单可用于解决加密未生效问题?
排查过程与最终原因
曾尝试硬编码schemaMap(注释掉@Encrypted注解),但问题依旧。最终发现问题根源:schemaMap的键名与Mongo文档名大小写不匹配——文档实际名为“myDocument”,但schemaMap键名使用了“MyDocument”(首字母大写),导致无法匹配加密规则,因此加密未生效。
内容的提问来源于stack exchange,提问作者Wolf17
相关产品推荐
相关产品推荐

