参考 > 安全 > 客户端字段级加密 > 自动客户端字段级加密 > 具有自动字段级加密的读/写支持
企业功能
字段级加密的自动功能仅在MongoDB 4.2 Enterprise和MongoDB Atlas 4.2集群中可用。
4.2版中的新功能。
此页面记录了配置为4.2兼容的驱动程序支持的特定命令,查询运算符,更新运算符,聚合阶段和聚合表达式,这些驱动程序配置为自动客户端字段级加密。
MongoDB将客户端字段级加密字段存储为
BinData
Blob。与BinData
针对解密值发出相同的操作相比,针对加密值发出的读取和写入操作可能具有意外或错误的行为。某些操作具有严格的BSON类型支持,其中针对某个BinData
值发出操作会返回错误。
BinData
值或针对BinData
值发布时具有异常行为的运算符或表达式的读/写操作。兼容MongoDB 4.2的官方兼容驱动程序通过以下命令支持 自动客户端字段级加密:
对于任何受支持的命令,如果该命令使用不受支持的运算符,聚合阶段或聚合表达式,则与4.2兼容的驱动程序将返回错误:
以下命令不需要自动加密。配置为与MongoDB 4.2兼容的官方驱动程序,用于自动客户端字段级加密,这些命令直接传递给
mongod
:
getMore
[1]authenticate
getnonce
logout
isMaster
abortTransaction
commitTransaction
endSessions
startSession
create
createIndexes
drop
dropDatabase
dropIndexes
killCursors
listCollections
listDatabases
listIndexes
renameCollection
ping
通过为自动客户端字段级加密配置的4.2兼容驱动程序发出任何其他命令都会返回错误。
[1] | 虽然自动客户端字段级加密不对getMore 命令进行加密,但是对命令的响应可能包含加密的字段值。配置了正确的客户端字段级加密选项的应用程序将
自动解密这些值。没有正确加密选项的应用程序只能看到加密值。 |
针对确定性 加密的字段发出以下命令时,为官方客户端字段加密配置的官方兼容4.2的驱动程序允许以下查询运算符:
该加密领域比较查询null
或正则表达式总是抛出一个错误,即使使用支持的查询运算符。针对随机加密字段发出这些运算符的查询将引发错误。
$exists
针对确定性字段和随机加密字段发布操作员时,操作员具有正常行为
。
针对加密字段指定任何其他查询运算符的查询将返回错误。
即使未针对加密字段发出以下查询运算符,也会引发错误:
针对确定性加密的字段发布时,为自动客户端字段级加密配置的官方兼容4.2的驱动程序允许以下更新运算符:
对于使用$rename
运算符对加密字段进行更新操作,请确保自动JSON模式为源和目标字段名称指定相同的加密元数据。
指定针对加密字段的任何其他更新运算符的更新将返回错误。
即使使用受支持的运算符,具有以下行为的更新操作也会引发错误 :
配置为官方MongoDB的4.2兼容的驱动程序自动客户端字段级加密 也不会支持插入具有以下行为的命令:
为自动客户端字段级加密配置的与MongoDB 4.2兼容的官方驱动程序 支持以下聚合管道阶段:
$limit
$match
$group
(有关使用要求,请参见 $ group行为 。)$sample
$skip
$sort
$project
$addFields
$geoNear
$collStats
$indexStats
$bucket
$bucketAuto
$unwind
$sortByCount
$count
$replaceRoot
$redact
$lookup
和$graphLookup
(有关
使用要求,请参见$ lookup和$ graphLookup Behavior )在配置为指定任何其他阶段的自动加密的集合上运行的聚合管道返回错误。
对于每个受支持的管道阶段,MongoDB跟踪在通过受支持的管道时必须加密的字段, 并将其标记为加密。
每个受支持的阶段都必须仅指定受支持的 查询运算符和 聚合表达式。
$lookup
和$graphLookup
行为¶自动客户端字段级加密支持
$lookup
和并且仅在集合与运行聚合的
集合匹配时(即自查找操作)支持。$graphLookup
from
$lookup
并$graphLookup
引用不同的阶段from
集合返回一个错误。
为自动客户端字段级加密配置的官方兼容4.2的驱动程序允许对确定性加密的字段使用以下表达式进行聚合阶段:
如果针对加密字段发出所有其他聚合表达式,则返回错误。
即使使用受支持的聚合表达式,具有以下行为的聚合阶段也会引发错误 :
表达方式 | 拒绝行为 | 例 |
---|---|---|
该表达式指定一个字段,其加密属性只有在运行时才能知道,并且随后的聚合阶段包括引用该字段的表达式。 | ||
该表达式创建一个新字段,该字段引用一个加密字段,并在同一表达式中对该新字段进行操作。 | ||
该表达式引用比较表达式中加密字段的前缀。 | ||
将表达式的结果与一个加密字段进行比较。 | ||
$let |
该表达式将变量绑定到加密字段或尝试重新绑定$$CURRENT 。 |
|
$in |
表达式的第一个参数是一个加密字段, 并且
|
官方MongoDB的4.2兼容的驱动程序配置为 自动客户端字段级加密也不会支持需要加密以下值类型的任何读或写操作:
加密不能充分隐藏这些值的类型信息。
自动字段级加密也并不支持在读或写操作的确定性领域,其中操作的加密领域比较以下值类型:
double
decimal128
bool
object
array
javascriptWithScope