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

使用CSFLE加密MongoDB数组对象指定字段及schemaMap配置问题

MongoDB CSFLE数组对象部分字段加密schemaMap实现方案

核心逻辑

针对数组内对象的指定字段加密,需要在schemaMap中明确声明数组类型,再在items属性下定义数组元素的结构,仅对需要加密的字段添加encrypt配置即可。之前配置不生效通常是遗漏了数组类型声明或items结构层级错误导致。

可运行schemaMap示例

以下示例针对test库的users集合配置,集合中contacts字段为对象数组,仅加密数组每个元素下的phone、idCard两个字段:

const schemaMap = {
  "test.users": {
    bsonType: "object",
    properties: {
      // 其他明文字段的配置可放在此处
      contacts: {
        bsonType: "array", // 必须明确声明为数组类型,不可省略
        items: {
          bsonType: "object", // 数组元素为对象类型
          properties: {
            // 明文字段无需加encrypt配置,直接声明类型即可
            name: {
              bsonType: "string"
            },
            // 需要加密的字段添加encrypt配置
            phone: {
              encrypt: {
                bsonType: "string",
                // 替换为你自己创建的数据加密密钥(DEK)的Base64 ID
                keyId: [{ "$binary": { "base64": "替换为你的DEK密钥ID", "subType": "04" } }],
                // 需等值查询选确定性算法,无需查询选随机算法安全性更高
                algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
              }
            },
            idCard: {
              encrypt: {
                bsonType: "string",
                keyId: [{ "$binary": { "base64": "替换为你的DEK密钥ID", "subType": "04" } }],
                algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
              }
            }
          }
        }
      }
    }
  }
}

配置生效注意事项

  • 初始化MongoDB客户端时必须正确配置KMS服务商、密钥 Vault 以及上述schemaMap,否则自动加密不会触发
  • 加密字段的bsonType需要和实际写入的字段类型保持一致,否则会报错
  • 如果需要对加密字段做等值查询,将算法替换为AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic即可

内容的提问来源于stack exchange,提问作者Vikas P R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 02:36:02