AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

暗号化スキーマの作成

暗号化されたフィールドをクエリ可能にするには、暗号化スキーマを作成します。 このスキーマは、どのフィールドがクエリ可能で、どのクエリタイプが許可されているかを定義します。 詳細については、「暗号化されたフィールド 」と「 有効なクエリ 」を参照してください。

重要

Queryable Encryption では、equality、範囲、prefix、suffix、substring を使ったクエリを実行できます。等価クエリタイプまたは範囲クエリタイプのいずれか一方のみにフィールドを設定できます。同じフィールドで prefix と suffix の両方を有効にできます。ただし、substring を別のクエリタイプと組み合わせることはできません。

暗号化されたフィールドをクエリ可能にする場合は、パフォーマンスとセキュリティを考慮してください。 各構成オプションがこれらにどのように影響するかについて詳しくは、「最適な検索およびストレージを使用するために暗号化されたフィールドを構成する 」を参照してください。

プレフィックス、サフィックス、およびサブストリングのクエリを構成する前に必要なストレージを見積もるには、「Estimate Queryable Encryption Storage 影響」を参照してください。

encryptedFieldsObject の fields 配列内の各フィールドの暗号化を構成できます。次の表では、使用可能なサブフィールドについて説明しています。

フィールド
タイプ
説明

path

文字列

必須。暗号化するフィールドへのドット表記パス("patientInfo.ssn" など)。_idフィールド を除く任意のフィールドを指定できます。

bsonType

文字列

必須。暗号化するフィールドの BSON 型。サポートされているタイプの完全なリストについては、 BSON types を参照してください。

keyId

UUID

任意。このフィールド の暗号化に使用する DEK の UUID 。 UUID は、サブタイプ のBSONバイナリ 4データ要素です。

キー ID は一意である必要があります。すでに使用されている keyId を指定すると、エラーが返されます。

省略した場合、createEncryptedCollection()ヘルパーメソッドを使用してキーを自動的に作成できます。

queries

オブジェクト

任意.この暗号化されたフィールドに対するクエリを有効にします。省略した場合、フィールドは暗号化された状態になりますが、クエリは実行できません。

クエリ オプションの詳細については、最適な検索およびストレージ用に暗号化されたフィールドの構成 を参照してください。

1

ネストされたfields配列を持つencryptedFieldsObjectを含めます。

const encryptedFieldsObject = { fields: []}
2
  1. path文字列とbsonType文字列を フィールド配列内のドキュメントに追加します。

    const encryptedFieldsObject = { fields: [ { path: "myDocumentField", bsonType: "int" } ]}

    重要

    暗号化には、 _idフィールドを除く任意のフィールドを指定できます。

  2. オプションで、DEK IDを含む keyIdフィールドを設定します。

    重要

    キー ID は一意である必要があります。そうでない場合、サーバーはエラーを返します。

    クライアントで AutoEncryptionSettings を構成することで、createEncryptedCollectionヘルパーメソッドを使用してキーを自動的に作成できます。

    { path: "myDocumentField", bsonType: "int", keyId: "<unique data encryption key>"}
3

これにより、 $eq 、 $ne 、 $in 、 $nin演算子を使用したクエリが可能になります。

queriesオブジェクトを追加し、 queryTypeを"equality"に設定します。

{ path: "myDocumentField", bsonType: "int", queries: { queryType: "equality" }}
4

これにより、 $lt 、 $lte 、 $gt 、 $gte演算子を使用したクエリが可能になります。

次のオプションがセキュリティとパフォーマンスにどのように影響するかについて詳しくは、「最適な検索およびストレージを使用するために暗号化されたフィールドを構成する 」を参照してください。

  1. queriesオブジェクトを追加し、 queryTypeを"range"に設定します。

    { path: "myDocumentRangeField", bsonType: "int", queries: { queryType: "range" }}
  2. 次のフィールドを設定します。

    フィールド
    タイプ
    説明

    フィールドと同じ bsonType

    bsonTypeがdecimalまたはdoubleの場合は必須です。 任意ですが、 int 、 long 、またはdateの場合は強く推奨します。 デフォルトはbsonTypeの最小値と最大値です。

    可能であれば、クエリに限界を指定するとパフォーマンスが向上します。 これらを含む値をクエリすると、 MongoDBはエラーを返します。

    { path: "myDocumentRangeField", bsonType: "int", queries: { queryType: "range", min: 0, max: 1200 }}
5

これらのクエリタイプは、string フィールドのみで使用されます。同じフィールドで prefix と suffix の両方を有効にできますが、substring を使用する場合はどちらも有効にできません。

  1. queriesオブジェクトを追加し、queryType を "prefix"、"suffix"、または "substring" に設定します。

    { path: "myDocumentStringField", bsonType: "string", queries: { queryType: "substring" }}
  2. 次のフィールドを設定します。

    セキュリティとパフォーマンスへの影響の詳細については、最適な検索およびストレージ用に暗号化されたフィールドを構成する を参照してください。

    フィールド
    タイプ
    説明

    integer

    substring クエリのみ。部分文字列インデックスのフィールドに許可される最大長。

    integer

    クエリに許可されるプレフィックス/サフィックス/サブストリングの最小長。

    integer

    クエリに許可されるプレフィックス、サフィックス、サブストリングの最大長。

    重要: この設定はクエリのパフォーマンスに大きく影響します。可能な場合は常に制限します。

    ブール値

    任意。クエリで大文字と小文字が区別されるかどうか。デフォルトは true です。

    ブール値

    任意。クエリが発音区別符号を区別するかどうか。デフォルトは true です。

    { path: "myDocumentStringField", bsonType: "string", queries: { "queryType": "substring", "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" }, ]}