クライアント側フィールドレベル暗号化(CSFLE)対応のクライアント アプリケーションでは、 スキーマ検証を使用して、MongoDB インスタンスが特定のフィールドの暗号化を強制するようにできます。 暗号化が必要なフィールドを指定するには、 検証オブジェクトとともに 自動暗号化ルール キーワード $jsonSchemaを使用します。サーバーは、指定されたフィールドがBinary (BinData)サブタイプ6オブジェクトではない、そのコレクションへの書込み操作を拒否します。
自動暗号化を使用するように構成された CSFLE 対応のクライアントがサーバー側のスキーマに遭遇したときの動作については、「サーバー側のフィールド レベル暗号化の強制 」を参照してください。
明示的な暗号化を使用するように構成された CSFLE 対応のクライアントがサーバー側のスキーマに遭遇したときにどのように動作するかについては、「サーバー側のフィールド レベルの暗号化の強制 」を参照してください。
例
employeesコレクションを持つhrデータベースを考えてみましょう。 employeesコレクション内のドキュメントの形式は次のとおりです。
{ "name": "Jane Doe", "age": 51 }
コレクションを使用するクライアント アプリケーションに次の動作を強制します。
ageフィールドを暗号化する場合、クライアントは次の暗号化ルールに従う必要があります。UUID("e114f7ad-ad7a-4a68-81a7-ebcb9ea0953a")の_idを持つデータ暗号化キーを使用します。ランダム化された暗号化アルゴリズムを使用します。
ageフィールドは整数である必要があります。
nameフィールドを暗号化する場合、クライアントは次の暗号化ルールに従う必要があります。UUID("33408ee9-e499-43f9-89fe-5f8533870617")の_idを持つデータ暗号化キーを使用します。決定的な暗号化アルゴリズムを使用します。
nameフィールドは string である必要があります。
次の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 の暗号化スキーマ 」を参照してください。