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