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

Queryable Encryption の制限

項目一覧

  • Overview
  • セキュリティ保証
  • MongoDB サポートの制限
  • サポートされている操作
  • メタデータコレクションの手動圧縮
  • の変更 encryptedFieldsMap
  • _id フィールド
  • 暗号化されたフィールド名
  • クエリ可能なフィールドの変更
  • 編集
  • クエリ ログとデータベースプロファイラーのリダクション
  • コマンドと集計ステージの出力リダクション
  • トポロジー サポート
  • シャーディング
  • コレクション
  • コレクションの削除
  • コレクションを作成
  • 配列
  • ビュー
  • 照合
  • Unique Indexes

Queryable Encryption を有効にする前に、これらの制限と制約を考慮してください。 一部の操作はサポートされていません。他の操作の動作は異なります。

互換性の制限については、「 互換性 」をお読みください。

警告

Queryable Encryptionは、環境への永続的なアクセスを持つユーザー、またはデータベーススナップショットとそれに付随するクエリ トランザクション/ログの両方を取得できるユーザーではなく、データの流出を防ぎます。

Queryable Encryptionを使用する場合、等価クエリと範囲クエリはデータベーススナップショットを持つ攻撃者に対して同様のセキュリティを提供します。ただし、データベーススナップショットとクエリ情報の両方にアクセスする攻撃者は、Queryable Encryption のセキュリティ保証の範囲を超えています。これは、検索されるクエリ トランザクションまたはログの数が少ない場合でも、範囲クエリに 特に 当てはまります。6.1 を参照: 永続モデル 範囲クエリ 詳細については、概要のホワイトペーパーを参照してください。

コレクションで Queryable Encryption を有効にすると、一部の診断コマンドのフィールドが編集され、クエリ ログから一部の操作が省略されます。これにより、特にクエリのパフォーマンスを分析する際、MongoDBサポートエンジニアが利用できるデータが制限されます。暗号化されたコレクションに対する操作の影響を測定するには、サードパーティのアプリケーションパフォーマンス監視ツールを使用してメトリクスを収集します。

詳しくは、このページの「リダクション」セクションを参照してください。

Queryable Encryptionは、コマンド、クエリ演算子、更新演算子、集計ステージ、および集計式のサブセットをサポートしています。 サポートされている操作のリストについては、「 Queryable Encryptionがサポートする操作 」を参照してください。

Manually run metadata collection compaction when your metadata collections exceed 1 GB. 圧縮により、暗号化されたフィールドに関連付けられたメタデータ コレクションのサイズが縮小され、パフォーマンスが向上します。

に渡されるencryptedFieldsMap MongoClientは変更しないでください。指定すると、クエリ時に予期しない誤った動作が発生する可能性があります。

Queryable Encryptionは、 MongoClientコンストラクターに渡すencryptedFieldsMap構成内のフィールドのセットを暗号化します。 コレクションドキュメントに存在するencryptedFieldsMap構成で、以前はプレーンテキストのフィールドを指定した場合、 encryptedFieldsMap構成を更新した後に挿入されたドキュメントについて、そのフィールドに対してのみクエリを実行できます。

例、プレーンテキストstreetAddressフィールドを持つドキュメントを挿入したデータベースを考えてみましょう。 このフィールドをencryptedFieldsMapに追加し、後続の挿入を実行すると、 streetAddressの暗号化された値がデータベースに挿入されます。 ドライバーは特定のstreetAddressに対する今後のクエリをBinDataとして送信します。 その結果、元のドキュメント内のプレーンテキストの値は、将来のクエリと一致することはありません。

MongoDB によって自動生成された値に依存しているため、 _idフィールドを暗号化するように Queryable Encryption を構成することはできません。

暗号化されたフィールドの名前を変更することはできません。 例、暗号化するフィールドとしてssnを指定した場合、フィールド名をtaxPayerID$renameすることはできません。

encryptedFieldsMapでコレクションを作成するときにフィールドに指定するクエリタイプは不変です。 既存のフィールドに新しいクエリ タイプを有効にすることはできません。また、既存のクエリ タイプを変更することもできません。

セキュリティを向上させるために、Queryable Encryption は、暗号化されたコレクションの一部の診断コマンドのフィールドを編集し、クエリ ログから特定の操作を省略します。 暗号化されたコレクションとは、 encryptedFieldsオプションを持つ任意のコレクションです。

以下の CRUD 操作は、暗号化されたコレクションで実行すると、低速操作クエリ ログとデータベースプロファイラーsystem.profileコレクションから省略されます。

collStatsコマンドと$collStats集計ステージ

  • Omit "queryExecStats"

  • Omit "latencyStats"

  • "WiredTiger"が存在する場合は、編集してurlフィールドのみを含めます。

currentOpコマンドと$currentOp集計ステージ

  • "command"の後のすべてのフィールドを省略します。

  • 最初の要素、 $comment$dbのみを含むように"command"を編集します。

topコマンドは暗号化されたコレクションのコレクション名のみを返します。

$planCacheStats集計ステージでは、暗号化されたコレクションに対する操作は通常どおりキャッシュされますが、操作は省略されます。

  • レプリカセットとシャーディングされたクラスターはサポートされています

  • スタンドアロン配置はサポートされていません

  • セカンダリ読み取りはサポートされていません

  • メタデータコレクションはシャーディングしてはなりません

  • シャードキーは暗号化されたフィールドであってはなりません

  • 同じコレクションでは、クライアント側のフィールドレベル暗号化と Queryable Encryption は併用できません。

    • Queryable Encryption は、 クライアント側のフィールド レベル暗号化 で暗号化されたコレクションからの移行をサポートしていません。 ドキュメントを復号化し、1 つずつ挿入する必要があります。

    • Queryable Encryption は、暗号化されていないコレクションからの自動移行をサポートしていません。 ドキュメントは 1 つずつ挿入する必要があります。

  • Queryable Encryption は新しいコレクションのみをサポートします。 既存のコレクションに Queryable Encryption を追加または削除することはできません。

  • 暗号化されたフィールドを含むコレクションの名前を変更することはできません。

  • jsonSchemaencryptキーワードが含まれている場合、Queryable Encryption コレクションの作成時にjsonSchemaからdb.createCollection()を指定することはできません。

    • jsonSchema encryptedFieldsjsonSchemadb.createCollection()に暗号化されたフィールドの検証が含まれていない限り、 と の両方を に指定できます。

  • Queryable Encryption は、ビュー時系列コレクション、またはCapped コレクション をサポートしていません。

  • Queryable Encryption は、 TTL インデックスまたは一意のインデックスをサポートしていません。

  • jsonSchema検証を無効にすることはできません。

  • コレクションでencryptedFieldsオプションが使用される場合:

    • validationLevelnoneに設定することはできません。

    • validationActionwarnに設定することはできません。

  • Queryable Encryption が設定されていないMongoClientからコレクションを削除しても、関連付けられているメタデータコレクションは削除されません。 メタデータ コレクションを削除する前に暗号化されたフィールドを含むコレクションを削除すると、 mongodは警告を記録します。

Tip

Queryable Encryption 用に構成されたMongoClientでコレクションを削除すると、互換性のあるドライバーは関連するメタデータ コレクションも削除します。

Queryable Encryption を使用するコレクションは常に明示的に作成します。 暗黙的なコレクション作成では、必要なインデックスとメタデータ コレクションが作成されないため、クエリのパフォーマンスが低下します。

Queryable Encryptionは、ドキュメントの配列内のフィールドの自動暗号化をサポートしていません。

暗号化されたフィールドを持つコレクションに対するビューに対するサポートされていないクエリを防ぐために、アプリケーションは自動暗号化検証に依存することはできません。

Queryable Encryption で暗号化された値を含むコレクションのビューに対するクエリでは、基礎となるビュー集計パイプラインまたはクエリが暗号化されたフィールドを参照している場合、予期しない結果や不正確な結果が返されることがあります。 Queryable Encryption で暗号化された値を含むコレクションにビューを作成する場合は、予期しない結果や誤った結果のリスクを軽減するために、暗号化されたフィールドでの操作を避けてください。

ビューの詳細については、「ビュー 」を参照してください。

Queryable Encryption は、ユーザー指定の照合またはコレクションのデフォルトの照合を無視します。 暗号化により、フィールド値がぼかして表示され、通常の照合動作が妨げられます。 暗号化されたフィールドに対する照合を区別するクエリでは、予期しない結果や誤った結果が返されることがあります。

照合の詳細については、照合ドキュメント を参照してください。

Queryable Encryption 互換ドライバーには、自動暗号化 でサポートされている操作のリストがあります。 サポートされていない読み取りおよび書込み操作の場合、基礎となるサポート ライブラリはコレクション カタログをイントロスペクションしてデフォルトの照合を識別できません。 したがって、アプリケーションは Queryable Encryption の検証に依存して、照合のデフォルトを持つ暗号化されたフィールドに対するクエリを防ぐことはできません。

一意なインデックスは、インデックス キーで暗号化されたフィールドが指定されている場合、一意であることを保証できません。

Queryable Encryption では、同じ入力でも、常に異なる暗号化値が出力されます。 サーバーでは、復号化された値が一意でない場合でも、暗号化された各値が一意であると見なされます。 つまり、コレクションでフィールドに対してインデックスによって強制される一意の制約を使用しても、コレクションにはそのフィールドのプレーンテキスト値が重複する複数のドキュメントを含めることができます。

自動暗号化用に構成された Queryable Encryption と互換性のあるドライバーは、 自動暗号化の一部の操作をサポートします。 サポートされていない読み取りおよび書込み操作の場合、基礎のライブラリはインデックスカタログを内部検証して、特定のフィールドを一意として識別することはできません。 アプリケーションは、ランダムに暗号化されたフィールドでの一意の制約違反を防ぐために、自動暗号化検証に依存することはできません。

戻る

アプローチの比較