Atlas Search
Queryable Encryption 与 MongoDB Atlas Search 不兼容。
预览特定限制
注意
在 Queryable Encryption 的技术预览版期间存在以下限制。
竞争因子
争用因子是一种有助于根据并发连接数调整性能的设置。
争用因子不可变,只能在指定要加密的字段时设置。 默认值为 0 。
手动创建数据密钥
您必须为要加密的每个字段手动创建唯一的数据加密密钥。 在未来版本中,您将能够省略encryptedFieldsMap中的keyId字段,并且 Queryable Encryption 兼容驱动程序将自动创建 DEK 。
手动压缩
在技术预览期间,如果元数据集合超过1 GB ,则需要手动运行索引压实。 在未来发布中,当元数据集合超过定义的大小时,将自动运行压实。
压实是一个减小与加密字段关联的元数据集合大小并提高性能的过程。
encryptedFieldsMap 修改
请勿在技术预览期间修改传递给MongoClient的encryptedFieldsMap 。 这样做可能会导致查询时出现意外和不正确的行为。
读写操作支持
mongod 仅存储加密的 BinData 并针对 BinData 值应用指定加密字段的任何聚合表达式或查询操作符。虽然表达式或操作符可能支持 BinData 字段,但与针对解密值发出相同的表达式或操作符相比,结果值可能不正确或不符合预期。如果表达式或操作符不支持 BinData 值,mongod 会引发错误。
拓扑支持
支持副本集和分片集群
不支持独立部署
不支持从节点读取
分片
元数据集合不能被分片
分片键不得是加密字段
CRUD
Queryable Encryption 不支持批处理操作。 不支持以下操作: -
db.collection.insertMany()-db.collection.updateMany()-db.collection.deleteMany()Queryable Encryption限制
db.collection.findAndModify()参数。- 不允许fields-new必须为 false
集合
Queryable Encryption 仅支持新集合。您不能向现有集合添加或删除 Queryable Encryption。
如果
jsonSchema包含encrypt关键字,则在创建Queryable Encryption collection时,您无法将jsonSchema指定为db.createCollection()。您不能在同一集合上将客户端字段级加密与可查询加密一起使用。只要您的 jsonSchema 不包含加密字段验证,您就可以将
encryptedFields和jsonSchema一起指定到db.createCollection()。Queryable Encryption 不支持从未加密的 collection 的自动迁移。您必须逐份导入文档。
Queryable Encryption 不支持从使用客户端字段级加密的collection进行迁移。您必须解密文档并将其逐份导入。
您无法重命名具有加密字段的集合。
您无法禁用
jsonSchema验证。当collection信息中存在
encryptedFields时,自动加密文档验证。无法将
validationLevel设置为none。无法将
validationAction设置为warn。
删除集合
从未配置Queryable Encryption的
MongoClient中删除collection不会删除关联的元数据集合。``mongod`` 如果在删除元数据集合之前删除具有加密字段的collection,则会记录警告。
提示
使用为 Queryable Encryption 配置的MongoClient删除collection时,与 Queryable Encryption 兼容的驱动程序会删除元数据集合。
创建集合
您应始终显式创建与可查询加密一起使用的集合。 使用隐式collection创建不会创建必要的索引和元数据collection,从而导致查询性能不佳。
查询类型
在 encryptedFieldsMap 中创建集合时,为字段指定的查询类型是不可变的。您无法在现有字段上添加新的查询类型,也不能修改现有的查询类型。
加密字段名称
加密的字段名称不可更改。例如,如果指定 ssn 作为要加密的字段,那么您不能将字段名称 $rename 为taxPayerID。
视图
应用程序不能依赖自动加密验证来阻止对具有加密字段的集合上的视图进行不支持的查询。
如为基础视图聚合管道或查询引用加密字段,则对包含(使用 Queryable Encryption)加密值的集合上的视图查询可能会返回意外或不正确的结果。如果在包含(使用 Queryable Encryption)加密值的集合上创建视图,请勿对加密字段进行操作,以降低出现意外或错误结果的风险。
有关视图的详细信息,请参阅视图。
排序规则
Queryable Encryption 忽略用户指定的排序规则或集合默认排序规则。加密会掩盖字段值,并阻止正常的排序规则行为。对加密字段的排序规则敏感查询可能会返回意外或不正确的结果。
有关排序规则的更多信息,请参阅排序规则文档。
虽然为自动加密配置的 MongoDB 版本 6.0 或更高版本的兼容驱动程序支持自动加密操作,但对于不支持的读取和写入操作,底层支持库无法自省集合目录来识别默认排序规则。 因此,应用程序不能依赖Queryable Encryption验证来阻止使用默认对加密字段进行查询。
Unique Indexes
Unique indexes 如果索引键指定了任何加密字段,则无法保证唯一性。
对于给定的特定输入,Queryable Encryption始终会生成不同的加密值。即使解密的值可能不是唯一的,服务器也会认为每个加密的值都是唯一的。 因此,该collection可能包含多个文档,而这些文档的字段具有重复的明文值,而这些字段具有索引强制唯一性约束。
虽然为自动加密配置的 MongoDB 版本 6.0 或更高版本的兼容驱动程序支持对不支持的读写操作进行自动加密,但底层支持库无法自省索引目录以将给定字段标识为唯一字段。 应用程序不能依赖自动加密验证来防止违反随机加密字段的唯一约束。
_id 字段
您无法指示 Queryable Encryption 加密_id字段,因为它依赖于 MongoDB 自动生成的值。
读/写查询支持
自动加密支持命令子集、查询操作符、更新操作符、聚合阶段和聚合表达式。 有关完整文档,请参阅自动加密支持的操作。