42 DBMS_BLOCKCHAIN_TABLE
ブロックチェーン表は、集中管理ブロックチェーン・アプリケーション向けに設計された追加専用の表です。 DBMS_BLOCKCHAIN_TABLEパッケージを使用すると、次のような操作を実行できます。ブロックチェーン表に定義された行保存を超えるブロックチェーン表の行を削除します。行の暗号化ハッシュに入力されるバイトを取得して行のハッシュを検証できるようにします。行がブロックチェーン表内のチェーンに追加された後にブロックチェーン表に挿入した行に署名します。ブロックチェーン表の一部またはすべての行のハッシュおよびデジタル署名をデータベースで検証します。 V2ブロックチェーン表は、V1ブロックチェーン表にある機能に加えて、スキーマの進化、委任署名および副署をサポートしています。 ブロックチェーン表では、PEMエンコーディングではなく、DERエンコーディングのみがX.509証明書に対してサポートされます。
この章のトピックは、次のとおりです:
参照:
- ブロックチェーン表の非表示列の詳細は、ブロックチェーン表の非表示列を参照してください
42.1 DBMS_BLOCKCHAIN_TABLEの概要
Oracleブロックチェーン表では、ピアは、データベースを信頼して改ざん防止元帳をメンテナンスするデータベース・ユーザーです。
元帳は、アプリケーションによって定義および管理されるブロックチェーン表として実装されます。 既存のアプリケーションで、新しいインフラストラクチャやプログラミング・モデルを必要とせずに不正から保護できます。 トランザクションのスループットは標準の表よりも低くなりますが、ブロックチェーン表のパフォーマンスは、分散ブロックチェーンの場合よりも優れています。
DBMS_BLOCKCHAIN_TABLEパッケージでは、次の操作を実行できます。
- ブロックチェーン表で、ブロックチェーン表に定義されている行保存期間を超える行を削除する
- 署名アルゴリズムに入力されたバイトを取得して、ブロックチェーン表に挿入した行に署名できるようにする
- 行の暗号化ハッシュに入力されたバイトを取得して、行のハッシュを確認できるようにする
- ブロックチェーン表のチェーンに行が追加された後に、ブロックチェーン表に挿入した行に署名する
- ブロックチェーン表の一部または全部の行のハッシュおよび署名をデータベースで検証する
- 別のユーザーが挿入した行に署名するための十分な権限を持つ代理人を有効にする
- エンド・ユーザーまたは代理人によって署名されている行の副署を取得する
42.2 DBMS_BLOCKCHAIN_TABLEのセキュリティ・モデル
DBMS_BLOCKCHAIN_TABLEパッケージは、SYSによって所有され、データベース・インストールの一環としてインストールされます。 このパッケージ内のルーチンは、実行者権限(現行のユーザーの権限)を使用して実行されます。 したがって、ブロックチェーン表を選択する権限を持つユーザーは、その表の行コンテンツを検証できる必要があります。
ブロックチェーン表に対する削除権限を持つユーザーは、ブロックチェーン表に定義されている保存期間を超える行を削除できます。
ブロックチェーン表に行を挿入したユーザーは、その行がブロックチェーン表のチェーンに追加された後に、デジタル署名を行に追加できます。 このユーザーは、行に署名するとき、または行がユーザーまたは委任によって署名された後で、この行に対する副署を保護できます。
ブロックチェーン表の行の代理署名者には表に対するSIGN権限が必要です。 さらに、行の挿入時に代理人ユーザーのID番号を非表示列ORABCTAB_DELEGATE_USER_NUMBER$で指定できます。
ブロックチェーン表に対するSIGN権限を持つユーザーは、ユーザー署名または委任署名があるブロックチェーン表の任意の行に対する副署を保護できます。 同様に、ブロックチェーン表の所有者は、ユーザー署名または委任署名があるブロックチェーン表の任意の行に対する副署を保護できます。
42.3 DBMS_BLOCKCHAIN_TABLEサブプログラムの要約
DBMS_BLOCKCHAIN_TABLEパッケージでは、ADD_INTERVAL_PARTITIONING、COUNTERSIGN_ROW、COUNTERSIGN_ROW_SPECIFIED_BY_KEY_COLUMNS、DELETE_EXPIRED_ROWS、GET_BLOCKCHAIN_DIGEST、GET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWS、GET_BYTES_FOR_ROW_HASH、GET_BYTES_FOR_ROW_HASH_SPECIFIED_BY_KEY_COLUMNS、GET_BYTES_FOR_ROW_SIGNATURE、GET_BYTES_FOR_ROW_SIGNATURE_SPECIFIED_BY_KEY_COLUMNS、GET_SIGNED_BLOCKCHAIN_DIGEST、GET_SIGNED_BLOCKCHAIN_DIGEST_FOR SELECTED_ROWS、SIGN_ROW、SIGN_ROW_SPECIFIED_BY_KEY_COLUMNS、SIGN_ROW_SPECIFIED_BY_KEY_COLUMNS_WITH_COUNTERSIGNATURE、SIGN_ROW_WITH_COUNTERSIGNATURE、VERIFY_ROWS、VERIFY_TABLE_BLOCKCHAINおよびVERIFY_USER_BLOCKCHAIN_ROWSの各サブプログラムを使用して様々なファンクションを実行します。
表42-1 DBMS_BLOCKCHAIN_TABLEパッケージのサブプログラム
| サブプログラム | 説明 |
|---|---|
| ADD_INTERVAL_PARTITIONINGプロシージャ | このプロシージャは、時間隔パーティション化を既存のパーティション化されていないV1またはV2ブロックチェーン表に追加します。 |
| COUNTERSIGN_ROWプロシージャ | このプロシージャは、ブロックチェーン表の指定された行に対する副署を取得します。 副署は、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して行データ・コンテンツに署名することによって生成されます。 |
| COUNTERSIGN_ROW_SPECIFIED_BY_KEY_COLUMNSプロシージャ | COUNTERSIGN_ROWの拡張であり、最大3つのユーザー列を使用してブロックチェーン表の行を1つ識別し、その行に対する副署を取得します。
|
| DELETE_EXPIRED_ROWSプロシージャ | このプロシージャは、タイムスタンプが指定されている場合は、before_timestampより前に作成された保存ウィンドウ外の行を削除します。それ以外の場合は、保存ウィンドウ外のすべての行を削除します。 このプロシージャは、期限切れの行を削除する前および期限切れの行を削除した後でコミットします。
|
| GET_BLOCKCHAIN_DIGESTファンクション | このファンクションは、指定されたブロックチェーン表のダイジェストの暗号化ハッシュを生成して返します。 |
| GET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクション | このファンクションは、ブロックチェーン表内のユーザー指定行のダイジェストの暗号化ハッシュを生成して返します。 |
| GET_BYTES_FOR_ROW_HASHプロシージャ | このプロシージャは、識別された特定の行のバイト(列位置順の一連のmeta-data-valueとcolumn-data-valueのペア)を、その後にチェーン内の前の行のハッシを付けて指定されたデータ形式でrow_dataで戻します。
|
| GET_BYTES_FOR_ROW_HASH_SPECIFIED_BY_KEY_COLUMNSプロシージャ | GET_BYTES_FOR_ROW_HASH の拡張であり、インスタンス識別子、チェーン識別子および順序番号のかわりに最大3つのユーザー列を使用して行を一意に識別します。
|
| GET_BYTES_FOR_ROW_SIGNATUREプロシージャ | このプロシージャは、ユーザー署名、委任署名または副署の計算に使用されるバイトを返します。 ユーザー署名または委任署名の場合、このプロシージャは、メタデータを含まない行のハッシュのバイトをrow_dataで返します。
|
| GET_BYTES_FOR_ROW_SIGNATURE_SPECIFIED_BY_KEY_COLUMNSプロシージャ | GET_BYTES_FOR_ROW_SIGNATUREの拡張であり、 インスタンス識別子、チェーン識別子および順序番号のかわりに最大3つのユーザー列値を使用して行を一意に識別します。
|
| GET_SIGNED_BLOCKCHAIN_DIGESTファンクション | このファンクションは、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して、指定されたブロックチェーン表に署名付きダイジェストを生成して戻します。 signed_bytes、signed_row_indexesおよびschema_certificate_guidも戻されます。
|
| GET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクション | このファンクションは、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して、ブロックチェーン表内のユーザー指定行の署名付きダイジェストを生成して戻します。 ダイジェスト内の特定の行は、row_selectorパラメータで指定されます。 signed_bytes、signed_row_indexesおよびschema_certificate_guidも戻されます。
|
| SIGN_ROWプロシージャ | このプロシージャは、以前に挿入された行の行コンテンツに署名を提供するために現在のユーザーが使用できます。 |
| SIGN_ROW_SPECIFIED_BY_KEY_COLUMNSプロシージャ | このプロシージャを使用すると、エンド・ユーザーまたは代理人は、単一行を一意に識別する最大3つのユーザー列を使用して行に署名できます。 |
| SIGN_ROW_SPECIFIED_BY_KEY_COLUMNS_WITH_COUNTERSIGNATUREプロシージャ | このプロシージャは、最大3つのユーザー列名と値を使用して、署名および副署する単一行を一意に識別します。 |
| SIGN_ROW_WITH_COUNTERSIGNATUREプロシージャ | SIGN_ROWの拡張で、ユーザーがデータベースに副署を要求できるようにします。 副署は、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して行データ・コンテンツに署名することによって生成されます。
|
| VERIFY_ROWSプロシージャ | このプロシージャは、適用可能なすべてのシステム・チェーンのすべての行の、low_timestampからhigh_timestampの範囲で作成された行のHASH列値の整合性を検証します。 行の署名は、オプションとして検証できます。
|
| VERIFY_TABLE_BLOCKCHAINプロシージャ | このプロシージャは、作成時間がbytes_previousからの行作成時間の最小値とbytes_latestからの行作成時間の最大値の間にあるすべての行を検証し、正常に検証された行の数を戻します。
|
| VERIFY_USER_BLOCKCHAIN_ROWSプロシージャ | このプロシージャは、ユーザー・チェーン機能がブロックチェーン表に対して有効になっている場合に、1つ以上のユーザー・チェーンの行を検証します。 |
42.3.1 ADD_INTERVAL_PARTITIONINGプロシージャ
このプロシージャは、時間隔パーティション化を既存のパーティション化されていないV1またはV2ブロックチェーン表に追加します。
構文
DBMS_BLOCKCHAIN_TABLE.ADD_INTERVAL_PARTITIONING(
schema_name IN VARCHAR2,
table_name IN VARCHAR2,
interval_number IN NUMBER,
interval_frequency IN VARCHAR2,
first_high_timestamp IN TIMESTAMP); パラメータ
表42-2 ADD_INTERVAL_PARTITIONINGのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
interval_number |
データベースがブロックチェーン表のパーティションを作成する間隔を設定します。 |
interval_frequency |
|
first_high_timestamp |
ブロックチェーン表の最初のパーティションの上限を決定するタイムスタンプ。 |
使用上のノート
- パーティション化されていない既存のV1またはV2不変表では、同じ名前と同じパラメータを持つプロシージャが
DBMS_IMMUTABLE_TABLEパッケージで提供されます。 - コンポジット・パーティション化(つまり、サブパーティション化)は、前述の時間隔パーティション化ではサポートされていません。
42.3.2 COUNTERSIGN_ROWプロシージャ
このプロシージャは、ブロックチェーン表の指定された行に対する副署を取得します。 副署は、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して行データ・コンテンツに署名することによって生成されます。 ブロックチェーン表の行に副署できるのは、その行がブロックチェーン表の現在のエポックに属している場合のみです。
構文
DBMS_BLOCKCHAIN_TABLE.COUNTERSIGN_ROW (
schema_name IN VARCHAR2,
table_name IN VARCHAR2,
instance_id IN NUMBER,
chain_id IN NUMBER,
sequence_id IN NUMBER,
countersignature_algo IN NUMBER DEFAULT DBMS_BLOCKCHAIN_TABLE.SIGN_ALGO_DEFAULT,
countersignature_signed_bytes IN OUT BLOB,
countersignature OUT RAW,
countersignature_certificate_guid OUT RAW,
countersignature_content_version IN VARCHAR2 DEFAULT 'V2_DIGEST',
pdb_guid IN RAW DEFAULT NULL);パラメータ
表42-3 COUNTERSIGN_ROWのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
instance_id |
行を挿入したインスタンス。 有効な値は、 |
chain_id |
行を含むチェーン。 デフォルトでは、各インスタンスに32個のチェーンがあり、0から31までの番号が付けられます。 |
sequence_id |
指定したチェーンでの行の位置。 |
countersignature_algo |
副署用のデジタル署名アルゴリズム。 パラメータは、次のいずれかのパッケージ定数である必要があります。
|
countersignature_signed_bytes |
副署を生成するアルゴリズムに入力されるバイト。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
countersignature |
countersignature_signed_bytesで返されるバイトのデジタル署名。
|
countersignature_certificate_guid |
データベースに格納されているブロックチェーン表所有者の証明書の一意の識別子で、副署を検証するために使用できます。 |
countersignature_content_version |
副署アルゴリズムへの入力として使用されるデータ・コンテンツおよびレイアウトのバージョン。 このリリースでは、'V2_DIGEST'のみがサポートされています。
|
pdb_guid |
ローカル・プラガブル・データベースの識別子。 このパラメータはOracle GoldenGateレプリケーションで使用され、NULLである必要があります。
|
42.3.3 COUNTERSIGN_ROW_SPECIFIED_BY_KEY_COLUMNSプロシージャ
COUNTERSIGN_ROWの拡張であり、最大3つのユーザー列を使用してブロックチェーン表の行を1つ識別し、その行に対する副署を取得します。 ブロックチェーン表の行に副署できるのは、その行がブロックチェーン表の現在のエポックに属している場合のみです。
構文
DBMS_BLOCKCHAIN_TABLE.COUNTERSIGN_ROW_SPECIFIED_BY_KEY_COLUMNS(
schema_name IN VARCHAR2,
table_name IN VARCHAR2,
keycol1_name IN VARCHAR2,
keycol1_value IN VARCHAR2,
keycol2_name IN VARCHAR2 DEFAULT NULL,
keycol2_value IN VARCHAR2 DEFAULT NULL,
keycol3_name IN VARCHAR2 DEFAULT NULL,
keycol3_value IN VARCHAR2 DEFAULT NULL,
countersignature_algo IN NUMBER DEFAULT DBMS_BLOCKCHAIN_TABLE.SIGN_ALGO_DEFAULT,
countersignature_signed_bytes IN OUT BLOB,
countersignature OUT RAW,
countersignature_certificate_guid OUT RAW,
countersignature_content_version IN VARCHAR2 DEFAULT 'V2_DIGEST',
pdb_guid IN RAW DEFAULT NULL);パラメータ
表42-4 COUNTERSIGN_ROW_SPECIFIED_BY_KEY_COLUMNSプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
keycol1_name |
キー列の名前。 |
keycol1_value |
キー列の値。 |
keycol2_name |
コンポジット・キーの第2列の名前。 |
keycol2_value |
コンポジット・キーの第2列の値。 |
keycol3_name |
コンポジット・キーの第3列の名前。 |
keycol3_value |
コンポジット・キーの第3列の値。 |
countersignature_algo |
副署用のデジタル署名アルゴリズム。 パラメータは、次のいずれかのパッケージ定数である必要があります。
|
countersignature_signed_bytes |
副署を生成するアルゴリズムに入力されるバイト。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
countersignature |
countersignature_signed_bytesで返されるバイトのデジタル署名。
|
countersignature_certificate_guid |
データベースに格納されているブロックチェーン表所有者の証明書の一意の識別子で、副署を検証するために使用できます。 |
countersignature_content_version |
副署アルゴリズムへの入力として使用されるデータ・コンテンツおよびレイアウトのバージョン。 このリリースでは、'V2_DIGEST'のみがサポートされています。
|
pdb_guid |
ローカル・プラガブル・データベースの識別子。 このパラメータはOracle GoldenGateレプリケーションで使用され、NULLである必要があります。
|
42.3.4 DELETE_EXPIRED_ROWSプロシージャ
このプロシージャは、タイムスタンプが指定されている場合は、before_timestampを作成した保存ウィンドウ外の行を削除します。それ以外の場合は、保存ウィンドウ外のすべての行を削除します。 削除された行の数は、number_of_rows_deletedパラメータで戻されます。 このプロシージャは、期限切れの行を削除する前および期限切れの行を削除した後でコミットします。
構文
DBMS_BLOCKCHAIN_TABLE.DELETE_EXPIRED_ROWS( schema_name IN VARCHAR2, table_name IN VARCHAR2, before_timestamp IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, number_of_rows_deleted OUT NUMBER);
パラメータ
表42-5 DELETE_EXPIRED_ROWSプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
before_timestamp |
プロシージャによって削除される行の範囲の終了時間(ブロックチェーン表に現在関連付けられている行保存期間の対象となります)。 これはオプションのパラメータです。 デフォルト値は |
number_of_rows_deleted |
削除された行の数。 |
42.3.5 GET_BLOCKCHAIN_DIGESTファンクション
このファンクションは、指定されたブロックチェーン表のダイジェストの暗号化ハッシュを生成して返します。
構文
ノート:
コミットされていないブロックチェーン表に挿入された行の永続性は保証されません。 したがって、ブロックチェーン・ダイジェストには、コミットされていない挿入された行は含まれません。
DBMS_BLOCKCHAIN_TABLE.GET_BLOCKCHAIN_DIGEST( schema_name IN VARCHAR2, table_name IN VARCHAR2, digest_bytes IN OUT BLOB, digest_rows_indexes OUT SYS.ORABCTAB_ROW_ARRAY_T, hash_algo IN NUMBER DEFAULT DBMS_BLOCKCHAIN_TABLE.HASH_ALGO_DEFAULT) RETURN RAW;
パラメータ
表42-6 GET_BLOCKCHAIN_DIGESTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
digest_bytes |
ヘッダーの後に行情報の配列が続くBLOB値。 この一連のバイトは、暗号化ハッシュ関数に入力されます。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
digest_rows_indexes |
このパラメータは、ダイジェストに選択されたブロックチェーン表の行を指定します。 |
hash_algo |
使用する暗号化ハッシュ・アルゴリズム。 パラメータは、次のいずれかのパッケージ定数である必要があります。
|
使用上のノート
-
GET_BLOCKCHAIN_DIGESTファンクションで作成されたブロックチェーン表ダイジェストには、プラガブル・データベース固有の表情報が含まれます。 このようなダイジェストは、そのダイジェストが作成されたプラガブル・データベースでのみ、およびそのダイジェストの作成に使用された表についてのみ使用できます。DBMS_BLOCKCHAIN_TABLE.VERIFY_TABLE_BLOCKCHAINの場合、これらの要件は、両方のブロックチェーン表ダイジェストが、同じブロックチェーン表について、現在のプラガブル・データベース内に生成されている必要があることを意味します。たとえば、プラガブル・データベースAでブロックチェーン表のダイジェストを作成し、データ・ポンプを使用してそのブロックチェーン表をエクスポートし、データ・ポンプを使用してそのブロックチェーン表をプラガブル・データベースBにインポートするとします。 プラガブル・データベースAで作成されたブロックチェーン表ダイジェストは、プラガブル・データベースBでは使用できません。 プラガブル・データベースBで新しいブロックチェーン表ダイジェストを作成する必要があります。
42.3.6 GET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクション
このファンクションは、ブロックチェーン表内のユーザー指定行のダイジェストの暗号化ハッシュを生成して返します。
構文
ノート:
コミットされていないブロックチェーン表に挿入された行の永続性は保証されません。 したがって、ブロックチェーン・ダイジェストには、コミットされていない挿入された行は含まれません。
DBMS_BLOCKCHAIN_TABLE.GET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWS( schema_name IN VARCHAR2, table_name IN VARCHAR2, row_selector IN VARCHAR2, digest_bytes IN OUT BLOB, row_data_bytes IN OUT BLOB, digest_rows_indexes OUT SYS.ORABCTAB_ROW_ARRAY_T, hash_algo IN NUMBER DEFAULT DBMS_BLOCKCHAIN_TABLE.HASH_ALGO_DEFAULT) RETURN RAW;
パラメータ
表42-7 GET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
row_selector |
WHEREキーワードのないwhere句の条件。
|
digest_bytes |
ヘッダーの後に行情報の配列が続くBLOB値。 この一連のバイトは、暗号化ハッシュ関数に入力されます。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
row_data_bytes |
このパラメータは、ダイジェストに選択されたブロックチェーン表の行の内容を指定します。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
digest_rows_indexes |
このパラメータは、ダイジェストに選択されたブロックチェーン表の行を指定します。 |
hash_algo |
使用する暗号化ハッシュ・アルゴリズム。 パラメータは、次のいずれかのパッケージ定数である必要があります。
|
使用上のノート
-
GET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクションで作成されたブロックチェーン表ダイジェストには、プラガブル・データベース固有の表情報が含まれます。 このようなダイジェストは、そのダイジェストが作成されたプラガブル・データベースでのみ、およびそのダイジェストの作成に使用された表についてのみ使用できます。DBMS_BLOCKCHAIN_TABLE.VERIFY_TABLE_BLOCKCHAINの場合、これらの要件は、両方のブロックチェーン表ダイジェストが、同じブロックチェーン表について、現在のプラガブル・データベース内に生成されている必要があることを意味します。たとえば、プラガブル・データベースAでブロックチェーン表のダイジェストを作成し、データ・ポンプを使用してそのブロックチェーン表をエクスポートし、データ・ポンプを使用してそのブロックチェーン表をプラガブル・データベースBにインポートするとします。 プラガブル・データベースAで作成されたブロックチェーン表ダイジェストは、プラガブル・データベースBでは使用できません。 プラガブル・データベースBで新しいブロックチェーン表ダイジェストを作成する必要があります。
42.3.7 GET_BYTES_FOR_ROW_HASHプロシージャ
このプロシージャは、識別された特定の行のバイト(列位置順の一連のmeta-data-valueとcolumn-data-valueのペア)を、その後にチェーン内の前の行のハッシを付けて指定されたデータ形式でrow_dataで戻します。
構文
DBMS_BLOCKCHAIN_TABLE.GET_BYTES_FOR_ROW_HASH( schema_name IN VARCHAR2, table_name IN VARCHAR2, instance_id IN NUMBER, chain_id IN NUMBER, sequence_id IN NUMBER, data_format IN NUMBER, row_data IN OUT BLOB, chain_name IN VARCHAR2 DEFAULT NULL, pdb_guid IN RAW DEFAULT NULL);
パラメータ
表42-8 GET_BYTES_FOR_ROW_HASHプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
schema_name |
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
instance_id |
行を挿入したインスタンス。 有効な値は、 |
chain_id |
行を含むチェーン。 デフォルトでは、各インスタンスに32個のチェーンがあり、0から31までの番号が付けられます。 |
sequence_id |
指定したチェーンでの行の位置。 |
data_format |
指定した行のハッシュのデータ・レイアウトのバージョン。 このリリースでは、1にする必要があります。
|
row_data |
指定されたデータ形式の指定した行のバイト。これを暗号化ハッシュ関数に入力すると行のハッシュ値を確認できます。 BLOB内のバイトはいずれも上書きされます。
|
chain_name |
ユーザー・チェーンの暗号化ハッシュのバイトが必要な場合のユーザー・チェーンの名前。 システム・チェーンの暗号化ハッシュのバイトが必要な場合は、NULLを指定します。
|
pdb_guid |
V2ブロックチェーン表の場合は、行を挿入したプラガブル・データベースの識別子。 V1ブロックチェーン表の場合は、NULLである必要があります。
|
使用上のノート
列のメタデータ・バイトは、行をハッシュするために使用されるブロックチェーン・アルゴリズム・バージョンをエンコードする20バイト、列の位置、列のデータ型、列値がNULLかどうか、実際の列値の長さ(バイト)です。
文字以外の列の場合、列データ・バイトは、ディスク上の列値を表す実際のバイトです。 文字と文字LOB列の場合、値は特定の文字セットに正規化されます。 CHARおよびNCHAR列の場合、空白の数が正規化されます。
一部のメタデータ・バイトは、将来使用するために予約されています。
参照:
正規化の詳細は、Oracle Database管理者ガイドを参照してください
42.3.8 GET_BYTES_FOR_ROW_HASH_SPECIFIED_BY_KEY_COLUMNSプロシージャ
GET_BYTES_FOR_ROW_HASHの拡張であり、インスタンス識別子、チェーン識別子および順序番号のかわりに最大3つのユーザー列を使用して行を一意に識別します。
構文
DBMS_BLOCKCHAIN_TABLE.GET_BYTES_FOR_ROW_HASH_SPECIFIED_BY_KEY_COLUMNS(
schema_name IN VARCHAR2,
table_name IN VARCHAR2,
data_format IN NUMBER,
row_data IN OUT BLOB,
chain_name IN VARCHAR2 DEFAULT NULL,
keycol1_name IN VARCHAR2,
keycol1_value IN VARCHAR2,
keycol2_name IN VARCHAR2 DEFAULT NULL,
keycol2_value IN VARCHAR2 DEFAULT NULL,
keycol3_name IN VARCHAR2 DEFAULT NULL,
keycol3_value IN VARCHAR2 DEFAULT NULL,
pdb_guid IN RAW DEFAULT NULL);パラメータ
表42-9 GET_BYTES_FOR_ROW_HASH_SPECIFIED_BY_KEY_COLUMNSのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
data_format |
指定した行のハッシュのデータ・レイアウトのバージョン。 このリリースでは、1にする必要があります。 |
row_data |
指定されたデータ形式の指定した行のバイト。これを暗号化ハッシュ関数に入力すると行のハッシュ値を確認できます。 BLOB内のバイトはいずれも上書きされます。 |
chain_name |
ユーザー・チェーンの暗号化ハッシュのバイトが必要な場合のユーザー・チェーンの名前。 システム・チェーンの暗号化ハッシュのバイトが必要な場合は、NULLを指定します。
|
keycol1_name |
キー列の名前。 |
keycol1_value |
キー列の値。 |
keycol2_name |
コンポジット・キーの第2列の名前。 |
keycol2_value |
コンポジット・キーの第2列の値。 |
keycol3_name |
コンポジット・キーの第3列の名前。 |
keycol3_value |
コンポジット・キーの第3列の値。 |
pdb_guid |
V2ブロックチェーン表の場合は、行を挿入したプラガブル・データベースの識別子。 V1ブロックチェーン表の場合は、NULLである必要があります。
|
42.3.9 GET_BYTES_FOR_ROW_SIGNATUREプロシージャ
このプロシージャは、ユーザー署名、委任署名または副署の計算に使用されるバイトを返します。 ユーザー署名または委任署名の場合、このプロシージャは、メタデータを含まない行のハッシュのバイトをrow_dataで返します。 他の列は、この行にも前の行にも含まれません。 副署の場合、このルーチンは、行の副署を計算するデジタル署名アルゴリズムに入力されるバイトをrow_dataで返します。
構文
DBMS_BLOCKCHAIN_TABLE.GET_BYTES_FOR_ROW_SIGNATURE( schema_name IN VARCHAR2, table_name IN VARCHAR2, instance_id IN NUMBER, chain_id IN NUMBER, sequence_id IN NUMBER, data_format IN NUMBER, row_data IN OUT BLOB, pdb_guid IN RAW DEFAULT NULL, signature_type IN VARCHAR2 DEFAULT 'USER');
パラメータ
表42-10 GET_BYTES_FOR_ROW_SIGNATUREプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
instance_id |
行が挿入されたインスタンス。 有効な値は、 |
chain_id |
行が挿入されたチェーン。 デフォルトでは、各インスタンスに32個のチェーンがあり、0から31までの番号が付けられます。 |
sequence_id |
チェーンでの行の位置。 |
data_format |
row_data内のデータの書式。 このリリースでは、1にする必要があります。
|
row_data |
署名が必要な一連のバイト。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
pdb_guid |
V2ブロックチェーン表の場合は、行を挿入したプラガブル・データベースの識別子。 V1ブロックチェーン表の場合は、NULLである必要があります。
|
signature_type |
signature_typeの有効な値は、USER、DELEGATEおよびCOUNTERSIGNATUREです。 DELEGATEとUSERは同じ意味で使用できます。
|
42.3.10 GET_BYTES_FOR_ROW_SIGNATURE_SPECIFIED_BY_KEY_COLUMNSプロシージャ
GET_BYTES_FOR_ROW_SIGNATUREの拡張であり、インスタンス識別子、チェーン識別子および順序番号のかわりに最大3つのユーザー列値を使用して行を一意に識別します。
構文
DBMS_BLOCKCHAIN_TABLE.GET_BYTES_FOR_ROW_SIGNATURE_SPECIFIED_BY_KEY_COLUMNS( schema_name IN VARCHAR2, table_name IN VARCHAR2, data_format IN NUMBER, row_data IN OUT BLOB, keycol1_name IN VARCHAR2, keycol1_value IN VARCHAR2, keycol2_name IN VARCHAR2 DEFAULT NULL, keycol2_value IN VARCHAR2 DEFAULT NULL, keycol3_name IN VARCHAR2 DEFAULT NULL, keycol3_value IN VARCHAR2 DEFAULT NULL, pdb_guid IN RAW DEFAULT NULL, signature_type IN VARCHAR2 DEFAULT 'USER');
パラメータ
表42-11 GET_BYTES_FOR_ROW_SIGNATURE_SPECIFIED_BY_KEY_COLUMNSプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
data_format |
row_data内のデータの書式。 このリリースでは、1にする必要があります。
|
row_data |
署名が必要な一連のバイト。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
keycol1_name |
キー列の名前。 |
keycol1_value |
キー列の値。 |
keycol2_name |
コンポジット・キーの第2列の名前。 |
keycol2_value |
コンポジット・キーの第2列の値。 |
keycol3_name |
コンポジット・キーの第3列の名前。 |
keycol3_value |
コンポジット・キーの第3列の値。 |
pdb_guid |
V2ブロックチェーン表の場合は、行を挿入したプラガブル・データベースの識別子。 V1ブロックチェーン表の場合は、NULLである必要があります。
|
signature_type |
signature_typeの有効な値は、USER、DELEGATEおよびCOUNTERSIGNATUREです。 DELEGATEとUSERは同じ意味で使用できます。
|
42.3.11 GET_SIGNED_BLOCKCHAIN_DIGESTファンクション
このファンクションは、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して、指定されたブロックチェーン表に署名付きダイジェストを生成して戻します。 signed_bytes、signed_row_indexesおよびschema_certificate_guidも戻されます。
構文
ノート:
コミットされていないブロックチェーン表に挿入された行の永続性は保証されません。 したがって、署名済ブロックチェーン・ダイジェストには、コミットされていない挿入された行は含まれません。
DBMS_BLOCKCHAIN_TABLE.GET_SIGNED_BLOCKCHAIN_DIGEST( schema_name IN VARCHAR2, table_name IN VARCHAR2, signed_bytes IN OUT BLOB, signed_rows_indexes OUT SYS.ORABCTAB_ROW_ARRAY_T, schema_certificate_guid OUT RAW, signature_algo IN NUMBER DEFAULT DBMS_BLOCKCHAIN_TABLE.SIGN_ALGO_DEFAULT) RETURN RAW;
パラメータ
表42-12 GET_SIGNED_BLOCKCHAIN_DIGESTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
signed_bytes |
ヘッダーの後に行情報の配列が続くBLOB値。 この一連のバイトは、デジタル署名されたダイジェストです。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
signed_rows_indexes |
このパラメータは、デジタル署名されたブロックチェーン表の行を指定します。 |
schema_certificate_guid |
データベースに格納されているブロックチェーン表所有者の証明書の一意の識別子で、デジタル署名を検証するために使用できます。 |
signature_algo |
使用するデジタル署名アルゴリズム。 パラメータは、次のいずれかのパッケージ定数である必要があります。
|
使用上のノート
- データベースでは、ブロックチェーン表の所有者のPKI秘密キーを使用して
signed_bytesの署名が計算されます。 - ブロックチェーン表の所有者の証明書は、
DBMS_USER_CERTS.ADD_CERTIFICATEを使用してデータベースに追加する必要があります。 - ブロックチェーン表の所有者のPKI秘密キーと証明書は、非コンテナ・データベース用の
<WALLET_ROOT>/bctable/ディレクトリの下にあるウォレットに存在する必要があります。 - ブロックチェーン表の所有者のPKI秘密キーと証明書は、コンテナ・データベース用の
<WALLET_ROOT>/pdb_guid/bctable/ディレクトリの下にあるウォレットに存在する必要があります。 -
GET_SIGNED_BLOCKCHAIN_DIGESTファンクションで作成されたブロックチェーン表ダイジェストには、プラガブル・データベース固有の表情報が含まれます。 このようなダイジェストは、そのダイジェストが作成されたプラガブル・データベースでのみ、およびそのダイジェストの作成に使用された表についてのみ使用できます。DBMS_BLOCKCHAIN_TABLE.VERIFY_TABLE_BLOCKCHAINの場合、これらの要件は、両方のブロックチェーン表ダイジェストが、同じブロックチェーン表について、現在のプラガブル・データベース内に生成されている必要があることを意味します。たとえば、プラガブル・データベースAでブロックチェーン表のダイジェストを作成し、データ・ポンプを使用してそのブロックチェーン表をエクスポートし、データ・ポンプを使用してそのブロックチェーン表をプラガブル・データベースBにインポートするとします。 プラガブル・データベースAで作成されたブロックチェーン表ダイジェストは、プラガブル・データベースBでは使用できません。 プラガブル・データベースBで新しいブロックチェーン表ダイジェストを作成する必要があります。
ノート:
bctableサブディレクトリは、ウォレットを使用するデータベース・コンポーネントの名前です。 ブロックチェーン表の名前ではありません。
42.3.12 GET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクション
このファンクションは、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して、ブロックチェーン表内のユーザー指定行の署名付きダイジェストを生成して戻します。 ダイジェスト内の特定の行は、row_selectorパラメータで指定されます。 signed_bytes、signed_row_indexesおよびschema_certificate_guidも戻されます。
構文
ノート:
コミットされていないブロックチェーン表に挿入された行の永続性は保証されません。 したがって、署名済ブロックチェーン・ダイジェストには、コミットされていない挿入された行は含まれません。
DBMS_BLOCKCHAIN_TABLE.GET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWS( schema_name IN VARCHAR2, table_name IN VARCHAR2, row_selector IN VARCHAR2, signed_bytes IN OUT BLOB, row_data_bytes IN OUT BLOB, signed_rows_indexes OUT SYS.ORABCTAB_ROW_ARRAY_T, schema_certificate_guid OUT RAW, signature_algo IN NUMBER DEFAULT DBMS_BLOCKCHAIN_TABLE.SIGN_ALGO_DEFAULT) RETURN RAW;
パラメータ
表42-13 GET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
row_selector |
WHEREキーワードのないwhere句の条件。
|
signed_bytes |
ヘッダーの後に行情報の配列が続くBLOB値。 この一連のバイトは、デジタル署名されたダイジェストです。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
row_data_bytes |
このパラメータは、ダイジェストに選択されたブロックチェーン表の行の内容を指定します。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
signed_rows_indexes |
このパラメータは、デジタル署名されたブロックチェーン表の行を指定します。 |
schema_certificate_guid |
データベースに格納されているブロックチェーン表所有者の証明書の一意の識別子で、デジタル署名を検証するために使用できます。 |
signature_algo |
デジタル署名の作成に使用されるアルゴリズム。 アルゴリズムは、DBMS_BLOCKCHAIN_TABLEパッケージに定義されている次の定数のいずれかである必要があります。
|
使用上のノート
- データベースでは、ブロックチェーン表の所有者のPKI秘密キーを使用して
signed_bytesの署名が計算されます。 - ブロックチェーン表の所有者の証明書は、
DBMS_USER_CERTS.ADD_CERTIFICATEを使用してデータベースに追加する必要があります。 - ブロックチェーン表の所有者のPKI秘密キーと証明書は、非コンテナ・データベース用の
<WALLET_ROOT>/bctable/ディレクトリの下にあるウォレットに存在する必要があります。 - ブロックチェーン表の所有者のPKI秘密キーと証明書は、コンテナ・データベース用の
<WALLET_ROOT>/pdb_guid/bctable/ディレクトリの下にあるウォレットに存在する必要があります。 -
GET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクションで作成されたブロックチェーン表ダイジェストには、プラガブル・データベース固有の表情報が含まれます。 このようなダイジェストは、そのダイジェストが作成されたプラガブル・データベースでのみ、およびそのダイジェストの作成に使用された表についてのみ使用できます。DBMS_BLOCKCHAIN_TABLE.VERIFY_TABLE_BLOCKCHAINの場合、これらの要件は、両方のブロックチェーン表ダイジェストが、同じブロックチェーン表について、現在のプラガブル・データベース内に生成されている必要があることを意味します。たとえば、プラガブル・データベースAでブロックチェーン表のダイジェストを作成し、データ・ポンプを使用してそのブロックチェーン表をエクスポートし、データ・ポンプを使用してそのブロックチェーン表をプラガブル・データベースBにインポートするとします。 プラガブル・データベースAで作成されたブロックチェーン表ダイジェストは、プラガブル・データベースBでは使用できません。 プラガブル・データベースBで新しいブロックチェーン表ダイジェストを作成する必要があります。
ノート:
bctableサブディレクトリは、ウォレットを使用するデータベース・コンポーネントの名前です。 ブロックチェーン表の名前ではありません。
42.3.13 SIGN_ROWプロシージャ
このプロシージャは、以前に挿入された行の行コンテンツに署名を提供するために現在のユーザーが使用できます。 ブロックチェーン表に行を挿入したトランザクションは、SIGN_ROWプロシージャがコールされる前にコミットしておく必要があります。
構文
DBMS_BLOCKCHAIN_TABLE.SIGN_ROW( schema_name IN VARCHAR2, table_name IN VARCHAR2, instance_id IN NUMBER, chain_id IN NUMBER, sequence_id IN NUMBER, hash IN RAW DEFAULT NULL, signature IN RAW, certificate_guid IN RAW, signature_algo IN NUMBER, delegate IN BOOLEAN DEFAULT FALSE, pdb_guid IN RAW DEFAULT NULL);
パラメータ
表42-14 SIGN_ROWプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
instance_id |
行が挿入されたインスタンス。 |
chain_id |
署名対象となる行を含むチェーン。 各インスタンスに32個のチェーンがあり、0から31までの番号が付けられます。 |
sequence_id |
チェーンでの行の位置。 有効な値は、 |
hash |
non-NULLの場合は、署名対象となる行のハッシュの予測値。 NULLの場合は、署名対象となる行のハッシュはチェックされません。
|
signature |
行に格納されているハッシュ値に対するユーザーのデジタル署名。 |
certificate_guid |
デジタル署名の検証に使用されるデータベースに格納された証明書の一意の識別子。 |
signature_algo |
デジタル署名の作成に使用されるアルゴリズム。 アルゴリズムは、DBMS_BLOCKCHAIN_TABLEパッケージに定義されている次の定数のいずれかである必要があります。
|
| delegate | TRUEの場合、行は代理人によって署名されます。 FALSEの場合、行は行を挿入したユーザーによって署名されます。
|
| pdb_guid | ローカル・プラガブル・データベースの識別子。 このパラメータはOracle GoldenGateレプリケーションで使用され、NULLである必要があります。
|
ノート:
ブロックチェーン表の非表示列の詳細は、ブロックチェーン表の非表示列を参照してください使用上のノート
- データベースで次のことが検証されます。
- delegateが
FALSEの場合、現在のユーザーのobj#は非表示列ORABCTAB_USER_NUMBER$の値と一致します(ユーザーが行を所有していることを保証します) - delegateが
TRUEで、非表示列ORABCTAB_DELEGATE_USER_NUMBER$がNULLでない場合、現在のユーザーのobj#はこの列の値と一致します - delegateが
TRUEの場合、現在のユーザーはブロックチェーン表に対するSIGN権限を持っています - ハッシュ(指定されている場合)が、行のハッシュ列コンテンツと一致します
'instance_id'、'chain_id'および'sequence_id'で識別される特定の行のsignature列の値はNULLです- 検証が成功すると、行に署名値が格納されます。
-
SIGN_ROWプロシージャは、プラガブル・データベースに固有の情報に依存し、データ・ポンプ以外のユーザー、アプリケーションまたはユーティリティによって現在のプラガブル・データベースに挿入された行にのみ適用されます。たとえば、プラガブル・データベースAのブロックチェーン表に行を挿入し、
INSERTトランザクションをコミットし、データ・ポンプを使用してそのブロックチェーン表をエクスポートし、データ・ポンプを使用してそのブロックチェーン表をプラガブル・データベースBにインポートするとします。 プラガブル・データベースBでこの行に署名しようとすると、DBMS_BLOCKCHAIN_TABLE.SIGN_ROWで例外が発生します。 したがって、データ・ポンプを使用してブロックチェーン表のコピーを作成する前に、署名する必要があるブロックチェーン表のすべての行に署名する必要があります。
- delegateが
42.3.14 SIGN_ROW_SPECIFIED_BY_KEY_COLUMNSプロシージャ
このプロシージャを使用すると、エンド・ユーザーまたは代理人は、単一行を一意に識別する最大3つのユーザー列を使用して行に署名できます。
構文
DBMS_BLOCKCHAIN_TABLE.SIGN_ROW_SPECIFIED_BY_KEY_COLUMNS(
schema_name IN VARCHAR2,
table_name IN VARCHAR2,
hash IN RAW DEFAULT NULL,
signature IN RAW,
certificate_guid IN RAW,
signature_algo IN NUMBER,
delegate IN BOOLEAN DEFAULT FALSE,
keycol1_name IN VARCHAR2,
keycol1_value IN VARCHAR2,
keycol2_name IN VARCHAR2 DEFAULT NULL,
keycol2_value IN VARCHAR2 DEFAULT NULL,
keycol3_name IN VARCHAR2 DEFAULT NULL,
keycol3_value IN VARCHAR2 DEFAULT NULL,
pdb_guid IN RAW DEFAULT NULL); パラメータ
表42-15 SIGN_ROW_SPECIFIED_BY_KEY_COLUMNSプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
hash |
non-NULLの場合は、署名対象となる行のハッシュの予測値。 NULLの場合は、署名対象となる行のハッシュはチェックされません。
|
signature |
行に格納されているハッシュ値に対するユーザーのデジタル署名。 |
certificate_guid |
デジタル署名の検証に使用されるデータベースに格納された証明書の一意の識別子。 |
signature_algo |
デジタル署名の作成に使用されるアルゴリズム。 アルゴリズムは、DBMS_BLOCKCHAIN_TABLEパッケージに定義されている次の定数のいずれかである必要があります。
|
delegate |
TRUEの場合、行は代理人によって署名されます。 FALSEの場合、行は行を挿入したユーザーによって署名されます。
|
keycol1_name |
キー列の名前。 |
keycol1_value |
キー列の値。 |
keycol2_name |
コンポジット・キーの第2列の名前。 |
keycol2_value |
コンポジット・キーの第2列の値。 |
keycol3_name |
コンポジット・キーの第3列の名前。 |
keycol3_value |
コンポジット・キーの第3列の値。 |
pdb_guid |
ローカル・プラガブル・データベースの識別子。 このパラメータはOracle GoldenGateレプリケーションで使用され、NULLである必要があります。
|
使用上のノート
keycol1_value、keycol2_valueおよびkeycol3_valueに使用できるのは、non-NULL値のみです。 keycol2_valueまたはkeycol3_valueにNULL値が指定されている場合、対応するパラメータkeycol2_nameまたはkeycol3_nameはNULLである必要があります。 その他の組合せでは例外が発生します。
42.3.15 SIGN_ROW_SPECIFIED_BY_KEY_COLUMNS_WITH_COUNTERSIGNATUREプロシージャ
このプロシージャは、最大3つのユーザー列名と値を使用して、署名および副署する単一行を一意に識別します。 ブロックチェーン表の行に副署できるのは、その行がブロックチェーン表の現在のエポックに属している場合のみです。
構文
DBMS_BLOCKCHAIN_TABLE.SIGN_ROW_SPECIFIED_BY_KEY_COLUMNS_WITH_COUNTERSIGNATURE ( schema_name IN VARCHAR2, table_name IN VARCHAR2, hash IN RAW DEFAULT NULL, signature IN RAW, certificate_guid IN RAW, signature_algo IN NUMBER, delegate IN BOOLEAN DEFAULT FALSE, keycol1_name IN VARCHAR2, keycol1_value IN VARCHAR2, keycol2_name IN VARCHAR2 DEFAULT NULL, keycol2_value IN VARCHAR2 DEFAULT NULL, keycol3_name IN VARCHAR2 DEFAULT NULL, keycol3_value IN VARCHAR2 DEFAULT NULL, countersignature_algo IN NUMBER DEFAULT DBMS_BLOCKCHAIN_TABLE.SIGN_ALGO_DEFAULT, countersignature_signed_bytes IN OUT BLOB, countersignature OUT RAW, countersignature_certificate_guid OUT RAW, countersignature_content_version IN VARCHAR2 DEFAULT 'V2_DIGEST', pdb_guid IN RAW DEFAULT NULL);
パラメータ
表42-16 SIGN_ROW_SPECIFIED_BY_KEY_COLUMNS_WITH_COUNTERSIGNATUREプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
hash |
non-NULLの場合は、署名対象となる行のハッシュの予測値。 NULLの場合は、署名対象となる行のハッシュはチェックされません
|
signature |
行に格納されているハッシュ値に対するユーザーのデジタル署名。 |
certificate_guid |
デジタル署名の検証に使用されるデータベースに格納された証明書の一意の識別子。 |
signature_algo |
デジタル署名の作成に使用されるアルゴリズム。 アルゴリズムは、DBMS_BLOCKCHAIN_TABLEパッケージに定義されている次の定数のいずれかである必要があります。
|
delegate |
TRUEの場合、行は代理人によって署名されます。 FALSEの場合、行は行を挿入したユーザーによって署名されます。
|
keycol1_name |
キー列の名前。 |
keycol1_value |
キー列の値。 |
keycol2_name |
コンポジット・キーの第2列の名前。 |
keycol2_value |
コンポジット・キーの第2列の値。 |
keycol3_name |
コンポジット・キーの第3列の名前。 |
keycol3_value |
コンポジット・キーの第3列の値。 |
countersignature_algo |
副署用のデジタル署名アルゴリズム。 パラメータは、次のいずれかのパッケージ定数である必要があります。
|
countersignature_signed_bytes |
副署を生成するアルゴリズムに入力されるバイト。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
countersignature |
countersignature_signed_bytesで返されるバイトのデジタル署名。
|
countersignature_certificate_guid |
データベースに格納されているブロックチェーン表所有者の証明書の一意の識別子で、副署を検証するために使用できます。 |
countersignature_content_version |
副署アルゴリズムへの入力として使用されるデータ・コンテンツおよびレイアウトのバージョン。 このリリースでは、'V2_DIGEST'のみがサポートされています。
|
pdb_guid |
ローカル・プラガブル・データベースの識別子。 このパラメータはOracle GoldenGateレプリケーションで使用され、NULLである必要があります。
|
42.3.16 SIGN_ROW_WITH_COUNTERSIGNATUREプロシージャ
SIGN_ROWの拡張で、ユーザーがデータベースに副署を要求できるようにします。 副署は、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して行データ・コンテンツに署名することによって生成されます。 ブロックチェーン表の行に副署できるのは、その行がブロックチェーン表の現在のエポックに属している場合のみです。
構文
delegateがTRUEの場合、副署をリクエストしている代理人ユーザーになります。
副署は、計算に使用された符号付きバイトを再計算するために必要なすべてのメタ情報とともに、行に格納されます。
DBMS_BLOCKCHAIN_TABLE.SIGN_ROW_WITH_COUNTERSIGNATURE(
schema_name IN VARCHAR2,
table_name IN VARCHAR2,
instance_id IN NUMBER,
chain_id IN NUMBER,
sequence_id IN NUMBER,
hash IN RAW DEFAULT NULL,
signature IN RAW,
certificate_guid IN RAW,
signature_algo IN NUMBER,
delegate IN BOOLEAN DEFAULT FALSE,
countersignature_algo IN NUMBER DEFAULT DBMS_BLOCKCHAIN_TABLE.SIGN_ALGO_DEFAULT,
countersignature_signed_bytes IN OUT BLOB,
countersignature OUT RAW,
countersignature_certificate_guid OUT RAW,
countersignature_content_version IN VARCHAR2 DEFAULT 'V2_DIGEST',
pdb_guid IN RAW DEFAULT NULL); パラメータ
表42-17 SIGN_ROW_WITH_COUNTERSIGNATUREプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
instance_id |
行が挿入されたインスタンス。 |
chain_id |
署名対象となる行を含むチェーン。 デフォルトでは、各インスタンスに32個のチェーンがあり、0から31までの番号が付けられます。 |
sequence_id |
チェーンでの行の位置。 有効な値は、 |
hash |
non-NULLの場合は、署名対象となる行のハッシュの予測値。 NULLの場合は、署名対象となる行のハッシュはチェックされません。
|
signature |
行に格納されているハッシュ値に対するユーザーのデジタル署名。 |
certificate_guid |
デジタル署名の検証に使用されるデータベースに格納された証明書の一意の識別子。 |
signature_algo |
デジタル署名の作成に使用されるアルゴリズム。 アルゴリズムは、DBMS_BLOCKCHAIN_TABLEパッケージに定義されている次の定数のいずれかである必要があります。
|
delegate |
TRUEの場合、行は代理人によって署名されます。 FALSEの場合、行は行を挿入したユーザーによって署名されます。
|
countersignature_algo |
副署用のデジタル署名アルゴリズム。 パラメータは、次のいずれかのパッケージ定数である必要があります。
|
countersignature_signed_bytes |
副署を生成するアルゴリズムに入力されるバイト。 コール元は、このパラメータに空のBLOBを渡す必要があります。 |
countersignature |
countersignature_signed_bytesで返されるバイトのデジタル署名。
|
countersignature_certificate_guid |
データベースに格納されているブロックチェーン表所有者の証明書の一意の識別子で、副署を検証するために使用できます。 |
countersignature_content_version |
副署アルゴリズムへの入力として使用されるデータ・コンテンツおよびレイアウトのバージョン。 このリリースでは、'V2_DIGEST'のみがサポートされています。
|
pdb_guid |
ローカル・プラガブル・データベースの識別子。 このパラメータはOracle GoldenGateレプリケーションで使用され、NULLである必要があります。
|
使用上のノート
SYSは、常にブロックチェーン表の任意の行に副署できます。SIGN_ROW_SPECIFIED_BY_KEY_COLUMNS_WITH_COUNTERSIGNATUREまたはSIGN_ROW_WITH_COUNTERSIGNATUREを使用して署名したり副署を取得するエンド・ユーザーまたは代理人は、副署を取得するための追加権限は必要ありません。
42.3.17 VERIFY_ROWSプロシージャ
適用可能なすべてのシステム・チェーンのすべての行の、low_timestampからhigh_timestampの範囲で作成された行のHASH列値とオプションでSIGNATURE列値の整合性を検証します。 チェーンの整合性が損なわれている場合は、該当する例外がスローされます。
構文
DBMS_BLOCKCHAIN_TABLE.VERIFY_ROWS( schema_name IN VARCHAR2, table_name IN VARCHAR2, low_timestamp IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, high_timestamp IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, instance_id IN NUMBER DEFAULT NULL, chain_id IN NUMBER DEFAULT NULL, number_of_rows_verified OUT NUMBER, verify_signature IN BOOLEAN DEFAULT TRUE, verify_delegate_signature IN BOOLEAN DEFAULT TRUE, verify_countersignature IN BOOLEAN DEFAULT TRUE, pdb_guid IN RAW DEFAULT NULL);
パラメータ
表42-18 VERIFY_ROWSプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
schema_name |
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
low_timestamp |
指定する場合は、行を検証するための時間範囲の下限。 デフォルト値は |
high_timestamp |
指定する場合は、行を検証するための時間範囲の上限。 デフォルト値は |
instance_id |
指定した場合、指定したインスタンスに挿入された行に行の検証が制限されます。 |
chain_id |
指定した場合、指定したチェーンの行に行の検証が制限されます。 デフォルトでは、各インスタンスに32個のチェーンがあり、0から31までの番号が付けられます。 |
number_of_rows_verified |
検証する行数。 |
verify_signature |
|
verify_delegate_signature |
|
verify_countersignature |
|
pdb_guid |
V2ブロックチェーン表の場合にNULLでない場合、指定されたプラガブル・データベースによって挿入されたシステム・チェーンへの注意が制限されます。 V1ブロックチェーン表の場合は、NULLである必要があります。
|
使用上のノート
schema_nameおよびtable_nameは必須入力パラメータです。- その他の入力パラメータはすべてオプションですが、次の例外があります。
chain_idを指定した場合は、instance_idを指定する必要があります
instance_idの有効な値は1、2、…などです。instance_idとchain_idのいずれも指定されない場合は、すべてのチェーンを意味します。instance_idのみが指定されている場合は、そのインスタンスのすべてのチェーンを意味します。 両方を指定した場合は、組合せで指定された特定のチェーンを意味します。-
low_timestampとhigh_timestampの両方を指定する場合、high_timestampはlow_timestampより後である必要があります。low_timestampを指定しない場合、範囲は、ブロックチェーン表内の最も古い行からhigh_timestampまでです。high_timestampを指定しない場合、範囲は、low_timestampから表に最後に挿入された行のタイムスタンプまでです。
42.3.18 VERIFY_TABLE_BLOCKCHAINプロシージャ
このプロシージャは、作成時間がbytes_previousからの行作成時間の最小値とbytes_latestからの行作成時間の最大値の間にあるすべての行の署名およびシステム・チェーンを検証します。 OUTパラメータnumber_of_rows_verifiedは、正常に検証された行の数を戻します。
構文
DBMS_BLOCKCHAIN_TABLE.VERIFY_TABLE_BLOCKCHAIN( bytes_latest IN BLOB DEFAULT NULL, bytes_previous IN BLOB DEFAULT NULL, number_of_rows_verified OUT NUMBER, verify_signature IN BOOLEAN DEFAULT TRUE, verify_delegate_signature IN BOOLEAN DEFAULT TRUE, verify_countersignature IN BOOLEAN DEFAULT TRUE, signed_bytes_latest IN BLOB DEFAULT NULL, signed_bytes_previous IN BLOB DEFAULT NULL);
パラメータ
表42-19 VERIFY_TABLE_BLOCKCHAINプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
bytes_latest |
GET_SIGNED_BLOCKCHAIN_DIGEST、GET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWS、GET_BLOCKCHAIN_DIGESTまたはGET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSのコールによって移入されたダイジェスト。
|
bytes_previous |
bytes_latestのBLOBが移入される前にGET_SIGNED_BLOCKCHAIN_DIGEST、GET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWS、GET_BLOCKCHAIN_DIGESTまたはGET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSのコールによって移入されたダイジェスト。
|
number_of_rows_verified |
検証済のブロックチェーン表内の行数。 |
verify_signature |
verify_signatureがTRUEの場合は、各行のハッシュと行のユーザー署名の両方が検証されます。 verify_signatureがFALSEの場合、ユーザー署名は検証されません。
|
verify_delegate_signature |
verify_delegate_signatureがTRUEの場合は、各行のハッシュと行の委任署名の両方が検証されます。 verify_delegate_signatureがFALSEの場合、委任署名は検証されません。
|
verify_countersignature |
verify_countersignatureがTRUEの場合は、各行のハッシュと行のカウンタ署名の両方が検証されます。 verify_countersignatureがFALSEの場合、カウンタ署名は検証されません。
|
signed_bytes_latest |
signed_bytes_latestは非推奨になりました。
|
signed_bytes_previous |
signed_bytes_previousは非推奨になりました。
|
使用上のノート
bytes_latestとbytes_previousのBLOBは、同じブロックチェーン表に関連付けられている必要があります。 GET_SIGNED_BLOCKCHAIN_DIGESTおよびGET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSの場合、関連するBLOBパラメータはsigned_bytesと呼ばれます。 GET_BLOCKCHAIN_DIGESTおよびGET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSの場合、関連するBLOBパラメータはdigest_bytesと呼ばれます。
42.3.19 VERIFY_USER_BLOCKCHAIN_ROWSプロシージャ
このプロシージャは、ユーザー・チェーン機能がブロックチェーン表に対して有効になっている場合に、1つ以上のユーザー・チェーンの行を検証します。
構文
DBMS_BLOCKCHAIN_TABLE.verify_user_blockchain_rows ( schema_name IN VARCHAR2, table_name IN VARCHAR2, row_version_name IN VARCHAR2, number_of_rows_verified OUT NUMBER, keycol1_value IN VARCHAR2 DEFAULT NULL, keycol2_value IN VARCHAR2 DEFAULT NULL, keycol3_value IN VARCHAR2 DEFAULT NULL, low_timestamp IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, high_timestamp IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, verify_signature IN BOOLEAN DEFAULT TRUE, verify_delegate_signature IN BOOLEAN DEFAULT TRUE, verify_countersignature IN BOOLEAN DEFAULT TRUE, pdb_guid IN RAW DEFAULT NULL);
パラメータ
表42-20 VERIFY_USER_BLOCKCHAIN_ROWSプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
row_version_name |
ブロックチェーン表の作成時に指定された行バージョンの名前。 |
number_of_rows_verified |
検証する行数。 |
keycol1_value |
キー列の値。 |
keycol2_value |
コンポジット・キーの第2列の値。 |
keycol3_value |
コンポジット・キーの第3列の値。 |
low_timestamp |
指定する場合は、行を検証するための時間範囲の下限。 デフォルト値はNULLです。
|
high_timestamp |
指定する場合は、行を検証するための時間範囲の上限。 デフォルト値はNULLです |
verify_signature |
verify_signatureがTRUEの場合は、各行のハッシュと行のユーザー署名の両方が検証されます。 verify_signatureがFALSEの場合、ユーザー署名は検証されません。
|
verify_delegate_signature |
verify_delegate_signatureがTRUEの場合は、各行のハッシュと行の委任署名の両方が検証されます。 verify_delegate_signatureがFALSEの場合、委任署名は検証されません。
|
verify_countersignature |
verify_countersignatureがTRUEの場合は、各行のハッシュと行のカウンタ署名の両方が検証されます。 verify_countersignatureがFALSEの場合、カウンタ署名は検証されません。
|
pdb_guid |
V2ブロックチェーン表の場合に |
使用上のノート
パラメータkeycol1_value、keycol2_valueおよびkeycol3_valueは、検証されるユーザー・チェーンの制限に使用できます。 これらのパラメータの3つすべてがNULLの場合、すべてのユーザー・チェーンが検証されます。 これらのパラメータの1つ以上がNULLでない場合は、non-NULLパラメータに一致するユーザー・チェーンのみが検証されます。