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

Queryable Encryption がサポートする操作

項目一覧

  • を使用する操作 BinData
  • サポートされている BSON types とサポートされていないBSON
  • CRUD
  • サポートされている読み取りコマンドと書込みコマンド
  • サポートされているクエリ演算子
  • サポートされていないクエリ
  • サポートされている更新演算子
  • 置換スタイルの更新
  • サポートされていない挿入操作
  • サポートされていない集計ステージ
  • サポートされている集計ステージ
  • $lookup$graphLookupの動作
  • サポートされている集計式
  • サポートされていないフィールド型

このページでは、 Queryable Encryption互換ドライバーでサポートされている特定のデータ型、コマンド、クエリ演算子、更新演算子、集計ステージ、集計式について説明します。 ここでは、自動暗号化を使用する操作と、明示的な暗号化を使用する操作の動作について説明します。

注意

エンタープライズ機能

MongoDB Enterprise および MongoDB Atlas で自動暗号化が利用可能

MongoDBはQueryable Encryptionで暗号化されたフィールドを BinData Blog として保存します。 暗号化されたBinData値に対して発行された読み取りおよび書込み操作は、復号化された値に対して同じ操作を発行した場合と比較して、予期しない動作や誤った動作を引き起こす可能性があります。 特定の操作は厳格なBSONタイプのサポートがあり、 BinData値に対して発行するとエラーが返されます。

Queryable Encryptionと互換性のある公式の ドライバー は、 BinData値をサポートしていない演算子または式の読み取り操作と書込み操作を解析します。

Queryable Encryptionは、次の例外を除くすべてのBSON typesに対する等価クエリをサポートしています。

  • double

  • decimal128

  • object

  • array

Queryable EncryptionBSON typesは、次の に対する範囲クエリをサポートしています。

  • int: 32ビット整数

  • long: 64ビット整数

  • double: double (IEEE 754Binary64)

  • decimal: 10進数(IEEE 754 10進128 )

  • date: UTC 日時(Int 64 )

  • Queryable Encryptionは、 マルチドキュメントのアップデートまたは削除操作をサポートしていません。 複数のアップデートまたは削除操作を持つdb.collection.updateMany()db.collection.bulkWrite()はサポートされていません。

  • Queryable Encryption はdb.collection.findAndModify()引数を制限します。

    • fields は許可されていません

    • new は false である必要があります

  • アップサート操作を実行すると、フィルター内の暗号化されたフィールドは挿入から除外されます。

Queryable Encryption 互換ドライバーは、次のコマンドによる自動暗号化をサポートします。

サポートされている コマンドのいずれでも、コマンドでサポートされていない演算子、集計ステージ、または集計式が使用されている場合、ドライバーはエラーを返します。 サポートされている演算子、ステージ、および式の完全なリストについては、次のセクションを参照してください。

  • サポートされているクエリ演算子

  • サポートされている更新演算子

  • サポートされている集計ステージ

  • サポートされている集計式

次のコマンドには自動暗号化は必要ありません。 自動暗号化用に構成されたドライバーは、これらのコマンドをmongodに直接渡します。

自動暗号化用に構成された互換性のあるドライバーを介して他のコマンドを発行すると、エラーが返されます。

[1] 自動暗号化では getMore コマンド は暗号化されませんが、 コマンドへの応答には暗号化されたフィールド値が含まれる場合があります。
  • 適切な Queryable Encryption オプションで構成されたアプリケーションは、それらの値を自動的に復号化します。
  • 適切な暗号化オプションがないアプリケーションでは、暗号化された 値が表示されます。

自動暗号化用に構成されたドライバーは、 暗号化されたクエリ可能なフィールドに対して発行された場合、限定的なセットのクエリ演算子をサポートします。

サポートされているクエリタイプを使用して、暗号化されていないフィールドまたは暗号化されたフィールドをクエリすると、暗号化されたデータが返され、クライアントで復号化されます。

Queryable Encryptionは現在、 noneequalityrangeクエリタイプをサポートしています。 クエリタイプが指定されていない場合、デフォルトはnoneになります。 クエリタイプがnoneの場合、フィールドは暗号化され、クライアントはそのフィールドをクエリできません。

重要

比較サポート

暗号化されたフィールドとプレーンテキスト値の比較がサポートされています。

{$expr: {$eq: ["$encrypted1", "plaintext_value"]}}

ある暗号化されたフィールドと別の暗号化されたフィールドの比較は失敗します。

{$expr: {$eq: ["$encrypted1", "$encrypted2"]}}

queryType: "equality"に構成されたフィールドは次の式をサポートします。

queryType: "range"に構成されたフィールドは次の式をサポートします。

暗号化されたフィールドに対して他のクエリ演算子を指定するクエリでは、エラーが返されます。

暗号化されたフィールドをnullまたは正規式と比較するクエリでは、サポートされているクエリ演算子を使用している場合でも、常にエラーがスローされます。

Queryable Encryption用に構成された MongoClient を使用する場合、暗号化されていないフィールドに対して発行された場合でも、次のクエリ演算子はエラーをスローします。

自動暗号化用に構成されたドライバーは、暗号化されたフィールドに対して発行された場合、次の更新演算子をサポートします。

暗号化されたフィールドに対して他の更新演算子を指定した更新は、エラーを返します。

次の動作を持つ更新操作では、サポートされている演算子を使用している場合でも、エラーがスローされます。

  • 更新操作により、暗号化された パス内に配列が生成されます。

  • 更新操作では、 集計式の構文を使用します。

暗号化されたフィールドにクエリフィルターを指定するアップデート操作の場合、クエリフィルターはそれらのフィールドでサポートされている演算子のみを使用する必要があります。

置換スタイルの更新はサポートされていますが、置換ドキュメントの最上位の暗号化フィールド内にTimestamp(0,0)が含まれている場合は、Queryable Encryption がエラーになります。 (0,0)の値は、 mongodがタイムスタンプを生成する必要があることを示します。 mongodは暗号化されたフィールドを生成できません。

自動暗号化用に構成された互換性ドライバーは、次の動作を持つ挿入コマンドをサポートしていません。

  • 暗号化されたフィールドに関連付けられたTimestamp(0,0)を持つドキュメントを挿入します。 (0,0)の値は、 mongodがタイムスタンプを生成する必要があることを示します。 mongodは暗号化されたフィールドを生成できないため、結果のタイムスタンプは暗号化されません。

  • 構成された自動スキーマで暗号化された_idフィールドが指定されている場合は、暗号化された_idなしでドキュメントを挿入します。 mongodは暗号化されていない ObjectId を自動生成するため、ドキュメントから_idを省略すると、自動暗号化ルールに準拠しないドキュメントが生成されます。

自動暗号化では、追加のコレクションからの読み取りやコレクションへの書込みを行う集計ステージはサポートされません。 これらのステージは次のとおりです。

自動暗号化用に構成された互換性のあるドライバーは、次の集計パイプライン ステージをサポートします。

他のステージを指定する自動暗号化用に構成されたコレクションで動作する集計パイプラインでは、 エラーが返されます。

サポートされている各パイプライン ステージごとに、MongoDB はサポートされているパイプラインを通過するときに暗号化する必要があるフィールドを追跡し、それらを暗号化対象としてマークします。

サポートされている各ステージでは、サポートされているクエリ演算子集計式 のみを指定する必要があります。

$lookup$graphLookup自動暗号化は、from コレクションが集計が実行されるコレクションと一致する 場合にのみ 、 と をサポートします。$lookup別の$graphLookup fromコレクションを参照する ステージと ステージではエラーが返されます。

自動暗号化では、次のような特定のコレクションに関連しないメタデータが読み取られる「接続レス」集計メタデータソースはサポートされていません。

自動暗号化では、結果に機密情報が含まれる可能性があるため、 $planCacheStatsステージはサポートされていません。

暗号化されていないコレクションでは、Queryable Encryption が有効になっているMongoClientから$lookupを実行することはできません。

自動暗号化用に構成された互換性のあるドライバーは、任意の等価クエリ タイプの暗号化フィールドに対して次の式をサポートします。

暗号化されたフィールドに対して発行されると、他のすべての集計式はエラーを返します。

次の動作を持つ集計ステージでは、サポートされている集計式を使用している場合でも、エラーが返されます。

拒否された動作
式は、実行時まで暗号化プロパティが不明なフィールドを指定、後続の集計ステージにはそのフィールドを参照する式が含まれます。
$addFields : {
"valueWithUnknownEncryption" : {
$cond : {
if : { "$encryptedField" : "value" },
then : "$encryptedField",
else: "unencryptedValue"
}
}
},
{
$match : {
"valueWithUnknownEncryption" : "someNewValue"
}
}
式は暗号化されたフィールド参照し、同じ式内のその新しいフィールドに対して操作する新しいフィールドを作成します。
{
$eq : [
{"newField" : "$encryptedField"},
{"newField" : "value"
]
}
式は、比較式内の暗号化されたフィールドのプレフィックスを参照します。
{ $eq : [ "$prefixOfEncryptedField" , "value"] }
式の結果は暗号化されたフィールドと比較されます。
{
$eq : [
"$encryptedField" ,
{ $ne : [ "field", "value" ] }
]
}
式は変数を暗号化されたフィールドにバインドするか、 $$CURRENTの再バインドを試みます。
{
$let: {
"vars" : {
"newVariable" : "$encryptedField"
}
}
}

式の最初の引数暗号化されたフィールドであり、

  • 式の 2 番目の引数は配列リテラルではありません

    -あるいは-

  • 式の 2 番目の引数は暗号化されたフィールドです。

{
$in : [
"$encryptedField" ,
"$otherEncryptedField"
]
}

自動暗号化用に構成されたドライバーは、次の値の型の暗号化を必要とする読み取りまたは書き込み操作をサポートしていません

Queryable Encryption では、これらの値の型情報は十分に非表示にされません。

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

Queryable Encryption では、暗号化されたフィールドが次の値の型と比較される操作がある暗号化されたフィールドに対する読み取りまたは書込み操作はサポートされていません。

  • array

  • decimal128

  • double

  • object

戻る

参照