自動フィールドレベル暗号化による読み取り/書込みをサポート
項目一覧
注意
エンタープライズ機能
フィールドレベル暗号化の自動機能は、MongoDB Enterprise 4.2 以降と MongoDB Atlas 4.2 以降のクラスターでのみ使用できます。
バージョン 4.2の新機能
このページでは、自動クライアント側フィールドレベル暗号化用に構成された 4.2 以降の互換性ドライバーでサポートされている特定のコマンド、クエリ演算子、更新演算子、集計ステージ、および集計式について説明します。
MongoDB は、クライアント側のフィールドレベル暗号化フィールドを BinData
Blog として保存します。 暗号化されたBinData
値に対して発行された読み取りおよび書込み操作は、復号化された値に対して同じ操作を発行した場合と比較して、予期しない動作や誤った動作を引き起こす可能性があります。 特定の操作は厳格な BSON タイプのサポートがあり、 BinData
値に対して発行するとエラーが返されます。
公式の 4.2+ 互換ドライバーは、
BinData
BinData
値をサポートしていない演算子または式の読み取り/書き込み操作を解析し、明示的(手動)のクライアント側フィールドレベル暗号化を使用するアプリケーションは、暗号化されたフィールドに対して読み取り/書込み(write)操作を発行するためのガイダンスとしてこのページを使用できます。
サポートされている読み取りコマンドと書込みコマンド
公式 MongoDB 4.2+ 互換ドライバーは、次のコマンドを使用したクライアント側フィールド レベルの自動暗号化をサポートします。
サポートされている コマンドでは、コマンドがサポートされていない演算子、集計ステージ、または集計式を使用している場合、4.2 以降の互換性のあるドライバーはエラーを返します。
次のコマンドには自動暗号化は必要ありません。 自動クライアント側フィールドレベル暗号化用に構成された公式の MongoDB 4.2 以降と互換性のあるドライバーは、これらのコマンドをmongod
に直接渡します。
自動クライアント側フィールドレベル暗号化用に構成された 4.2 以降の互換性ドライバーを介して他のコマンドを発行すると、エラーが返されます。
[1] | クライアント側の自動フィールドレベル暗号化ではgetMore コマンドは暗号化されませんが、コマンドへの応答には暗号化されたフィールド値が含まれる場合があります。 適切なクライアント側フィールドレベル暗号化オプションで構成されたアプリケーションは、それらの値を自動的に復号化します。 適切な暗号化オプションを持たないアプリケーションには、暗号化された 値のみが表示されます。 |
サポートされているクエリ演算子
自動クライアント側フィールドレベル暗号化用に構成された公式の 4.2+ 互換ドライバーでは、確定的に暗号化されたフィールドに対して発行された場合、次のクエリ演算子を使用できます。
暗号化されたフィールドをnull
または正規表現と比較するクエリでは、サポートされているクエリ演算子を使用している場合でも、常にエラーがスローされます。 無作為に暗号化されたフィールドに対してこれらの演算子を発行するクエリは、エラーをスローします。
$exists
演算子は、確定的に暗号化されたフィールドとランダムに暗号化されたフィールドの両方に対して発行された場合、通常の動作をします。
暗号化されたフィールドに対して他のクエリ演算子を指定するクエリでは、エラーが返されます。
次のクエリ演算子は、暗号化されたフィールドに対して発行されない場合でも、エラーをスローします。
サポートされている更新演算子
自動クライアント側フィールドレベル暗号化用に構成された公式の 4.2+ 互換ドライバーでは、確定的に暗号化されたフィールドに対して発行された場合、次の更新演算子が可能になります。
暗号化されたフィールドで$rename
演算子を使用する更新操作では、自動JSON schemaがソース フィールド名とターゲット フィールド名に対して同じ暗号化メタデータを指定していることを確認します。
暗号化されたフィールドに対して他の更新演算子を指定した更新は、エラーを返します。
次の動作を持つ更新操作では、サポートされている演算子を使用している場合でも、エラーがスローされます。
更新操作により、暗号化された パス内に配列が生成されます。
更新操作では、 集計式の構文を使用します。
確定 的に暗号化されたフィールドに クエリフィルター を指定するアップデート操作の場合、クエリフィルターはそれらのフィールドで サポートされている演算子 のみを使用する必要があります。
サポートされていない挿入操作
自動クライアント側フィールドレベル暗号化用に構成された公式の MongoDB 4.2 以降と互換性のあるドライバーは、次の動作を持つ挿入コマンドをサポートしていません。
暗号化されたフィールドに関連付けられた
Timestamp(0,0)
を持つドキュメントを挿入します。(0,0)
の値は、mongod
がタイムスタンプを生成する必要があることを示します。mongod
は暗号化されたフィールドを生成できないため、結果のタイムスタンプは暗号化されません。構成された自動スキーマで暗号化された
_id
フィールドが指定されている場合は、暗号化された_id
なしでドキュメントを挿入します。mongod
は暗号化されていないObjectIdを自動生成するため、ドキュメントから_id
を省略すると、自動暗号化ルールに準拠しないドキュメントが生成されます。決定的に暗号化されたフィールドに関連付けられた配列を持つドキュメントを挿入します。 クライアント側のフィールドレベルの自動暗号化では、配列の決定的な暗号化はサポートされていません。
サポートされている集計ステージ
自動クライアント側フィールドレベル暗号化用に構成された公式の MongoDB 4.2+ 互換ドライバーは、次の集計パイプライン ステージをサポートします。
$lookup
と$graphLookup
(使用要件 については、「$lookup
と$graphLookup
の動作」を参照してください)
他のステージを指定する自動暗号化用に構成されたコレクションで動作する集計パイプラインでは、 エラーが返されます。
サポートされている各パイプライン ステージごとに、MongoDB はサポートされているパイプラインを通過するときに暗号化する必要があるフィールドを追跡し、それらを暗号化対象としてマークします。
サポートされている各ステージでは、サポートされているクエリ演算子と集計式 のみを指定する必要があります。
$group
動作
$group
は、クライアント側のフィールドレベル暗号化に固有の次の動作をします。
$lookup
と の動作$graphLookup
クライアント側の自動フィールドレベル暗号化は、 コレクションが集計が実行されるコレクションと一致する 場合にのみ $lookup
$graphLookup
、 と をサポートします(つまり、from
自己検索操作)。
別のfrom
コレクションを参照する$lookup
} ステージと$graphLookup
ステージでは、エラーが返されます。
サポートされている集計式
自動クライアント側フィールドレベル暗号化用に構成された公式の 4.2+ 互換ドライバーでは、確定的に暗号化されたフィールドに対して次の式を使用する集計ステージが可能になります。
暗号化されたフィールドに対して発行されると、他のすべての集計式はエラーを返します。
次の動作を持つ集計ステージでは、サポートされている集計式を使用していてもエラーがスローされます。
式 | 拒否された動作 | 例 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
式は、実行時まで暗号化プロパティが不明なフィールドを指定し、後続の集計ステージにはそのフィールドを参照する式が含まれます。 |
| |||||||||||||||
式は暗号化されたフィールドを参照し、同じ式内のその新しいフィールドに対して操作する新しいフィールドを作成します。 |
| |||||||||||||||
式は、比較式内の暗号化されたフィールドのプレフィックスを参照します。 |
| |||||||||||||||
式の結果は暗号化されたフィールドと比較されます。 |
| |||||||||||||||
式は変数を暗号化されたフィールドにバインドするか、 |
| |||||||||||||||
式の最初の引数は暗号化されたフィールドであり、
|
|
サポートされていないフィールド型
自動クライアント側フィールドレベル暗号化用に構成された公式の MongoDB 4.2 以降と互換性のあるドライバーは、次の値の型の暗号化を必要とする読み取りまたは書込み操作をサポートしていません。
暗号化では、これらの値の型情報が十分に非表示にされません。
また、自動フィールドレベル暗号化では、暗号化されたフィールドが次の値の型と比較される 決定的な フィールドに対する読み取りまたは書込み操作 も サポートされていません。
double
decimal128
bool
object