CSFLE の制限事項
Overview
CSFLE を有効にする前に、これらの制限と制約を考慮してください。 一部の操作はサポートされていません。他の操作の動作は異なります。
互換性の制限については、「 互換性 」を参照してください。
読み取りおよび書込み操作のサポート
mongod
は暗号化されたBinData
} のみを保存し、 BinData
値に対して暗号化されたフィールドを指定する集計式またはクエリ演算子を適用します。 式または演算子はBinData
フィールドをサポートする場合がありますが、復号化された値に対して同じ式または演算子を発行すると、結果の値が誤った値や予期しない値になる可能性があります。 式または演算子がBinData
値をサポートしていない場合、 mongod
はエラーをスローします。
たとえば、確定的に暗号化された整数Salary
を考えてみましょう。 クエリは、 Salary
が100000
より大きいドキュメントをフィルタリングします。 アプリケーションは、クエリを発行する前に、決定的な暗号化を使用してクエリ値を明示的に(手動で)暗号化します。 The mongod
compares the encrypted BinData
value of 100000
to the encrypted BinData
values stored in each document. 操作は正常に返されますが、 BinData
値の比較では、復号化された整数値の比較とは異なる結果が返される可能性があります。
自動クライアント側フィールドレベル暗号化は、暗号化されたフィールドに対して発行された場合に誤った結果または予期しない結果を返す読み取りまたは書込み操作を拒否します。 完全なドキュメントについては、「自動暗号化がサポートする操作 」を参照してください。
明示的な(手動)暗号化を実行するアプリケーションは、暗号化されたフィールドに対して読み取り/書込み操作を発行するためのガイダンスとしてリンクされたページを参照する場合があります。
配列
CSFLE は、ドキュメントの配列内のフィールドの自動暗号化をサポートしていません。
ビュー
クライアント側のフィールドレベル暗号化で暗号化された値を含むコレクションのビューに対するクエリでは、基礎となるビュー集計パイプラインまたはクエリが暗号化されたフィールドを参照している場合、予期しない結果または不正確な結果が返されることがあります。 クライアント側のフィールドレベル暗号化で暗号化された値を含むコレクションにビューを作成する場合は、予期しない結果や誤った結果のリスクを軽減するために、暗号化されたフィールドでの操作を避けてください。
自動クライアント側フィールドレベル暗号化用に構成された 4.2 以降の互換性のあるドライバーは 自動暗号化 の操作をサポートしていますが、サポートされていない読み取りおよび書込み操作では、基礎となるサポート ライブラリをイントロスペクションして、特定のコレクションをビューとして識別することはできません。 したがって、アプリケーションは、暗号化されたフィールドを持つコレクションに対するビューに対するサポートされていないクエリを防ぐために、クライアント側の自動フィールドレベル暗号化検証に依存することはできません。
明示的(手動)暗号化を使用して暗号化された値を含むコレクションのビューをクエリするアプリケーションの場合は、暗号化されたフィールドに対して発行された場合、既知 の通常の動作 を持つクエリ演算子 のみ を使用してクエリを作成することを検討してください。
照合
クライアント側のフィールドレベル暗号化は、 ユーザー指定の照合またはコレクションのデフォルトの照合は尊重しません。 フィールドレベルの暗号化では、フィールド値がぼかして表示され、通常の照合動作が妨げられます。 暗号化されたフィールドに対する照合を区別するクエリでは、予期しない結果や誤った結果が返されることがあります。
自動クライアント側フィールドレベル暗号化用に構成された 4.2 以降の互換性のあるドライバーは 自動暗号化の操作 をサポートしていますが、サポートされていない読み取りおよび書込み操作の場合、基礎となるサポート ライブラリはコレクション カタログをイントロスペクションしてデフォルトの照合を識別できません。 したがって、アプリケーションは、クライアント側のフィールドレベル暗号化検証に依存して、照合デフォルトを持つ暗号化されたフィールドに対するクエリを防ぐことができません。
Unique Indexes
Unique indexes は、インデックス キーが ランダムに暗号化された フィールドを指定する場合、一意性を保証 できませ ん。
ランダム アルゴリズムを使用して暗号化されたフィールドでは、特定の入力に対して常に異なる暗号化値が生成されます。 サーバーは、復号化された値自体は一意でなくても、暗号化された各値を一意と見なします。 したがって、コレクションには、インデックスが強制される一意の制約を持つフィールドの重複する復号値を持つ複数のドキュメントを含めることができます。
自動クライアント側フィールドレベル暗号化用に構成された 4.2 以降の互換性のあるドライバーは、サポートされていない読み取りおよび書込み操作の自動暗号化の操作をサポートしていますが、基礎のサポート ライブラリは、特定のフィールドを一意として識別するためにインデックスカタログを内部検証することはできません。 したがって、アプリケーションは、ランダムに暗号化されたフィールドに対する一意の制約違反を防ぐために、クライアント側のフィールドレベル暗号化の自動検証に依存することはできません。
シャードキー
暗号化されたフィールドにシャードキーを指定するか、既存のシャードキーのフィールドを暗号化すると、シャーディング動作が予期せず、誤って実行される可能性があります。
自動クライアント側フィールドレベル暗号化用に構成された 4.2 以降の互換性のあるドライバーは 自動暗号化の操作 をサポートしていますが、サポートされていない読み取りおよび書込み操作では、基礎となるサポート ライブラリは、シャーディング カタログ メタデータを導入してシャードキー フィールドを識別することはできません。 したがって、アプリケーションは、シャードキー フィールドの暗号化を防ぐために、自動フィールドレベルの暗号化検証に依存することはできません。
読み取り/書込みクエリのサポート
自動クライアント側フィールドレベル暗号化は、コマンド、クエリ演算子、更新演算子、集計ステージ、および集計式のサブセットをサポートします。 完全なドキュメントについては、「自動暗号化がサポートする操作 」を参照してください。