Queryable Encryption がサポートする操作
項目一覧
このページでは、 Queryable Encryption 互換ドライバーでサポートされている特定のコマンド、クエリ演算子、更新演算子、集計ステージ、および集計式について説明します。
注意
エンタープライズ機能
MongoDB Enterprise および MongoDB Atlas で自動暗号化が利用可能
を使用する操作 BinData
MongoDB は Queryable Encryption で暗号化されたフィールドをBinData
shell として保存します。 暗号化されたBinData
値に対して発行された読み取りおよび書込み操作は、復号化された値に対して同じ操作を発行した場合と比較して、予期しない動作や誤った動作を引き起こす可能性があります。 特定の操作は厳格な BSON タイプのサポートがあり、 BinData
値に対して発行するとエラーが返されます。 Queryable Encryption と互換性のある公式の ドライバーは、 BinData
値をサポートしていない演算子または式、またはBinData
値に対して発行された場合に正常な動作を持たない演算子または式の読み取りおよび書込み操作を解析します。
明示的な暗号化を使用するアプリケーションは、暗号化されたフィールドに対して読み取りおよび書込み操作を発行するためのガイダンスとしてこのページを使用する場合があります。
サポートされている読み取りコマンドと書込みコマンド
Queryable Encryption 互換ドライバーは、次のコマンドによる自動暗号化をサポートします。
サポートされている コマンドのいずれでも、コマンドでサポートされていない演算子、集計ステージ、または集計式が使用されている場合、ドライバーはエラーを返します。 サポートされている演算子、ステージ、および式の完全なリストについては、次のセクションを参照してください。
次のコマンドには自動暗号化は必要ありません。 自動暗号化用に構成された公式ドライバーは、これらのコマンドをmongod
に直接渡します。
自動暗号化用に構成された互換性のあるドライバーを介して他のコマンドを発行すると、エラーが返されます。
[1] | 自動暗号化では getMore コマンド は暗号化されませんが、 コマンドへの応答には暗号化されたフィールド値が含まれる場合があります。
|
Queryable Encryption を使用するシャーディングされたクラスターのトランザクションの場合、 readConcernをsnapshot
に設定する必要があります。
サポートされているクエリ演算子
自動暗号化用に構成されたドライバーは、暗号化されたクエリ可能なフィールドに対して発行された場合、次のクエリ演算子をサポートします。
重要
比較サポート
ある暗号化されたフィールドと別の暗号化されたフィールドの比較は失敗します。
{$expr: {$eq: ["$encrypted1", "$encrypted2"]}}
暗号化されたフィールドとプレーンテキスト値の比較がサポートされています。
{$expr: {$eq: ["$encrypted1", "plaintext_value"]}}
暗号化されたフィールドをnull
または正規表現と比較するクエリでは、サポートされているクエリ演算子を使用している場合でも、常にエラーがスローされます。
$exists
演算子は、暗号化されたフィールドに対して発行された場合、通常の動作をします。
暗号化されたフィールドに対して他のクエリ演算子を指定するクエリでは、エラーが返されます。 次のクエリ演算子は、Queryable Encryption 用に構成された MongoClient を使用する場合、暗号化されたフィールドに対して発行されていない場合でもエラーをスローします。
サポートされている更新演算子
自動暗号化用に構成されたドライバーは、暗号化されたフィールドに対して発行された場合、次の更新演算子をサポートします。
暗号化されたフィールドに対して他の更新演算子を指定した更新は、エラーを返します。
次の動作を持つ更新操作では、サポートされている演算子を使用している場合でも、エラーがスローされます。
更新操作により、暗号化された パス内に配列が生成されます。
更新操作では、 集計式の構文を使用します。
暗号化されたフィールドにクエリフィルターを指定するアップデート操作の場合、クエリフィルターはそれらのフィールドでサポートされている演算子のみを使用する必要があります。
置換スタイルの更新
置換スタイルの更新はサポートされていますが、置換ドキュメントの最上位の暗号化フィールド内にTimestamp(0,0)
が含まれている場合は、Queryable Encryption がエラーになります。 (0,0)
の値は、 mongod
がタイムスタンプを生成する必要があることを示します。 mongod
は暗号化されたフィールドを生成できません。
サポートされていない挿入操作
自動暗号化用に構成された互換性ドライバーは、次の動作を持つ挿入コマンドをサポートしていません。
サポートされていない集計ステージ
自動暗号化では、追加のコレクションからの読み取りやコレクションへの書込みを行う集計ステージはサポートされません。 これらのステージは次のとおりです。
サポートされている集計ステージ
自動暗号化用に構成された互換性のあるドライバーは、次の集計パイプライン ステージをサポートします。
$group
暗号化されていないフィールドの場合$lookup
と$graphLookup
(使用要件については、$lookup
と$graphLookup
の動作 を参照してください)
他のステージを指定する自動暗号化用に構成されたコレクションで動作する集計パイプラインでは、 エラーが返されます。
サポートされている各パイプライン ステージごとに、MongoDB はサポートされているパイプラインを通過するときに暗号化する必要があるフィールドを追跡し、それらを暗号化対象としてマークします。
サポートされている各ステージでは、サポートされているクエリ演算子と集計式 のみを指定する必要があります。
$lookup
と の動作$graphLookup
$lookup
$graphLookup
自動暗号化は、from
コレクションが集計が実行されるコレクションと一致する 場合にのみ 、 と をサポートします。$lookup
別の$graphLookup
from
コレクションを参照する ステージと ステージではエラーが返されます。
自動暗号化では、次のような特定のコレクションに関連しないメタデータが読み取られる「接続レス」集計メタデータソースはサポートされていません。
データベースまたはクラスター全体を監視するためのChange Streams
自動暗号化では、結果に機密情報が含まれる可能性があるため、 $planCacheStats
ステージはサポートされていません。
暗号化されていないコレクションでは、Queryable Encryption が有効になっているMongoClient
から$lookup
を実行することはできません。
サポートされている集計式
自動暗号化用に構成された互換性のあるドライバーは、任意の等価クエリ タイプの暗号化フィールドに対して次の式をサポートします。
暗号化されたフィールドに対して発行されると、他のすべての集計式はエラーを返します。
次の動作を持つ集計ステージでは、サポートされている集計式を使用していてもエラーが返されます。
式 | 拒否された動作 | 例 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
式は、実行時まで暗号化プロパティが不明なフィールドを指定し、後続の集計ステージにはそのフィールドを参照する式が含まれます。 |
| |||||||||||||||
式は暗号化されたフィールドを参照し、同じ式内のその新しいフィールドに対して操作する新しいフィールドを作成します。 |
| |||||||||||||||
式は、比較式内の暗号化されたフィールドのプレフィックスを参照します。 |
| |||||||||||||||
式の結果は暗号化されたフィールドと比較されます。 |
| |||||||||||||||
式は変数を暗号化されたフィールドにバインドするか、 |
| |||||||||||||||
式の最初の引数は暗号化されたフィールドであり、
|
|
サポートされていないフィールド型
自動暗号化用に構成されたドライバーは、次の値の型の暗号化を必要とする読み取りまたは書き込み操作をサポートしていません。
Queryable Encryption では、これらの値の型情報は十分に非表示にされません。
Queryable Encryption では、暗号化されたフィールドが次の値の型と比較される操作がある暗号化されたフィールドに対する読み取りまたは書込み操作はサポートされていません。
array
decimal128
double
object