Docs Menu
Docs Home
/
データベース マニュアル
/ / / / /

暗号化スキーマの作成

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

重要

Queryable Encryptionは等価クエリと範囲クエリをサポートします。 フィールドは 1 つのクエリ タイプでのみ構成できます。

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

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

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

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

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

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

警告

プレフィックス、サフィックス、サブストリング クエリはパブリック プレビュー段階です。

Queryable Encryption のプレフィックス、サフィックス、サブストリング クエリは、 MongoDB 8.2 でpublic previewで利用できます。これらのクエリ タイプは本番環境では有効にしないでください。パブリック プレビュー機能は GA 機能と互換性がなくなるため、これらのクエリを有効にするコレクションはすべて削除する必要があります。

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

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

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

    フィールド
    タイプ
    説明

    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"
},
]
}

戻る

フィールドとクエリ