このページでは、 Queryable Encryption互換ドライバーでサポートされている特定のデータ型、コマンド、クエリ演算子、更新演算子、集計ステージ、集計式について説明します。 ここでは、自動暗号化を使用する操作と、明示的な暗号化を使用する操作の動作について説明します。
注意
エンタープライズ機能
MongoDB Enterprise および MongoDB Atlas で自動暗号化が利用可能
を使用する操作 BinData
MongoDBはQueryable Encryptionで暗号化されたフィールドをBinData shell として保存します。 暗号化されたBinData値に対して発行された読み取りおよび書込み操作は、復号化された値に対して同じ操作を発行した場合と比較して、予期しない動作や誤った動作を引き起こす可能性があります。 特定の操作は厳格なBSONタイプのサポートがあり、 BinData値に対して発行するとエラーが返されます。
Queryable Encryptionと互換性のある公式の ドライバー は、 BinData値をサポートしていない演算子または式の読み取り操作と書込み操作を解析します。
BSON types
フィールドに対して暗号化できるBSON typesは、そのフィールドのクエリタイプによって異なります。
Queryable Encryptionでは、以下の queryType: "equality"例外 を除き、すべての BSON types に対して 設定 を行うことができます。
arraydecimal: 10進数(IEEE 754 10進128 )double: double (IEEE 754Binary64)object
Queryable Encryptionでは、次の queryType: "range"BSON types に対して を 構成 できます。
date: UTC 日時(Int 64 )decimal: 10進数(IEEE 754 10進128 )double: double (IEEE 754Binary64)int: 32ビット整数long: 64ビット整数
注意
クエリタイプは暗号化されたインデックスの構成であり、クエリ演算子のセットそのものではありません。特に、decimalとdoubleはqueryType: "range"をサポートしており、MongoDBは範囲インデックスを使用してこれらのフィールドの等価クエリを評価します。
Queryable Encryptionは、string BSON型のみに対して設定queryType: "prefix"、queryType: "suffix"、およびqueryType: "substring"をサポートしています。
queryType: "none" を設定した場合、MongoDB はフィールドを暗号化しますが、クエリ可能にはしません。Queryable Encryptionは、以下にリストされているqueryType: "none" サポートされていないBSON types (array や を含む)を 除く 、すべての BSON types のobject をサポートしています。
サポートされていない BSON types
クエリの種類に関係なく、Queryable Encryptionは、これらの値の型情報を適切に隠蔽できないため、以下のBSON typesの暗号化をサポートしていません。
nullundefined
Queryable Encryptionは、クエリタイプがnoneの場合、arrayフィールドの自動暗号化と明示的な暗号化をサポートします。配列は暗号化できますが、その中のフィールドは暗号化できません。また、暗号化された配列をクエリすることもできません。
Queryable Encryption では、暗号化されたフィールドが次の値の型と比較される操作がある暗号化されたフィールドに対する読み取りまたは書込み操作はサポートされていません。
arrayobject
CRUD
Queryable Encryptionは、 マルチドキュメントのアップデートまたは削除操作をサポートしていません。 複数のアップデートまたは削除操作を持つ
db.collection.updateMany()とdb.collection.bulkWrite()はサポートされていません。Queryable Encryption の一括書き込み操作では、1 つの名前空間のみを対象とできます。
bulkWriteコマンドでnsInfo内に複数の名前空間が指定されている場合、操作はエラーを返します。Queryable Encryption は
db.collection.findAndModify()引数を制限します。fieldsは許可されていませんnewは false である必要があります
アップサート操作を実行すると、フィルター内の暗号化されたフィールドは挿入から除外されます。
サポートされている読み取りコマンドと書込みコマンド
Queryable Encryption 互換ドライバーは、次のコマンドによる自動暗号化をサポートします。
サポートされている コマンドのいずれでも、コマンドでサポートされていない演算子、集計ステージ、または集計式が使用されている場合、ドライバーはエラーを返します。 サポートされている演算子、ステージ、および式の完全なリストについては、次のセクションを参照してください。
次のコマンドには自動暗号化は必要ありません。 自動暗号化用に構成されたドライバーは、これらのコマンドをmongodに直接渡します。
自動暗号化用に構成された互換性のあるドライバーを介して他のコマンドを発行すると、エラーが返されます。
| [1] | 自動暗号化では getMore コマンド は暗号化されませんが、 コマンドへの応答には暗号化されたフィールド値が含まれる場合があります。
|
サポートされているクエリタイプと演算子
自動暗号化用に構成されたドライバーは、 暗号化されたクエリ可能なフィールドに対して発行された場合、限定的なセットのクエリ演算子をサポートします。
サポートされているクエリタイプを使用して、暗号化されていないフィールドまたは暗号化されたフィールドをクエリすると、暗号化されたデータが返され、クライアントで復号化されます。
Queryable Encryption は現在、次のクエリ タイプをサポートしています。
noneequalityrangeprefixsuffixsubstring
クエリタイプが指定されていない場合、デフォルトは none になります。クエリタイプが none の場合、 MongoDB はフィールドを暗号化し、クライアントはそのフィールドをクエリできません。
重要
比較サポート
暗号化されたフィールドとプレーンテキスト値の比較がサポートされています。
{$expr: {$eq: ["$encrypted1", "plaintext_value"]}}ある暗号化されたフィールドと別の暗号化されたフィールドの比較は失敗します。
{$expr: {$eq: ["$encrypted1", "$encrypted2"]}}queryType: "equality"に構成されたフィールドは次の式をサポートします。
範囲クエリは等価クエリを $lte と $gte に暗黙的に変換します。したがって、queryType: "range" に構成されたフィールドは、上記のすべての式と次の式をサポートします。
暗号化されたフィールドに対して他のクエリ演算子を指定するクエリでは、エラーが返されます。
サポートされていないクエリ
暗号化されたフィールドをnullまたは正規式と比較するクエリでは、サポートされているクエリ演算子を使用している場合でも、常にエラーがスローされます。
Queryable Encryption用に構成された MongoClient を使用する場合、暗号化されていないフィールドに対して発行された場合でも、次のクエリ演算子はエラーをスローします。
サポートされている更新演算子
自動暗号化用に構成されたドライバーは、暗号化されたフィールドに対して発行された場合、次の更新演算子をサポートします。
暗号化されたフィールドに対して他の更新演算子を指定した更新は、エラーを返します。
次の動作を持つ更新操作では、サポートされている演算子を使用している場合でも、エラーがスローされます。
更新操作により、暗号化された パス内に配列が生成されます。
更新操作では、 集計式の構文を使用します。
暗号化されたフィールドにクエリフィルターを指定するアップデート操作の場合、クエリフィルターはそれらのフィールドでサポートされている演算子のみを使用する必要があります。
置換スタイルの更新
置換スタイルの更新はサポートされていますが、置換ドキュメントの最上位の暗号化フィールド内にTimestamp(0,0)が含まれている場合は、Queryable Encryption がエラーになります。 (0,0)の値は、 mongodがタイムスタンプを生成する必要があることを示します。 mongodは暗号化されたフィールドを生成できません。
サポートされていない挿入操作
自動暗号化用に構成された互換性ドライバーは、次の動作を持つ挿入コマンドをサポートしていません。
サポートされていない集計ステージ
自動暗号化では、追加のコレクションからの読み取りやコレクションへの書込みを行う集計ステージはサポートされません。 これらのステージは次のとおりです。
サポートされている集計ステージ
自動暗号化用に構成された互換性のあるドライバーは、次の集計パイプライン ステージをサポートします。
$graphLookup(使用要件については、$lookupと$graphLookupの動作 を参照してください)$group暗号化されていないフィールドの場合$lookup(使用要件については、$lookupと$graphLookupの動作 を参照してください)
他のステージを指定する自動暗号化用に構成されたコレクションで動作する集計パイプラインでは、 エラーが返されます。
注意
$rerank ステージは、Queryable Encryption を使用した自動暗号化用に構成されたクライアントではサポートされていません。$rerank を含むパイプラインは、Unrecognized pipeline stage name: '$rerank' のようなエラーで失敗します。
この制限は、暗号化されたフィールドを持たないコレクションを含むすべてのコレクション、および$unionWithなどのサブパイプライン内での$rerankの使用に適用されます。
サポートされている各パイプライン ステージごとに、MongoDB はサポートされているパイプラインを通過するときに暗号化する必要があるフィールドを追跡し、それらを暗号化対象としてマークします。
サポートされている各ステージでは、サポートされているクエリ演算子と集計式 のみを指定する必要があります。
$lookup と の動作$graphLookup
MongoDB 8.1 以降では、$lookup ステージで複数の暗号化されたコレクションを参照できます。ただし、$lookup は次の機能をサポートしていません。
localFieldまたはforeignFieldの結合フィールドとして暗号化されたフィールドを使用する。
$graphLookup自動暗号化は、from コレクションが集計が実行されるコレクションと一致する場合にのみ をサポートします。別の fromコレクションを参照$graphLookup ステージはエラーを返します。
自動暗号化では、次のような特定のコレクションに関連しないメタデータが読み取られる「接続レス」集計メタデータソースはサポートされていません。
データベースまたはクラスター全体を監視するためのMongoDB Change Streams
自動暗号化では、結果に機密情報が含まれる可能性があるため、 $planCacheStatsステージはサポートされていません。
サポートされている集計式
自動暗号化用に構成された互換性のあるドライバーは、等価クエリ用に構成された暗号化されたフィールドに対して次の式をサポートします。
自動暗号化用に構成された互換性ドライバーは、prefix、suffix、または substring クエリ用に構成された暗号化されたフィールドに対して次の式をサポートします。
暗号化されたフィールドに対して発行されると、他のすべての集計式はエラーを返します。
次の動作を持つ集計ステージでは、サポートされている集計式を使用している場合でも、エラーが返されます。
式 | 拒否された動作 | 例 |
|---|---|---|
式は、実行時まで暗号化プロパティが不明なフィールドを指定し、後続の集計ステージにはそのフィールドを参照する式が含まれます。 | | |
式は暗号化されたフィールドを参照し、同じ式内のその新しいフィールドに対して操作する新しいフィールドを作成します。 | | |
式は、比較式内の暗号化されたフィールドのプレフィックスを参照します。 | | |
式の結果は暗号化されたフィールドと比較されます。 | | |
式は変数を暗号化されたフィールドにバインドするか、 | | |
式の最初の引数は暗号化されたフィールドであり、
| |