制限
項目一覧
Overview
Queryable Encryption を有効にする前に、これらの制限と制約を考慮してください。 一部の操作はサポートされていません。他の操作の動作は異なります。
Atlas Search
Queryable Encryption は MongoDB Atlas Search と互換性がありません。
MongoDB サポートの制限
コレクションで Queryable Encryption を有効にすると、一部の診断コマンドのフィールドが編集され、クエリ ログから一部の操作が省略されます。これにより、特にクエリのパフォーマンスを分析する際、MongoDBサポートエンジニアが利用できるデータが制限されます。暗号化されたコレクションに対する操作の影響を測定するには、サードパーティのアプリケーションパフォーマンス監視ツールを使用してメトリクスを収集します。
詳しくは、「 リダクション 」セクションを参照してください。
競合係数
競合係数は、同時操作の数に基づいてパフォーマンスを調整するのに役立つ設定です。 設定されていない場合、競合はデフォルト値の 8
を使用し、ほとんどのワークロードで高パフォーマンスを提供します。
競合係数は、暗号化のフィールドを指定するときにのみ設定できます。 暗号化のフィールドを指定すると、競合係数は不変です。
詳細については、「競合係数の構成 」を参照してください。
メタデータコレクションの手動圧縮
Manually run metadata collection compaction when your metadata collections exceed 1 GB. 圧縮により、暗号化されたフィールドに関連付けられたメタデータ コレクションのサイズが縮小され、パフォーマンスが向上します。
encryptedFieldsMap の変更
に渡されるencryptedFieldsMap
MongoClient
は変更しないでください。指定すると、クエリ時に予期しない誤った動作が発生する可能性があります。
読み取りおよび書込み操作のサポート
mongod
は暗号化されたBinData
} のみを保存し、暗号化されたフィールドを指定する任意の集計式またはクエリ演算子をBinData
の値に対して適用します。 式または演算子はBinData
フィールドをサポートする場合がありますが、復号化された値に対して同じ式または演算子を発行すると、結果の値が誤った値や予期しない値になる可能性があります。 式または演算子がBinData
値をサポートしていない場合、 mongod
はエラーをスローします。
編集
セキュリティを向上させるために、Queryable Encryption は、暗号化されたコレクションの一部の診断コマンドのフィールドを編集し、クエリ ログから特定の操作を省略します。 暗号化されたコレクションとは、 encryptedFields
オプションを持つ任意のコレクションです。
クエリ ログとデータベースプロファイラーのリダクション
以下の CRUD 操作は、暗号化されたコレクションで実行すると、低速操作クエリ ログとデータベースプロファイラーsystem.profile
コレクションから省略されます。
compactStructuredEncryptionData
コマンドcleanupStructuredEncryptionData
コマンド
コマンドと集計ステージの出力リダクション
collStats
コマンドと$collStats
集計ステージ
Omit
"queryExecStats"
Omit
"latencyStats"
"WiredTiger"
が存在する場合は、編集してurl
フィールドのみを含めます。
currentOp
コマンドと$currentOp
集計ステージ
"command"
の後のすべてのフィールドを省略します。最初の要素、
$comment
、$db
のみを含むように"command"
を編集します。
top
コマンドは暗号化されたコレクションのコレクション名のみを返します。
$planCacheStats
集計ステージでは、暗号化されたコレクションに対する操作は通常どおりキャッシュされますが、操作は省略されます。
トポロジー サポート
レプリカセットとシャーディングされたクラスターはサポートされています
スタンドアロン配置はサポートされていません
セカンダリ読み取りはサポートされていません
シャーディング
メタデータコレクションはシャーディングしてはなりません
シャードキーは暗号化されたフィールドであってはなりません
Queryable Encryption を使用するシャーディングされたクラスターのトランザクションの場合、 readConcernを
snapshot
に設定する必要があります。
CRUD
Queryable Encryption は、 マルチドキュメントの更新操作 をサポートしていません。
db.collection.updateMany()
はサポートされていません。Queryable Encryption は、 マルチステートメントのアップデートまたは削除操作をサポートしていません。 複数のアップデートまたは削除操作を持つ
db.collection.bulkWrite()
はサポートされていません。Queryable Encryption は
db.collection.findAndModify()
引数を制限します。fields
は許可されていませんnew
は false である必要があります
アップサート操作を実行すると、フィルター内の暗号化されたフィールドは挿入から除外されます。
コレクション
同じコレクションでは、クライアント側のフィールドレベル暗号化と Queryable Encryption は併用できません。
Queryable Encryption は、 クライアント側のフィールド レベル暗号化 で暗号化されたコレクションからの移行をサポートしていません。 ドキュメントを復号化し、1 つずつ挿入する必要があります。
Queryable Encryption は、暗号化されていないコレクションからの自動移行をサポートしていません。 ドキュメントは 1 つずつ挿入する必要があります。
Queryable Encryption は新しいコレクションのみをサポートします。 既存のコレクションに Queryable Encryption を追加または削除することはできません。
暗号化されたフィールドを含むコレクションの名前を変更することはできません。
jsonSchema
にencrypt
キーワードが含まれている場合、Queryable Encryption コレクションの作成時にjsonSchema
からdb.createCollection()
を指定することはできません。jsonSchema
encryptedFields
jsonSchema
db.createCollection()
に暗号化されたフィールドの検証が含まれていない限り、 と の両方を に指定できます。
Queryable Encryption は、ビュー、時系列コレクション、またはCapped コレクション をサポートしていません。
Queryable Encryption は、 TTL インデックスまたは一意のインデックスをサポートしていません。
jsonSchema
検証を無効にすることはできません。コレクションで
encryptedFields
オプションが使用される場合:validationLevel
をnone
に設定することはできません。validationAction
をwarn
に設定することはできません。
コレクションの削除
Queryable Encryption が設定されていない
MongoClient
からコレクションを削除しても、関連付けられているメタデータコレクションは削除されません。 メタデータ コレクションを削除する前に暗号化されたフィールドを含むコレクションを削除すると、mongod
は警告を記録します。
Tip
Queryable Encryption 用に構成されたMongoClient
でコレクションを削除すると、互換性のあるドライバーは関連するメタデータ コレクションも削除します。
コレクションを作成
Queryable Encryption を使用するコレクションは常に明示的に作成します。 暗黙的なコレクション作成では、必要なインデックスとメタデータ コレクションが作成されないため、クエリのパフォーマンスが低下します。
クエリ タイプ
encryptedFieldsMap
でコレクションを作成するときにフィールドに指定するクエリタイプは不変です。 既存のフィールドに新しいクエリ タイプを追加することはできません。また、既存のクエリ タイプを変更することもできません。
暗号化されたフィールド名
暗号化されたフィールド名は不変です。 たとえば、暗号化するフィールドとしてssn
を指定した場合、フィールド名をtaxPayerID
に$rename
することはできません。
ビュー
暗号化されたフィールドを持つコレクションに対するビューに対するサポートされていないクエリを防ぐために、アプリケーションは自動暗号化検証に依存することはできません。
Queryable Encryption で暗号化された値を含むコレクションのビューに対するクエリでは、基礎となるビュー集計パイプラインまたはクエリが暗号化されたフィールドを参照している場合、予期しない結果や不正確な結果が返されることがあります。 Queryable Encryption で暗号化された値を含むコレクションにビューを作成する場合は、予期しない結果や誤った結果のリスクを軽減するために、暗号化されたフィールドでの操作を避けてください。
ビューの詳細については、「ビュー 」を参照してください。
照合
Queryable Encryption は、ユーザー指定の照合またはコレクションのデフォルトの照合を無視します。 暗号化により、フィールド値がぼかして表示され、通常の照合動作が妨げられます。 暗号化されたフィールドに対する照合を区別するクエリでは、予期しない結果や誤った結果が返されることがあります。
照合の詳細については、照合ドキュメント を参照してください。
Queryable Encryption 互換ドライバーには、自動暗号化 でサポートされている操作のリストがあります。 サポートされていない読み取りおよび書込み操作の場合、基礎となるサポート ライブラリはコレクション カタログをイントロスペクションしてデフォルトの照合を識別できません。 したがって、アプリケーションは Queryable Encryption の検証に依存して、照合のデフォルトを持つ暗号化されたフィールドに対するクエリを防ぐことはできません。
Unique Indexes
一意なインデックスは、インデックス キーで暗号化されたフィールドが指定されている場合、一意であることを保証できません。
Queryable Encryption では、同じ入力でも、常に異なる暗号化値が出力されます。 サーバーでは、復号化された値が一意でない場合でも、暗号化された各値が一意であると見なされます。 つまり、コレクションでフィールドに対してインデックスによって強制される一意の制約を使用しても、コレクションにはそのフィールドのプレーンテキスト値が重複する複数のドキュメントを含めることができます。
自動暗号化用に構成された Queryable Encryption と互換性のあるドライバーは、 自動暗号化の一部の操作をサポートします。 サポートされていない読み取りおよび書込み操作の場合、基礎のライブラリはインデックスカタログを内部検証して、特定のフィールドを一意として識別することはできません。 アプリケーションは、ランダムに暗号化されたフィールドでの一意の制約違反を防ぐために、自動暗号化検証に依存することはできません。
_id フィールド
MongoDB によって自動生成された値に依存しているため、 _id
フィールドを暗号化するように Queryable Encryption を構成することはできません。
読み取り/書込みクエリのサポート
自動暗号化は、コマンド、クエリ演算子、更新演算子、集計ステージ、および集計式のサブセットをサポートします。 サポートされている操作のリストについては、「自動暗号化がサポートする操作 」を参照してください。