このタスクについて
暗号化されたフィールドをクエリ可能にするには、 暗号化スキーマを作成します。 このスキーマは、どのフィールドがクエリ可能で、どのクエリタイプが許可されているかを定義します。 詳細については、「暗号化されたフィールド 」と「 有効なクエリ 」を参照してください。
重要
Queryable Encryptionは等価クエリと範囲クエリをサポートします。 フィールドは 1 つのクエリ タイプでのみ構成できます。
始める前に
暗号化されたフィールドをクエリ可能にする場合は、パフォーマンスとセキュリティを考慮してください。 各構成オプションがこれらにどのように影響するかについて詳しくは、「最適な検索およびストレージを使用するために暗号化されたフィールドを構成する 」を参照してください。
でパブリック プレビューのプレフィックス、サフィックス、またはサブストリングmongosh クエリを使用するには、自動暗号化共有ライブラリ8 を個別にダウンロードする必要があります。 以上の場合は、2 へのライブラリmongosh パスを指定します。 } --cryptSharedlibPath オプションを使用します。
手順
暗号化するフィールドを指定します。
path文字列とbsonType文字列を フィールド配列内のドキュメントに追加します。const encryptedFieldsObject = { fields: [ { path: "myDocumentField", bsonType: "int" } ] } 重要
暗号化には、
_idフィールドを除く任意のフィールドを指定できます。オプションで、DEK IDを使用して
keyIdフィールドを設定します。重要
キー ID は一意である必要があります。そうでない場合、サーバーはエラーを返します。
クライアントで
AutoEncryptionSettingsを構成することで、createEncryptedCollectionヘルパーメソッドを使用してキーを自動的に作成できます。{ path: "myDocumentField", bsonType: "int", keyId: "<unique data encryption key>" }
目的のフィールドに対して範囲クエリを有効にします。
これにより、 $lt 、 $lte 、 $gt 、 $gte演算子を使用したクエリが可能になります。
次のオプションがセキュリティとパフォーマンスにどのように影響するかについて詳しくは、「最適な検索およびストレージを使用するために暗号化されたフィールドを構成する 」を参照してください。
queriesオブジェクトを追加し、queryTypeを"range"に設定します。{ path: "myDocumentRangeField", bsonType: "int", queries: { queryType: "range" } } 次のフィールドを設定します。
フィールドタイプ説明フィールドと同じ
bsonTypebsonTypeがdecimalまたはdoubleの場合は必須です。 任意ですが、int、long、またはdateの場合は強く推奨します。 デフォルトはbsonTypeの最小値と最大値です。可能であれば、クエリに限界を指定するとパフォーマンスが向上します。 これらを含む値をクエリすると、 MongoDBはエラーを返します。
{ path: "myDocumentRangeField", bsonType: "int", queries: { queryType: "range", min: 0, max: 1200 } }
必要なフィールドに対するプレフィックス、サフィックス、またはサブストリング クエリを有効にします。
これらのクエリタイプは、string フィールドのみで使用されます。同じフィールドで prefixPreview と suffixPreview の両方を有効にできますが、substringPreview を使用する場合はどちらも有効にできません。
警告
プレフィックス、サフィックス、サブストリング クエリはパブリック プレビュー段階です。
Queryable Encryption のプレフィックス、サフィックス、サブストリング クエリは、 MongoDB 8.2 でpublic previewで利用できます。これらのクエリ タイプは本番環境では有効にしないでください。パブリック プレビュー機能は GA 機能と互換性がなくなるため、これらのクエリを有効にするコレクションはすべて削除する必要があります。
prefixPreviewクエリでは、$encStrStartsWithと$encStrNormalizedEq集計式が有効になります。suffixPreviewクエリでは、$encStrEndsWithと$encStrNormalizedEq集計式が有効になります。substringPreviewクエリでは、$encStrContainsと$encStrNormalizedEq集計式が有効になります。
queriesオブジェクトを追加し、queryTypeを"prefixPreview"、"suffixPreview"、または"substringPreview"に設定します。{ path: "myDocumentStringField", bsonType: "string", queries: { queryType: "substringPreview" } } 次のフィールドを設定します。
セキュリティとパフォーマンスへの影響の詳細については、最適な検索およびストレージ用に暗号化されたフィールドを構成する を参照してください。
フィールドタイプ説明integer
substringPreviewクエリのみ。部分文字列インデックスのフィールドに許可される最大長。integer
クエリに許可されるプレフィックス/サフィックス/サブストリングの最小長。
integer
クエリに許可されるプレフィックス、サフィックス、サブストリングの最大長。
重要: この設定はクエリのパフォーマンスに大きく影響します。可能な場合は常に制限します。
ブール値
任意。クエリで大文字と小文字が区別されるかどうか。デフォルトは
trueです。ブール値
任意。クエリが発音区別符号を区別するかどうか。デフォルトは
trueです。{ path: "myDocumentStringField", bsonType: "string", queries: { "queryType": "substringPreview", "strMaxLength": 30, "strMinQueryLength": 1, "strMaxQueryLength": 20, "caseSensitive": false } }
例
この例では、医療データの暗号化スキーマを作成する方法を示します。
個人を特定できる情報(PII)、クレジットカード情報、機密性の高い医療情報が含まれている次のドキュメントを検討してみましょう。
{ "firstName": "Jon", "lastName": "Snow", "patientId": 12345187, "address": "123 Cherry Ave", "medications": [ "Adderall", "Lipitor" ], "patientInfo": { "ssn": "921-12-1234", "billing": { "type": "visa", "number": "1234-1234-1234-1234" } } }
PII と機密医療情報を安全に保つために、この暗号化スキーマは関連フィールドを追加します。
const encryptedFieldsObject = { fields: [ { path: "patientId", bsonType: "int" }, { path: "patientInfo.ssn", bsonType: "string" }, { path: "medications", bsonType: "array" }, { path: "patientInfo.billing", bsonType: "object" } ] }
queriesプロパティを追加すると、 フィールドとpatientId patientInfo.ssnフィールドがクエリ可能になります。この例では、等価クエリを有効にします。
const encryptedFieldsObject = { fields: [ { path: "patientId", bsonType: "int", queries: { queryType: "equality" } }, { path: "patientInfo.ssn", bsonType: "string", queries: { queryType: "equality" } }, { path: "medications", bsonType: "array" }, { path: "patientInfo.billing", bsonType: "object" }, ] }