41 DBMS_BLOCKCHAIN_TABLE

ブロックチェーン表は、集中管理ブロックチェーン・アプリケーション向けに設計された追加専用の表です。DBMS_BLOCKCHAIN_TABLEパッケージを使用すると、次のような操作を実行できます。ブロックチェーン表に定義された行保存を超えるブロックチェーン表の行を削除します。行の暗号化ハッシュに入力されるバイトを取得して行のハッシュを検証できるようにします。行がブロックチェーン表内のチェーンに追加された後にブロックチェーン表に挿入した行に署名します。ブロックチェーン表の一部またはすべての行のハッシュおよびデジタル署名をデータベースで検証します。V2ブロックチェーン表は、V1ブロックチェーン表にある機能に加えて、スキーマの進化、委任署名および副署をサポートしています。ブロックチェーン表では、PEMエンコーディングではなく、DERエンコーディングのみがX.509証明書に対してサポートされます。

この章のトピックは、次のとおりです:

41.1 DBMS_BLOCKCHAIN_TABLEの概要

Oracleブロックチェーン表では、ピアは、データベースを信頼して改ざん防止元帳をメンテナンスするデータベース・ユーザーです。

元帳は、アプリケーションによって定義および管理されるブロックチェーン表として実装されます。既存のアプリケーションで、新しいインフラストラクチャやプログラミング・モデルを必要とせずに不正から保護できます。トランザクションのスループットは標準の表よりも低くなりますが、ブロックチェーン表のパフォーマンスは、分散ブロックチェーンの場合よりも優れています。

DBMS_BLOCKCHAIN_TABLEパッケージでは、次の操作を実行できます。
  • ブロックチェーン表で、ブロックチェーン表に定義されている行保存期間を超える行を削除する
  • 署名アルゴリズムに入力されたバイトを取得して、ブロックチェーン表に挿入した行に署名できるようにする
  • 行の暗号化ハッシュに入力されたバイトを取得して、行のハッシュを確認できるようにする
  • ブロックチェーン表のチェーンに行が追加された後に、ブロックチェーン表に挿入した行に署名する
  • ブロックチェーン表の一部または全部の行のハッシュおよび署名をデータベースで検証する
  • 別のユーザーが挿入した行に署名するための十分な権限を持つ代理人を有効にする
  • エンド・ユーザーまたは代理人によって署名されている行の副署を取得する

41.2 DBMS_BLOCKCHAIN_TABLEのセキュリティ・モデル

DBMS_BLOCKCHAIN_TABLEパッケージは、SYSによって所有され、データベース・インストールの一環としてインストールされます。このパッケージ内のルーチンは、実行者権限(現行のユーザーの権限)を使用して実行されます。したがって、ブロックチェーン表を選択する権限を持つユーザーは、その表の行コンテンツを検証できる必要があります。

ブロックチェーン表に対する削除権限を持つユーザーは、ブロックチェーン表に定義されている保存期間を超える行を削除できます。

ブロックチェーン表に行を挿入したユーザーは、その行がブロックチェーン表のチェーンに追加された後に、デジタル署名を行に追加できます。このユーザーは、行に署名するとき、または行がユーザーまたは委任によって署名された後で、この行に対する副署を保護できます。

ブロックチェーン表の行の代理署名者には表に対するSIGN権限が必要です。さらに、行の挿入時に代理人ユーザーのID番号を非表示列ORABCTAB_DELEGATE_USER_NUMBER$で指定できます。

ブロックチェーン表に対するSIGN権限を持つユーザーは、ユーザー署名または委任署名があるブロックチェーン表の任意の行に対する副署を保護できます。同様に、ブロックチェーン表の所有者は、ユーザー署名または委任署名があるブロックチェーン表の任意の行に対する副署を保護できます。

41.3 DBMS_BLOCKCHAIN_TABLEサブプログラムの要約

DBMS_BLOCKCHAIN_TABLEパッケージでは、ADD_INTERVAL_PARTITIONINGCOUNTERSIGN_ROWCOUNTERSIGN_ROW_SPECIFIED_BY_KEY_COLUMNSDELETE_EXPIRED_ROWSGET_BLOCKCHAIN_DIGESTGET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSGET_BYTES_FOR_ROW_HASHGET_BYTES_FOR_ROW_HASH_SPECIFIED_BY_KEY_COLUMNSGET_BYTES_FOR_ROW_SIGNATUREGET_BYTES_FOR_ROW_SIGNATURE_SPECIFIED_BY_KEY_COLUMNSGET_SIGNED_BLOCKCHAIN_DIGESTGET_SIGNED_BLOCKCHAIN_DIGEST_FOR SELECTED_ROWSSIGN_ROWSIGN_ROW_SPECIFIED_BY_KEY_COLUMNSSIGN_ROW_SPECIFIED_BY_KEY_COLUMNS_WITH_COUNTERSIGNATURESIGN_ROW_WITH_COUNTERSIGNATUREVERIFY_ROWSVERIFY_TABLE_BLOCKCHAINおよびVERIFY_USER_BLOCKCHAIN_ROWSの各サブプログラムを使用して様々なファンクションを実行します。

表41-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_bytessigned_row_indexesおよびschema_certificate_guidも戻されます。
GET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクション このファンクションは、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して、ブロックチェーン表内のユーザー指定行の署名付きダイジェストを生成して戻します。ダイジェスト内の特定の行は、row_selectorパラメータで指定されます。signed_bytessigned_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つ以上のユーザー・チェーンの行を検証します。

41.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); 

パラメータ

表41-2 ADD_INTERVAL_PARTITIONINGのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
interval_number データベースがブロックチェーン表のパーティションを作成する間隔を設定します。
interval_frequency

interval_numberに設定した値の頻度を設定します。サポートされている値は、YEARMONTHDAYHOURおよびMINUTEです。

first_high_timestamp

ブロックチェーン表の最初のパーティションの上限を決定するタイムスタンプ。

使用上のノート

  • パーティション化されていない既存のV1またはV2不変表では、同じ名前と同じパラメータを持つプロシージャがDBMS_IMMUTABLE_TABLEパッケージで提供されます。
  • コンポジット・パーティション化(つまり、サブパーティション化)は、前述の時間隔パーティション化ではサポートされていません。

41.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);

パラメータ

表41-3 COUNTERSIGN_ROWのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
instance_id

行を挿入したインスタンス。有効な値は、12などです。

chain_id 行を含むチェーン。デフォルトでは、各インスタンスに32個のチェーンがあり、0から31までの番号が付けられます。
sequence_id 指定したチェーンでの行の位置。
countersignature_algo 副署用のデジタル署名アルゴリズム。パラメータは、次のいずれかのパッケージ定数である必要があります。
  • SIGN_ALGO_RSA_SHA2_256
  • SIGN_ALGO_RSA_SHA2_384
  • SIGN_ALGO_RSA_SHA2_512
countersignature_signed_bytes 副署を生成するアルゴリズムに入力されるバイト。コール元は、このパラメータに空のBLOBを渡す必要があります。
countersignature countersignature_signed_bytesで返されるバイトのデジタル署名。
countersignature_certificate_guid データベースに格納されているブロックチェーン表所有者の証明書の一意の識別子で、副署を検証するために使用できます。
countersignature_content_version 副署アルゴリズムへの入力として使用されるデータ・コンテンツおよびレイアウトのバージョン。このリリースでは、'V2_DIGEST'のみがサポートされています。
pdb_guid ローカル・プラガブル・データベースの識別子。このパラメータはOracle GoldenGateレプリケーションで使用され、NULLである必要があります。

41.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);

パラメータ

表41-4 COUNTERSIGN_ROW_SPECIFIED_BY_KEY_COLUMNSプロシージャのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
keycol1_name キー列の名前。
keycol1_value キー列の値。
keycol2_name コンポジット・キーの第2列の名前。
keycol2_value コンポジット・キーの第2列の値。
keycol3_name コンポジット・キーの第3列の名前。
keycol3_value コンポジット・キーの第3列の値。
countersignature_algo 副署用のデジタル署名アルゴリズム。パラメータは、次のいずれかのパッケージ定数である必要があります。
  • SIGN_ALGO_RSA_SHA2_256
  • SIGN_ALGO_RSA_SHA2_384
  • SIGN_ALGO_RSA_SHA2_512
countersignature_signed_bytes 副署を生成するアルゴリズムに入力されるバイト。コール元は、このパラメータに空のBLOBを渡す必要があります。
countersignature countersignature_signed_bytesで返されるバイトのデジタル署名。
countersignature_certificate_guid データベースに格納されているブロックチェーン表所有者の証明書の一意の識別子で、副署を検証するために使用できます。
countersignature_content_version 副署アルゴリズムへの入力として使用されるデータ・コンテンツおよびレイアウトのバージョン。このリリースでは、'V2_DIGEST'のみがサポートされています。
pdb_guid ローカル・プラガブル・データベースの識別子。このパラメータはOracle GoldenGateレプリケーションで使用され、NULLである必要があります。

41.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);

パラメータ

表41-5 DELETE_EXPIRED_ROWSプロシージャのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
before_timestamp

プロシージャによって削除される行の範囲の終了時間(ブロックチェーン表に現在関連付けられている行保存期間の対象となります)。これはオプションのパラメータです。デフォルト値はNULLです。

number_of_rows_deleted 削除された行の数。

41.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;

パラメータ

表41-6 GET_BLOCKCHAIN_DIGESTファンクションのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
digest_bytes ヘッダーの後に行情報の配列が続くBLOB値。この一連のバイトは、暗号化ハッシュ関数に入力されます。コール元は、このパラメータに空のBLOBを渡す必要があります。
digest_rows_indexes このパラメータは、ダイジェストに選択されたブロックチェーン表の行を指定します。
hash_algo 使用する暗号化ハッシュ・アルゴリズム。パラメータは、次のいずれかのパッケージ定数である必要があります。
  • HASH_ALGO_SHA2_256
  • HASH_ALGO_SHA2_384
  • HASH_ALGO_SHA2_512

使用上のノート

  • GET_BLOCKCHAIN_DIGESTファンクションで作成されたブロックチェーン表ダイジェストには、プラガブル・データベース固有の表情報が含まれます。このようなダイジェストは、そのダイジェストが作成されたプラガブル・データベースでのみ、およびそのダイジェストの作成に使用された表についてのみ使用できます。DBMS_BLOCKCHAIN_TABLE.VERIFY_TABLE_BLOCKCHAINの場合、これらの要件は、両方のブロックチェーン表ダイジェストが、同じブロックチェーン表について、現在のプラガブル・データベース内に生成されている必要があることを意味します。

    たとえば、プラガブル・データベースAでブロックチェーン表のダイジェストを作成し、データ・ポンプを使用してそのブロックチェーン表をエクスポートし、データ・ポンプを使用してそのブロックチェーン表をプラガブル・データベースBにインポートするとします。プラガブル・データベースAで作成されたブロックチェーン表ダイジェストは、プラガブル・データベースBでは使用できません。プラガブル・データベースBで新しいブロックチェーン表ダイジェストを作成する必要があります。

41.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;

パラメータ

表41-7 GET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクションのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
row_selector WHEREキーワードのないwhere句の条件。
digest_bytes ヘッダーの後に行情報の配列が続くBLOB値。この一連のバイトは、暗号化ハッシュ関数に入力されます。コール元は、このパラメータに空のBLOBを渡す必要があります。
row_data_bytes このパラメータは、ダイジェストに選択されたブロックチェーン表の行の内容を指定します。コール元は、このパラメータに空のBLOBを渡す必要があります。
digest_rows_indexes このパラメータは、ダイジェストに選択されたブロックチェーン表の行を指定します。
hash_algo 使用する暗号化ハッシュ・アルゴリズム。パラメータは、次のいずれかのパッケージ定数である必要があります。
  • HASH_ALGO_SHA2_256
  • HASH_ALGO_SHA2_384
  • HASH_ALGO_SHA2_512

使用上のノート

  • GET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクションで作成されたブロックチェーン表ダイジェストには、プラガブル・データベース固有の表情報が含まれます。このようなダイジェストは、そのダイジェストが作成されたプラガブル・データベースでのみ、およびそのダイジェストの作成に使用された表についてのみ使用できます。DBMS_BLOCKCHAIN_TABLE.VERIFY_TABLE_BLOCKCHAINの場合、これらの要件は、両方のブロックチェーン表ダイジェストが、同じブロックチェーン表について、現在のプラガブル・データベース内に生成されている必要があることを意味します。

    たとえば、プラガブル・データベースAでブロックチェーン表のダイジェストを作成し、データ・ポンプを使用してそのブロックチェーン表をエクスポートし、データ・ポンプを使用してそのブロックチェーン表をプラガブル・データベースBにインポートするとします。プラガブル・データベースAで作成されたブロックチェーン表ダイジェストは、プラガブル・データベースBでは使用できません。プラガブル・データベースBで新しいブロックチェーン表ダイジェストを作成する必要があります。

41.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);

パラメータ

表41-8 GET_BYTES_FOR_ROW_HASHプロシージャのパラメータ

パラメータ 説明
schema_name スキーマの名前。
table_name ブロックチェーン表の名前。
instance_id

行を挿入したインスタンス。有効な値は、12などです。

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管理者ガイドを参照してください

41.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);

パラメータ

表41-9 GET_BYTES_FOR_ROW_HASH_SPECIFIED_BY_KEY_COLUMNSのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
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である必要があります。

41.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');

パラメータ

表41-10 GET_BYTES_FOR_ROW_SIGNATUREプロシージャのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
instance_id

行が挿入されたインスタンス。有効な値は、12などです。

chain_id

行が挿入されたチェーン。デフォルトでは、各インスタンスに32個のチェーンがあり、0から31までの番号が付けられます。

sequence_id チェーンでの行の位置。
data_format row_data内のデータの書式。このリリースでは、1にする必要があります。
row_data 署名が必要な一連のバイト。コール元は、このパラメータに空のBLOBを渡す必要があります。
pdb_guid V2ブロックチェーン表の場合は、行を挿入したプラガブル・データベースの識別子。V1ブロックチェーン表の場合は、NULLである必要があります。
signature_type signature_typeの有効な値は、USERDELEGATEおよびCOUNTERSIGNATUREです。DELEGATEUSERは同じ意味で使用できます。

41.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');

パラメータ

表41-11 GET_BYTES_FOR_ROW_SIGNATURE_SPECIFIED_BY_KEY_COLUMNSプロシージャのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
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の有効な値は、USERDELEGATEおよびCOUNTERSIGNATUREです。DELEGATEUSERは同じ意味で使用できます。

41.3.11 GET_SIGNED_BLOCKCHAIN_DIGESTファンクション

このファンクションは、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して、指定されたブロックチェーン表に署名付きダイジェストを生成して戻します。signed_bytessigned_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;

パラメータ

表41-12 GET_SIGNED_BLOCKCHAIN_DIGESTファンクションのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
signed_bytes ヘッダーの後に行情報の配列が続くBLOB値。この一連のバイトは、デジタル署名されたダイジェストです。コール元は、このパラメータに空のBLOBを渡す必要があります。
signed_rows_indexes このパラメータは、デジタル署名されたブロックチェーン表の行を指定します。
schema_certificate_guid データベースに格納されているブロックチェーン表所有者の証明書の一意の識別子で、デジタル署名を検証するために使用できます。
signature_algo 使用するデジタル署名アルゴリズム。パラメータは、次のいずれかのパッケージ定数である必要があります。
  • SIGN_ALGO_RSA_SHA2_256
  • SIGN_ALGO_RSA_SHA2_384
  • SIGN_ALGO_RSA_SHA2_512

使用上のノート

  • データベースでは、ブロックチェーン表の所有者の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サブディレクトリは、ウォレットを使用するデータベース・コンポーネントの名前です。ブロックチェーン表の名前ではありません。

41.3.12 GET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクション

このファンクションは、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して、ブロックチェーン表内のユーザー指定行の署名付きダイジェストを生成して戻します。ダイジェスト内の特定の行は、row_selectorパラメータで指定されます。signed_bytessigned_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;

パラメータ

表41-13 GET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSファンクションのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
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パッケージに定義されている次の定数のいずれかである必要があります。
  • SIGN_ALGO_RSA_SHA2_256
  • SIGN_ALGO_RSA_SHA2_384
  • SIGN_ALGO_RSA_SHA2_512

使用上のノート

  • データベースでは、ブロックチェーン表の所有者の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サブディレクトリは、ウォレットを使用するデータベース・コンポーネントの名前です。ブロックチェーン表の名前ではありません。

41.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);

パラメータ

表41-14 SIGN_ROWプロシージャのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
instance_id 行が挿入されたインスタンス。
chain_id

署名対象となる行を含むチェーン。各インスタンスに32個のチェーンがあり、0から31までの番号が付けられます。

sequence_id

チェーンでの行の位置。

有効な値は、12などです。

hash non-NULLの場合は、署名対象となる行のハッシュの予測値。NULLの場合は、署名対象となる行のハッシュはチェックされません。
signature 行に格納されているハッシュ値に対するユーザーのデジタル署名。
certificate_guid デジタル署名の検証に使用されるデータベースに格納された証明書の一意の識別子。
signature_algo デジタル署名の作成に使用されるアルゴリズム。アルゴリズムは、DBMS_BLOCKCHAIN_TABLEパッケージに定義されている次の定数のいずれかである必要があります。
  • SIGN_ALGO_RSA_SHA2_256
  • SIGN_ALGO_RSA_SHA2_384
  • SIGN_ALGO_RSA_SHA2_512
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で例外が発生します。したがって、データ・ポンプを使用してブロックチェーン表のコピーを作成する前に、署名する必要があるブロックチェーン表のすべての行に署名する必要があります。

41.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);  

パラメータ

表41-15 SIGN_ROW_SPECIFIED_BY_KEY_COLUMNSプロシージャのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
hash non-NULLの場合は、署名対象となる行のハッシュの予測値。NULLの場合は、署名対象となる行のハッシュはチェックされません。
signature 行に格納されているハッシュ値に対するユーザーのデジタル署名。
certificate_guid デジタル署名の検証に使用されるデータベースに格納された証明書の一意の識別子。
signature_algo デジタル署名の作成に使用されるアルゴリズム。アルゴリズムは、DBMS_BLOCKCHAIN_TABLEパッケージに定義されている次の定数のいずれかである必要があります。
  • SIGN_ALGO_RSA_SHA2_256
  • SIGN_ALGO_RSA_SHA2_384
  • SIGN_ALGO_RSA_SHA2_512
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_valuekeycol2_valueおよびkeycol3_valueに使用できるのは、non-NULL値のみです。keycol2_valueまたはkeycol3_valueNULL値が指定されている場合、対応するパラメータkeycol2_nameまたはkeycol3_nameNULLである必要があります。その他の組合せでは例外が発生します。

41.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); 

パラメータ

表41-16 SIGN_ROW_SPECIFIED_BY_KEY_COLUMNS_WITH_COUNTERSIGNATUREプロシージャのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
hash non-NULLの場合は、署名対象となる行のハッシュの予測値。NULLの場合は、署名対象となる行のハッシュはチェックされません
signature 行に格納されているハッシュ値に対するユーザーのデジタル署名。
certificate_guid デジタル署名の検証に使用されるデータベースに格納された証明書の一意の識別子。
signature_algo デジタル署名の作成に使用されるアルゴリズム。アルゴリズムは、DBMS_BLOCKCHAIN_TABLEパッケージに定義されている次の定数のいずれかである必要があります。
  • SIGN_ALGO_RSA_SHA2_256
  • SIGN_ALGO_RSA_SHA2_384
  • SIGN_ALGO_RSA_SHA2_512
delegate TRUEの場合、行は代理人によって署名されます。FALSEの場合、行は行を挿入したユーザーによって署名されます。
keycol1_name キー列の名前。
keycol1_value キー列の値。
keycol2_name コンポジット・キーの第2列の名前。
keycol2_value コンポジット・キーの第2列の値。
keycol3_name コンポジット・キーの第3列の名前。
keycol3_value コンポジット・キーの第3列の値。
countersignature_algo 副署用のデジタル署名アルゴリズム。パラメータは、次のいずれかのパッケージ定数である必要があります。
  • SIGN_ALGO_RSA_SHA2_256
  • SIGN_ALGO_RSA_SHA2_384
  • SIGN_ALGO_RSA_SHA2_512
countersignature_signed_bytes 副署を生成するアルゴリズムに入力されるバイト。コール元は、このパラメータに空のBLOBを渡す必要があります。
countersignature countersignature_signed_bytesで返されるバイトのデジタル署名。
countersignature_certificate_guid データベースに格納されているブロックチェーン表所有者の証明書の一意の識別子で、副署を検証するために使用できます。
countersignature_content_version 副署アルゴリズムへの入力として使用されるデータ・コンテンツおよびレイアウトのバージョン。このリリースでは、'V2_DIGEST'のみがサポートされています。
pdb_guid ローカル・プラガブル・データベースの識別子。このパラメータはOracle GoldenGateレプリケーションで使用され、NULLである必要があります。

41.3.16 SIGN_ROW_WITH_COUNTERSIGNATUREプロシージャ

SIGN_ROWの拡張で、ユーザーがデータベースに副署を要求できるようにします。副署は、データベース・ウォレットに格納されている表の所有者の秘密キーを使用して行データ・コンテンツに署名することによって生成されます。ブロックチェーン表の行に副署できるのは、その行がブロックチェーン表の現在のエポックに属している場合のみです。

構文

delegateTRUEの場合、副署をリクエストしている代理人ユーザーになります。

副署は、計算に使用された符号付きバイトを再計算するために必要なすべてのメタ情報とともに、行に格納されます。

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);    

パラメータ

表41-17 SIGN_ROW_WITH_COUNTERSIGNATUREプロシージャのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
table_name ブロックチェーン表の名前。
instance_id 行が挿入されたインスタンス。
chain_id

署名対象となる行を含むチェーン。デフォルトでは、各インスタンスに32個のチェーンがあり、0から31までの番号が付けられます。

sequence_id

チェーンでの行の位置。有効な値は、12などです。

hash non-NULLの場合は、署名対象となる行のハッシュの予測値。NULLの場合は、署名対象となる行のハッシュはチェックされません。
signature 行に格納されているハッシュ値に対するユーザーのデジタル署名。
certificate_guid デジタル署名の検証に使用されるデータベースに格納された証明書の一意の識別子。
signature_algo デジタル署名の作成に使用されるアルゴリズム。アルゴリズムは、DBMS_BLOCKCHAIN_TABLEパッケージに定義されている次の定数のいずれかである必要があります。
  • SIGN_ALGO_RSA_SHA2_256
  • SIGN_ALGO_RSA_SHA2_384
  • SIGN_ALGO_RSA_SHA2_512
delegate TRUEの場合、行は代理人によって署名されます。FALSEの場合、行は行を挿入したユーザーによって署名されます。
countersignature_algo 副署用のデジタル署名アルゴリズム。パラメータは、次のいずれかのパッケージ定数である必要があります。
  • SIGN_ALGO_RSA_SHA2_256
  • SIGN_ALGO_RSA_SHA2_384
  • SIGN_ALGO_RSA_SHA2_512
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を使用して署名したり副署を取得するエンド・ユーザーまたは代理人は、副署を取得するための追加権限は必要ありません。

41.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);

パラメータ

表41-18 VERIFY_ROWSプロシージャのパラメータ

パラメータ 説明
schema_name スキーマの名前。
table_name ブロックチェーン表の名前。
low_timestamp

指定する場合は、行を検証するための時間範囲の下限。デフォルト値はNULLです。

high_timestamp

指定する場合は、行を検証するための時間範囲の上限。デフォルト値はNULLです。

instance_id 指定した場合、指定したインスタンスに挿入された行に行の検証が制限されます。
chain_id 指定した場合、指定したチェーンの行に行の検証が制限されます。デフォルトでは、各インスタンスに32個のチェーンがあり、0から31までの番号が付けられます。
number_of_rows_verified 検証する行数。
verify_signature

verify_signatureTRUEの場合は、各行のハッシュと行のユーザー署名の両方が検証されます。verify_signatureFALSEの場合、ユーザー署名は検証されません。

verify_delegate_signature

verify_delegate_signatureTRUEの場合は、各行のハッシュと行の委任署名の両方が検証されます。verify_delegate_signatureFALSEの場合、委任署名は検証されません。

verify_countersignature

verify_countersignatureTRUEの場合は、各行のハッシュと行のカウンタ署名の両方が検証されます。verify_countersignatureFALSEの場合、カウンタ署名は検証されません。

pdb_guid V2ブロックチェーン表の場合にNULLでない場合、指定されたプラガブル・データベースによって挿入されたシステム・チェーンへの注意が制限されます。V1ブロックチェーン表の場合は、NULLである必要があります。

使用上のノート

  • schema_nameおよびtable_nameは必須入力パラメータです。
  • その他の入力パラメータはすべてオプションですが、次の例外があります。
    • chain_idを指定した場合は、instance_idを指定する必要があります
  • instance_idの有効な値は12、…などです。
  • instance_idchain_idのいずれも指定されない場合は、すべてのチェーンを意味します。instance_idのみが指定されている場合は、そのインスタンスのすべてのチェーンを意味します。両方を指定した場合は、組合せで指定された特定のチェーンを意味します。
  • low_timestamphigh_timestampの両方を指定する場合、high_timestamplow_timestampより後である必要があります。

    low_timestampを指定しない場合、範囲は、ブロックチェーン表内の最も古い行からhigh_timestampまでです。

    high_timestampを指定しない場合、範囲は、low_timestampから表に最後に挿入された行のタイムスタンプまでです。

41.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);

パラメータ

表41-19 VERIFY_TABLE_BLOCKCHAINプロシージャのパラメータ

パラメータ 説明
bytes_latest GET_SIGNED_BLOCKCHAIN_DIGESTGET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSGET_BLOCKCHAIN_DIGESTまたはGET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSのコールによって移入されたダイジェスト。
bytes_previous bytes_latestのBLOBが移入される前にGET_SIGNED_BLOCKCHAIN_DIGESTGET_SIGNED_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSGET_BLOCKCHAIN_DIGESTまたはGET_BLOCKCHAIN_DIGEST_FOR_SELECTED_ROWSのコールによって移入されたダイジェスト。
number_of_rows_verified 検証済のブロックチェーン表内の行数。
verify_signature verify_signatureTRUEの場合は、各行のハッシュと行のユーザー署名の両方が検証されます。verify_signatureFALSEの場合、ユーザー署名は検証されません。
verify_delegate_signature verify_delegate_signatureTRUEの場合は、各行のハッシュと行の委任署名の両方が検証されます。verify_delegate_signatureFALSEの場合、委任署名は検証されません。
verify_countersignature verify_countersignatureTRUEの場合は、各行のハッシュと行のカウンタ署名の両方が検証されます。verify_countersignatureFALSEの場合、カウンタ署名は検証されません。
signed_bytes_latest signed_bytes_latestは非推奨になりました。
signed_bytes_previous signed_bytes_previousは非推奨になりました。

使用上のノート

bytes_latestbytes_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と呼ばれます。

41.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);

パラメータ

表41-20 VERIFY_USER_BLOCKCHAIN_ROWSプロシージャのパラメータ

パラメータ 説明

schema_name

スキーマの名前。
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_signatureTRUEの場合は、各行のハッシュと行のユーザー署名の両方が検証されます。verify_signatureFALSEの場合、ユーザー署名は検証されません。
verify_delegate_signature verify_delegate_signatureTRUEの場合は、各行のハッシュと行の委任署名の両方が検証されます。verify_delegate_signatureFALSEの場合、委任署名は検証されません。
verify_countersignature verify_countersignatureTRUEの場合は、各行のハッシュと行のカウンタ署名の両方が検証されます。verify_countersignatureFALSEの場合、カウンタ署名は検証されません。
pdb_guid

V2ブロックチェーン表の場合にNULLでない場合、指定されたプラガブル・データベースによって挿入されたユーザー・チェーンへの注意が制限されます。V1ブロックチェーン表の場合は、NULLである必要があります。

使用上のノート

パラメータkeycol1_valuekeycol2_valueおよびkeycol3_valueは、検証されるユーザー・チェーンの制限に使用できます。これらのパラメータの3つすべてがNULLの場合、すべてのユーザー・チェーンが検証されます。これらのパラメータの1つ以上がNULLでない場合は、non-NULLパラメータに一致するユーザー・チェーンのみが検証されます。