CSFLE 服务器端模式执行
MongoDB 的Queryable Encryption功能在MongoDB 7.0及更高版本中可用 (GA)。 要学习;了解有关Queryable Encryption的更多信息并将其与客户端字段级加密的优点进行比较,请参阅 Queryable Encryption 。
在启用了客户端字段级加密 (CSFLE) 的客户端应用程序中,您可以使用模式验证来让 MongoDB 实例强制执行特定字段的加密。 要指定哪些字段需要加密,请将自动加密规则关键字与 $jsonSchema
验证对象结合使用。 如果指定字段不是Binary (BinData)
子类型6对象,服务器会拒绝对该集合的任何写入操作。
要了解配置为使用自动加密的启用 CSFLE 的客户端在遇到服务器端模式时的行为,请参阅服务器端字段级加密执行。
要了解配置为使用显式加密且启用了 CSFLE 的客户端在遇到服务器端模式时的行为,请参阅服务器端字段级加密执行。
例子
hr
employees
以具有collection集合的数据库为例。employees
集合中的文档具有以下形式:
{ "name": "Jane Doe", "age": 51 }
您希望使用collection的应用程序强制执行以下行为:
加密
age
字段时,客户端必须遵循以下加密规则:使用
_id
为UUID("e114f7ad-ad7a-4a68-81a7-ebcb9ea0953a")
的数据加密密钥。使用随机加密算法。
age
字段必须是整数。
加密
name
字段时,客户端必须遵循以下加密规则:使用
_id
为UUID("33408ee9-e499-43f9-89fe-5f8533870617")
的数据加密密钥。使用确定性加密算法。
name
字段必须是字符串。
以下mongosh
代码使用collMod
命令更新hr.employees
集合以包含validator
,从而强制执行上述行为:
db.getSiblingDB("hr").runCommand({ collMod: "employees", validator: { $jsonSchema: { bsonType: "object", properties: { age: { encrypt: { keyId: [UUID("e114f7ad-ad7a-4a68-81a7-ebcb9ea0953a")], algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Random", bsonType: "int", }, }, name: { encrypt: { keyId: [UUID("33408ee9-e499-43f9-89fe-5f8533870617")], algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", bsonType: "string", }, }, }, }, }, });
了解详情
要了解有关 CSFLE 支持的加密算法的更多信息,请参阅字段和加密类型。
要了解有关加密模式和加密规则的更多信息,请参阅CSFLE 加密模式。