具有自动字段级加密的读/写支持
注意
Enterprise 版功能
字段级加密的自动功能仅在 MongoDB Enterprise 4.2 或更高版本以及 MongoDB Atlas 4.2 或更高版本集群中可用。
4.2 版本中的新增功能。
本页文档为自动客户端字段级加密配置的 4.2+ 兼容驱动程序支持的特定命令、查询操作符、更新操作符、聚合阶段和聚合表达式。
MongoDB将客户端字段级加密字段存储为 BinData
blob。 与对解密的值发出相同的操作相比,对加密的BinData
值发出的写入操作可能会出现意外或不正确的行为。 某些操作具有严格的BSON类型支持,如果针对BinData
值发出这些操作会返回错误。
使用自动客户端字段级加密的官方 4.2+ 兼容驱动程序会解析不支持
BinData
值或在针对BinData
值发出时有异常行为的操作符或表达式的读/写操作。使用显式(手动)客户端字段级加密的应用程序可以使用此页面作为针对加密字段发出读/写操作的指南。
支持的读取和写入命令
官方 MongoDB 4.2+ 兼容驱动程序支持使用以下命令进行客户端字段级加密:
对于任何支持的命令,如果该命令使用不支持的操作符、聚合阶段或聚合表达式,4.2+ 兼容驱动程序会返回错误:
以下命令不需要自动加密。 配置为自动客户端字段级加密的官方 MongoDB 4.2+ 兼容驱动程序将这些命令直接传递给mongod
:
通过配置为自动客户端字段级加密的 4.2+ 兼容驱动程序发出任何其他命令都会返回错误。
[1] | 虽然客户端字段级加密不会加密getMore 命令,但对该命令的响应可能包含加密的字段值。 配置了正确的客户端字段级加密选项的应用程序会自动解密这些值。 没有正确加密选项的应用程序只能看到加密值。 |
支持的查询操作符
为客户端字段级自动加密配置的官方 4.2+ 兼容驱动程序在针对确定性加密字段发出时允许使用以下查询运算符:
即使使用支持的查询运算符,将加密字段与null
或正则表达式进行比较的查询也始终会引发错误。 针对随机加密字段发出这些操作符的查询会引发错误。
针对确定性加密字段和$exists
随机 加密字段发出的 操作符均具有正常行为。
针对加密字段指定任何其他查询操作符的查询将会返回错误。
即使不是针对加密字段发出的,以下查询操作符也会引发错误:
支持的更新操作符
为客户端字段级自动加密配置的官方 4.2+ 兼容驱动程序在针对确定性加密字段发布时允许使用以下更新操作符:
对于在加密字段上使用$rename
操作符的更新操作,请确保自动 JSON schema 为源字段名称和目标字段名称指定相同的加密元数据。
针对加密字段指定任何其他更新操作符的更新会返回错误。
即使使用支持的操作符,具有以下行为的更新操作也会引发错误:
更新操作在加密路径内生成一个数组。
更新操作使用聚合表达式语法。
对于在 确定性 加密字段上指定 查询筛选器 的更新操作,查询筛选器必须仅使用这些字段 支持的操作符 。
不支持的插入操作
为客户端字段级自动加密配置的官方 MongoDB 4.2+ 兼容驱动程序不支持具有以下行为的插入命令:
支持的聚合阶段
为客户端字段级加密配置的官方 MongoDB 4.2+ 兼容驱动程序支持以下聚合管道阶段:
$lookup
和$graphLookup
(有关 使用要求 , 请参阅$lookup
和$graphLookup
行为 )
对配置为自动加密的collection进行操作,如果指定任何其他阶段,则管道会返回错误。
对于每个支持的管道阶段,MongoDB 都会在字段通过支持的管道时对必须加密的字段进行追踪,并标记为加密字段。
$group
行为
$group
具有以下特定于客户端字段级加密的行为:
$lookup
和$graphLookup
行为
仅当$lookup
$graphLookup
from
collection 与运行聚合所针对的collection匹配(即自查找操作)。
引用不同 from
集合的 $lookup
和 $graphLookup
阶段会返回错误。
支持的聚合表达式
为客户端字段级自动加密配置的官方 4.2+ 兼容驱动程序允许聚合阶段对确定性加密字段使用以下表达式:
如果对加密字段执行操作,则所有其他聚合表达式都会返回错误。
即使使用支持的聚合表达式,具有以下行为的聚合阶段也会引发错误:
表达式 | 已拒绝行为 | 例子 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
该表达式指定一个字段,其加密属性在运行时之前不可知,并且后续聚合阶段包括引用该字段的表达式。 |
| |||||||||||||||
该表达式会创建一个引用加密字段的新字段,并在同一表达式中对该新字段进行操作。 |
| |||||||||||||||
该表达式引用比较表达式中加密字段的前缀。 |
| |||||||||||||||
表达式的结果与加密字段进行比较。 |
| |||||||||||||||
该表达式将变量绑定到加密字段或尝试重新绑定 |
| |||||||||||||||
表达式的第一个参数是加密字段,并且
|
|
不支持的字段类型
为客户端字段级自动加密配置的官方 MongoDB 4.2+ 兼容驱动程序不支持任何需要加密以下值类型的读取或写入操作:
加密不能充分隐藏这些值的类型信息。
自动字段级加密也不支持对确定性字段进行读取或写入操作,在该操作中,该操作会将加密字段与以下值类型进行比较:
double
decimal128
bool
object