Docs Menu
Docs Home
/
MongoDBマニュアル
/ / / / /

自動暗号化がサポートする操作

項目一覧

  • サポートされている読み取りコマンドと書込みコマンド
  • サポートされているクエリ演算子
  • サポートされていない挿入操作
  • サポートされている更新演算子
  • サポートされている集計ステージ
  • $group 動作
  • $lookup$graphLookupの動作
  • サポートされている集計式
  • サポートされていないフィールド型

このページでは、自動クライアント側フィールドレベル暗号化用に構成されたドライバーでサポートされている特定のコマンド、クエリ演算子、更新演算子、集計ステージ、および集計式について説明します。

自動クライアント側フィールドレベル暗号化を使用するドライバーは、次のコマンドをサポートします。

サポートされている コマンドではいずれの コマンドでも、サポート対象外の演算子、集計ステージ、または集計式が使用されている場合、ドライバーはエラーを返します。 サポートされている演算子、ステージ、および式の完全なリストについては、このページの次のセクションを参照してください。

  • サポートされているクエリ演算子

  • サポートされている更新演算子

  • サポートされている集計ステージ

  • サポートされている集計式

次のコマンドには自動暗号化は必要ありません。 自動クライアント側フィールドレベル暗号化用に構成されたドライバーは、これらのコマンドを直接mongodに直接渡します。

自動クライアント側フィールドレベル暗号化用に構成されたドライバーを介して他のコマンドを発行すると、エラーが返されます。

[1] 自動クライアント側フィールドレベル暗号化(CSFLE)はgetMoreコマンドを暗号化しませんが、コマンドへの応答には暗号化されたフィールド値が含まれる場合があります。
  • 正しい CSFLE オプションで構成されたアプリケーションは、それらの値を自動的に復号化します。
  • 正しい CSFLE オプションを持たないアプリケーションには、暗号化された 値のみが表示されます。

自動クライアント側フィールドレベル暗号化用に構成されたドライバーでは、確定的に暗号化されたフィールドに対して発行された場合、次のクエリ演算子を使用できます。

暗号化されたフィールドをnullまたは正規表現と比較するクエリでは、サポートされているクエリ演算子を使用している場合でも、常にエラーが返されます。 ランダムに暗号化されたフィールドに対してこれらの演算子を発行するクエリは、エラーを返します。

$exists演算子は、確定的に暗号化されたフィールドとランダムに暗号化されたフィールドの両方に対して発行された場合、通常の動作をします。

暗号化されたフィールドに対して他のクエリ演算子を指定するクエリでは、エラーが返されます。

次のクエリ演算子は、暗号化されたフィールドに対して発行されていない場合でも、エラーを返します。

警告

BinData の予期しない動作

MongoDB は、クライアント側のフィールドレベルで暗号化されたフィールドをBinData shell として保存します。 暗号化されたBinData値に対して発行された読み取りおよび書込み操作は、復号化された値に対して同じ操作を発行した場合と比較して、予期しない動作や誤った動作を引き起こす可能性があります。 特定の操作は厳格な BSON タイプのサポートがあり、 BinData値に対して発行するとエラーが返されます。

  • 自動クライアント側フィールドレベル暗号化を使用するドライバーは、 BinData値をサポートしていない、またはBinData値に対して発行すると予期しない動作をする演算子または式の読み取りおよび書込み操作を解析します。

  • 明示的(手動)のクライアント側フィールドレベル暗号化使用するアプリケーションは、暗号化されたフィールドに対して読み取りおよび書込み(write)操作を発行するためのガイダンスとしてこのページを使用できます。

自動クライアント側フィールドレベル暗号化用に構成されたドライバーは、次の動作を持つ挿入コマンドをサポートしていません

  • 暗号化されたフィールドに関連付けられたTimestamp(0,0)を持つドキュメントを挿入します。 (0,0)の値は、 mongodがタイムスタンプを生成する必要があることを示します。 mongodが暗号化されたフィールドを生成できない場合、結果のタイムスタンプは暗号化されません。

  • 構成された自動スキーマで暗号化された_idフィールドが指定されている場合は、暗号化された_idなしでドキュメントを挿入します。 mongodが暗号化されていないObjectIdを自動的に生成する場合、ドキュメントから_idを省略すると、自動暗号化ルールに準拠していないドキュメントが生成されます。

  • 決定的に暗号化されたフィールドに関連付けられた配列を持つドキュメントを挿入します。 クライアント側の自動フィールドレベル暗号化は、配列の決定的な暗号化をサポートしていません。

自動クライアント側フィールドレベル暗号化用に構成されたドライバーでは、確定的に暗号化されたフィールドに対して発行された場合、次の更新演算子が可能になります。

暗号化されたフィールドで$rename演算子を使用する場合、自動JSON schemaはソース フィールド名とターゲット フィールド名に対して同じ暗号化メタデータを指定する必要があります。

暗号化されたフィールドに対して他の更新演算子を指定した更新は、エラーを返します。

次の動作を持つ更新操作では、サポートされている演算子を使用している場合でも、エラーが返されます。

  • 更新操作により、暗号化された パス内に配列が生成されます。

  • 更新操作では、 集計式の構文を使用します。

確定的に暗号化されたフィールドにクエリフィルターを指定するアップデート操作の場合、クエリフィルターはそれらのフィールドでサポートされている演算子のみを使用する必要があります。

自動クライアント側フィールドレベル暗号化用に構成されたドライバーは、次の集計パイプライン ステージをサポートします。

他のステージを指定する自動暗号化用に構成されたコレクションを操作するパイプラインは、 エラーを返します。

サポートされている各パイプライン ステージごとに、MongoDB はサポートされているパイプラインを通過するときに暗号化する必要があるフィールドを追跡し、それらを暗号化対象としてマークします。

サポートされている各ステージでは、サポートされているクエリ演算子集計式 のみを指定する必要があります。

$group は、クライアント側のフィールドレベル暗号化に固有の次の動作をします。

$group は、以下をサポートします。

  • 決定的に暗号化されたフィールドでグループ化します。

  • 暗号化されたフィールドで$addToSet$pushアキュムレータを使用します。

$group は次の要素をサポートしていません。

  • $addToSet$pushアキュムレータによって返される配列に一致します。

  • 暗号化されたフィールドの算術アキュムレータ。

自動クライアント側フィールドレベル暗号化は、 コレクションが集計が実行されるコレクション(具体的には、 自己検索操作 )と一致する 場合にのみ 、 と をサポートします。$lookup$graphLookupfrom

別のfromコレクションを参照する$lookup } ステージと$graphLookupステージでは、エラーが返されます。

$lookup暗号化されていないコレクションでは、CSFLEMongoClient が有効化されている から を実行することはできません。

自動クライアント側フィールドレベル暗号化用に構成されたドライバーでは、確定的に暗号化されたフィールドに対して次の式を使用する集計ステージが可能になります。

暗号化されたフィールドに対して発行されると、他のすべての集計式はエラーを返します。

次の動作を持つ集計ステージでは、サポートされている集計式を使用していてもエラーが返されます。

拒否された動作

式は、実行時まで暗号化プロパティが不明なフィールドを指定、後続の集計ステージにはそのフィールドを参照する式が含まれます。

$addFields : {
"valueWithUnknownEncryption" : {
$cond : {
if : { "$encryptedField" : "value" },
then : "$encryptedField",
else: "unencryptedValue"
}
}
},
{
$match : {
"valueWithUnknownEncryption" : "someNewValue"
}
}

式は暗号化されたフィールド参照し、同じ式内のその新しいフィールドに対して操作する新しいフィールドを作成します。

{
$eq : [
{"newField" : "$encryptedField"},
{"newField" : "value"
]
}

式は、比較式内の暗号化されたフィールドのプレフィックスを参照します。

{ $eq : [ "$prefixOfEncryptedField" , "value"] }

式の結果は暗号化されたフィールドと比較されます。

{
$eq : [
"$encryptedField" ,
{ $ne : [ "field", "value" ] }
]
}

式は変数を暗号化されたフィールドにバインドするか、 $$CURRENTの再バインドを試みます。

{
$let: {
"vars" : {
"newVariable" : "$encryptedField"
}
}
}

式の最初の引数暗号化されたフィールドであり、

  • 式の 2 番目の引数は配列リテラルではありません

    -あるいは-

  • 式の 2 番目の引数は暗号化されたフィールドです。

{
$in : [
"$encryptedField" ,
"$otherEncryptedField"
]
}

自動クライアント側フィールドレベル暗号化(CSFLE)用に構成されたドライバーは、次の値の型の暗号化を必要とする読み取りまたは書込み操作をサポートしていません

暗号化では、これらの値の型情報が十分に非表示にされません。

自動 CSFLE では、暗号化されたフィールドが次の値の型と比較される、決定的に暗号化されたフィールドに対する読み取りまたは書込み操作サポートされていません。

  • array

  • bool

  • decimal128

  • double

  • object

戻る

スキーマの強制