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_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
の各サブプログラムを使用して様々なファンクションを実行します。
表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_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つ以上のユーザー・チェーンの行を検証します。 |
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のパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
interval_number |
データベースがブロックチェーン表のパーティションを作成する間隔を設定します。 |
interval_frequency |
|
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のパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
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 である必要があります。
|
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
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 である必要があります。
|
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
table_name |
ブロックチェーン表の名前。 |
before_timestamp |
プロシージャによって削除される行の範囲の終了時間(ブロックチェーン表に現在関連付けられている行保存期間の対象となります)。これはオプションのパラメータです。デフォルト値は |
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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
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で新しいブロックチェーン表ダイジェストを作成する必要があります。
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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
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で新しいブロックチェーン表ダイジェストを作成する必要があります。
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 |
行を挿入したインスタンス。有効な値は、 |
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のパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
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 は同じ意味で使用できます。
|
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
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 は同じ意味で使用できます。
|
41.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;
パラメータ
表41-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
サブディレクトリは、ウォレットを使用するデータベース・コンポーネントの名前です。ブロックチェーン表の名前ではありません。
41.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;
パラメータ
表41-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
サブディレクトリは、ウォレットを使用するデータベース・コンポーネントの名前です。ブロックチェーン表の名前ではありません。
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
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が
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
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
である必要があります。その他の組合せでは例外が発生します。
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
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 である必要があります。
|
41.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);
パラメータ
表41-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
を使用して署名したり副署を取得するエンド・ユーザーまたは代理人は、副署を取得するための追加権限は必要ありません。
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 |
指定する場合は、行を検証するための時間範囲の下限。デフォルト値は |
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
から表に最後に挿入された行のタイムスタンプまでです。
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_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
と呼ばれます。
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
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
パラメータに一致するユーザー・チェーンのみが検証されます。