翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ドキュメントのリビジョンを秘匿化する
重要
サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了QLDBまで Amazon を使用できます。詳細については、「Amazon Ledger QLDB を Amazon Aurora Postgre に移行するSQL
Amazon ではQLDB、DELETE
ステートメントは、ドキュメントを削除済みとしてマークする新しいリビジョンを作成することによってのみ、ドキュメントを論理的に削除します。QLDB は、テーブルの履歴で非アクティブなドキュメントリビジョンを完全に削除できるデータ秘匿化オペレーションもサポートしています。
注記
2021 年 7 月 22 日より前に作成された台帳は、現時点では秘匿化の対象にはなりません。Amazon QLDBコンソールで台帳の作成時間を表示できます。
秘匿化オペレーションでは、指定されたリビジョンのユーザーデータのみが削除され、ジャーナルシーケンスとドキュメントメタデータは変更されません。これにより、台帳の全体的なデータの整合性が維持されます。
でデータ秘匿化を開始する前にQLDB、「Amazon QLDB PartiQL リファレンス秘匿化に関する考慮事項と制約事項」の「」を確認してください。
秘匿化ストアドプロシージャ
REDACT_REVISION ストアドプロシージャを使用して、台帳内の使用頻度の低い個別のリビジョンを完全に削除できます。このストアドプロシージャは、インデックス付きストレージとジャーナルストレージの両方で、指定されたリビジョンのユーザーデータをすべて削除します。ただし、ジャーナルシーケンスと、ドキュメント ID やハッシュなどのドキュメントメタデータは変更されません。この操作を元に戻すことはできません。
指定されたドキュメントリビジョンは、履歴上使用頻度の低いリビジョンでなければなりません。ドキュメントの最新の有効なリビジョンは、秘匿化の対象にはなりません。
複数のリビジョンを秘匿化するには、リビジョンごとに 1 回ストアドプロシージャを実行する必要があります。トランザクションごとに 1 つのリビジョンを秘匿化できます。
[Syntax (構文)]
EXEC REDACT_REVISION `
block-address
`, 'table-id
', 'document-id
'
引数
- `
block-address
` -
秘匿化されたドキュメントリビジョンのジャーナルブロックの場所。アドレスは、
strandId
とsequenceNo
という 2 つのフィールドを含む Amazon Ion 構造です。これはバックスティックで示される Ion リテラル値です。例:
`{strandId:"JdxjkR9bSYB5jMHWcI464T", sequenceNo:17}`
- '
table-id
' -
一重引用符で囲まれた、秘匿化するドキュメントのリビジョンがあったテーブルの一意の ID。
- '
document-id
' -
一重引用符で囲まれた、秘匿化対象のリビジョンの一意のドキュメント ID。
秘匿化が完了したかどうかの確認
ストアドプロシージャを実行して秘匿化リクエストを送信すると、 はデータの秘匿化を非同期的にQLDB処理します。完了すると、リビジョン内の (data
構造によって表される) ユーザーデータは完全に削除されます。秘匿化リクエストが完了したかどうかを確認するには、次のいずれかを使用します。
-
履歴関数 – 注: ジャーナルで秘匿化が完了した後、履歴クエリに秘匿化の結果が表示されるまでに時間がかかることがあります。非同期の秘匿化が完了すると、一部のリビジョンが他のリビジョンよりも先に秘匿化されるかもしれませんが、履歴クエリでは最終的に完了した結果が表示されます。
リビジョンの秘匿化が完了すると、リビジョンの data
構造は新しい dataHash
フィールドに置き換えられます。このフィールドの値は、次の例に示されるように、削除された data
構造の Ion ハッシュです。その結果、台帳は全体的なデータ整合性を維持し、既存の検証APIオペレーションを通じて暗号的に検証可能なままになります。検証の詳細については、「Amazon でのデータ検証 QLDB」を参照してください。
秘匿化の例
以前に「リビジョン履歴のクエリの実行」で確認した車両登録書類を考えてみましょう。2 番目のリビジョン (version:1
) を秘匿化するとします。次のクエリ例は、秘匿化前のリビジョンを示しています。クエリ結果では、秘匿化されるdata
構造が で強調表示されます。red italics
.
SELECT * FROM history(VehicleRegistration) AS h WHERE h.metadata.id = '
ADR2Ll1fGsU4Jr4EqTdnQF
' --replace with your id AND h.metadata.version = 1
{
blockAddress:{
strandId:"JdxjkR9bSYB5jMHWcI464T",
sequenceNo:17
},
hash:{{LGSFZ4iEYWZeMwmAqcxxNyT4wbCtuMOmFCj8pEd6Mp0=}},
data: {
VIN: "1HVBBAANXWH544237",
LicensePlateNumber: "LS477D",
State: "WA",
PendingPenaltyTicketAmount: 42.20,
ValidFromDate: 2011-10-26T,
ValidToDate: 2023-09-25T,
Owners: {
PrimaryOwner: { PersonId: "KmA3XPKKFqYCP2zhR3d0Ho" },
SecondaryOwners: []
},
City: "Bellevue"
},
metadata:{
id:"ADR2Ll1fGsU4Jr4EqTdnQF",
version:1,
txTime:2019-06-05T21:01:442d-3Z,
txId:"9cArhIQV5xf5Tf5vtsPwPq"
}
}
この値は REDACT_REVISION
ストアドプロシージャに渡す必要があるため、クエリ結果の blockAddress
に注意してください。次に、次のようにシステムカタログをクエリして、VehicleRegistration
テーブルの一意の ID を見つけます。
SELECT tableId FROM information_schema.user_tables WHERE name = 'VehicleRegistration'
このテーブル ID をドキュメント ID とブロックアドレスとともに使用して REDACT_REVISION
を実行します。テーブル ID とドキュメント ID は一重引用符で囲む必要がある文字列リテラルで、ブロックアドレスはバックティックスで囲まれた Ion リテラルです。必要に応じて、これらの引数を独自の値に置き換えてください。
EXEC REDACT_REVISION `{strandId:"
JdxjkR9bSYB5jMHWcI464T
", sequenceNo:17
}`, '5PLf9SXwndd63lPaSIa0O6
', 'ADR2Ll1fGsU4Jr4EqTdnQF
'
ヒント
QLDB コンソールまたはQLDBシェルを使用してテーブル ID またはドキュメント ID (または任意の文字列リテラル値) をクエリする場合、返される値は二重引用符で囲まれます。ただし、REDACT_REVISION
ストアドプロシージャのテーブル ID 引数とドキュメント ID 引数を指定する場合は、値を一重引用符で囲む必要があります。
これは、ステートメントを PartiQL 形式で記述するが、結果を Amazon Ion 形式でQLDB返すためです。での PartiQL の構文とセマンティクスの詳細についてはQLDB、「」を参照してくださいPartiQL での Ion のクエリ。
有効な秘匿化リクエストでは、秘匿化中のドキュメントリビジョンを表す Ion 構造体が次のように返されます。
{
blockAddress: {
strandId: "JdxjkR9bSYB5jMHWcI464T",
sequenceNo: 17
},
tableId: "5PLf9SXwndd63lPaSIa0O6",
documentId: "ADR2Ll1fGsU4Jr4EqTdnQF",
version: 1
}
このストアドプロシージャを実行すると、 は編集リクエストを非同期的にQLDB処理します。秘匿化が完了すると、data
構造は完全に削除され、新しい に置き換えられます。
。このフィールドの値は、次のとおり、削除された dataHash
data
構造の Ion ハッシュです。
注記
この dataHash
の例は情報提供のみを目的として、実際に計算されたハッシュ値ではありません。
{
blockAddress:{
strandId:"JdxjkR9bSYB5jMHWcI464T",
sequenceNo:17
},
hash:{{LGSFZ4iEYWZeMwmAqcxxNyT4wbCtuMOmFCj8pEd6Mp0=}},
dataHash: {{s83jd7sfhsdfhksj7hskjdfjfpIPP/DP2hvionas2d4=}},
metadata:{
id:"ADR2Ll1fGsU4Jr4EqTdnQF",
version:1,
txTime:2019-06-05T21:01:442d-3Z,
txId:"9cArhIQV5xf5Tf5vtsPwPq"
}
}
アクティブなリビジョンの削除と秘匿化
アクティブなドキュメントのリビジョン (つまり、各ドキュメントの削除されていない最新のリビジョン) は、データの秘匿化の対象にはなりません。アクティブなリビジョンを秘匿化するには、まずそのリビジョンを更新または削除する必要があります。これにより、以前にアクティブだったリビジョンが履歴に移動し、秘匿化が可能になります。
ユースケースでドキュメント全体を削除済みとしてマークする必要がある場合は、まず DELETEステートメントを使用します。例えば、次のステートメントでは、 が VINのVehicleRegistration
ドキュメントを論理的に削除します1HVBBAANXWH544237
。
DELETE FROM VehicleRegistration AS r WHERE r.VIN = '1HVBBAANXWH544237'
次に、前述のように、削除前の前のリビジョンを秘匿化します。必要であれば、以前のリビジョンを個別に秘匿化することもできます。
ユースケースでドキュメントをアクティブのままにする必要がある場合は、まず UPDATEまたは FROMステートメントを使用して、編集するフィールドを隠すか、削除します。このプロセスの説明は、以下のセクションに記載されています。
リビジョン内の特定のフィールドを秘匿化する
QLDB は、ドキュメントリビジョン内の特定のフィールドの編集をサポートしていません。そのためには、まず UPDATE-REMOVE または FROM-REMOVE ステートメントを使用して、リビジョンから既存のフィールドを削除できます。例えば、次のステートメントでは、 の VIN を持つ LicensePlateNumber
フィールドをVehicleRegistration
ドキュメントから削除します1HVBBAANXWH544237
。
UPDATE VehicleRegistration AS r REMOVE r.LicensePlateNumber WHERE r.VIN = '1HVBBAANXWH544237'
次に、前述のように、削除の前に以前のリビジョンを秘匿化します。必要であれば、この削除済みフィールドを含む以前のリビジョンを個別に秘匿化することもできます。
クエリを最適化する方法については、「クエリパフォーマンスの最適化」に進みます。