Save 37% off PRO during our Black Friday Sale! »

Oracle Blockchain tableのご紹介

Oracle Blockchain tableのご紹介

Oracle Databaseの機能である、「Oracle Blockchain table」のご紹介です。機能とユースケース、実際のサンプルスクリプトをご紹介しています。

140494d272a4d89883a94fdfdb29dea2?s=128

oracle4engineer
PRO

October 04, 2021
Tweet

Transcript

  1. Oracle Database Blockchain Table概要 2021/10/04 ⽇本オラクル株式会社 テクノロジー事業戦略統括

  2. Oracle Database Blockchain Table概要 Copyright © 2021, Oracle and/or its

    affiliates 2
  3. 耐改ざん性を追加、監査性を強化した特別なデータベース・テーブル データベース上のレコードに耐改ざん性と監査性を付与 • 追記オンリーの不変なデータ…テーブル所有者も特権ユーザも改ざん不能 • ハッシュチェーンで⾏をリンク…整合性の検証、改ざんされていないことの証明が可能 Oracle Databaseの⼀部として⾼度で多彩な機能とともに容易に利⽤可能 • 他のテーブルと組み合わせたトランザクション

    • 容易にデータ統合、多様なBIツールを⽤いての分析 • データベーストリガー、PL/SQLプログラムを利⽤したロジック表現 • レプリケーション、バックアップなどの耐障害性/⾼可⽤性機能、 アクセスコントロールなどのセキュリティ保護機能も併⽤可能 ※19cではRU19.11アップデートを適⽤することで利⽤可能に。 データベースの基本機能として含まれており追加ライセンスは不要(SE2でも利⽤可能)。 Blockchain Table︓Oracle Database 21c&19cで利⽤可能(※) Copyright © 2021, Oracle and/or its affiliates 3
  4. 情報の真正性の担保=確実な保管と監査、証明を⼤幅にシンプル化 Blockchain Tableを⽤いることで… 情報の 確実な保管 監査と証明 認証設計、アクセス制御、監査ログ、etc... 様々な情報を収集し、突き合わせて整合性を確認 複雑で⼿間のかかる監査プロセス データベースに情報を保存しつつ、

    耐改ざん性のために紙原本や別媒体での記録 →記録、保管に余分なコスト Blockchain Tableに保存し、 データ活⽤の利便性と耐改ざん性を両⽴ Blockchain Tableで完結した検証可能性により 監査、証明が容易 Copyright © 2021, Oracle and/or its affiliates 4
  5. • すぐに、簡単に使える • 耐改ざん性と監査性の課題をシンプルに、最低限のコストだけで解決 • アプリケーションの改修はゼロ〜最⼩限、学習コストも極⼩ • ピンポイントソリューション • 他の箇所に影響を与えることなく、データベースの⼀部分、アプリケーションの⼀部分のみにセキュリティ

    向上を適⽤可能 • 参照、分析、データ統合、BIツール等は通常テーブルと同様にそのまま使える • どこでも利⽤可能 • クラウドでもオンプレミスでも利⽤可能 • 追加ライセンス不要︓データベースのすべてのエディションで利⽤可能 Blockchain Tableの特⻑ Copyright © 2021, Oracle and/or its affiliates 5
  6. Blockchain Table: 主なユースケース Copyright © 2021, Oracle and/or its affiliates

    6 内外からの攻撃に対してデータを保護 ・勘定系システム、決済系システムなどのトランザクションログ ・証券や各種アセットの所有権を管理する原簿 セキュリティ上重要な記録の保存 ・アプリケーションのアクセスログや監査ログ ・⾼セキュリティエリアへの⼊退室記録 種々の認定、証明のエビデンス、法律上確実な保存が要求される情報 ・従業員の出退勤記録、企業の会計、財務のデータ ・⾒積、契約、請求や⽀払のやり取りに係るドキュメント ・原産地証明、検査証、品質認証、RE100証明、CO2排出量証明など
  7. Blockchain Tableのご利⽤事例 GDPR関連データへのアクセスなど、 銀⾏の法的に重要な業務について のレポートおよび監査ログを Blockchain Tableに保存 管理ワークフロー(申請、確認、 データ暗号化)の法的な記録を⾼ い監査性で保持できるように

    コーポレート・ガバナンスに係るワークフ ローの作業をBlockchain Tableに記 録して追跡可能にすることで、信頼性、 不変性を担保し、また、証書を発⾏ ドキュメントへのデジタル印の⽣成を可 能に︓ • ドキュメントの初版 • ドキュメントのレビュー • 承認ワークフロー 等 匿名化された(ある距離内/持続時間 以上の)接触の記録をBlockchain Tableに保管 アプリユーザーがCOVID19陽性となった 場合には、X-RINGのボタンを押すことで、 濃厚接触した可能性があるすべてのユー ザーに警告通知を送ることができる スマートコンプライアンス 法律×テクノロジー 接触追跡ソリューション Copyright © 2021, Oracle and/or its affiliates 7
  8. ⽂書の確実な保存とその証明 • SaaSの”スキマ”にピンポイントで適⽤ • APEXを活⽤し短期間、低コストで開発 • ペーパーレス化による、脱はんこ、 リモートワーク対応⼒向上 電⼦帳簿保存法の改正対応 •

    2022年1⽉施⾏開始 • 改正による要件緩和で、 システム⾒直しとコスト削減のチャンス • ERPの補助システムや、 パートナー様のソリューションの⼀部として 品質検査や製造履歴の改ざん対策 • 製造業を中⼼とした、品質情報の改ざん 対策 • 品質情報や製造履歴に関わる、 内部不正を防⽌し、真正性を証明 • 複合的な対策の⼀部として活⽤ ESG関連情報の保存 • 関連する情報は、より厳しい⽔準の管理 が要求されていく • 改ざんを防ぎつつ、外部に証明しやすい 形式で確実に保存 • 紛争鉱物などの法規制対応、SCOPE3 対応の⼆酸化炭素排出量管理、 原材料や含有物質管理 Blockchain Table×旬な領域 Copyright © 2021, Oracle and/or its affiliates 8
  9. ⽂書の内容および履歴をBlockchain Tableで保持することで、真正性を担保し監査性も向上 Blockchain TableはOracle Databaseのテーブルなので︓ • ドキュメントファイルそのものを登録可能 (WORD、EXCEL、PDF、画像形式など) • 登録したドキュメントの中⾝の⽂章も検索可能

    (Oracle Textによる全⽂検索) ⽂書に付随する履歴も併せて保存可能︓ • 修正、更新に伴う複数のバージョンを保存 • 申請〜承認のようなワークフローの操作履歴を保存 監査も容易に︓ • 保存されて以降不変な内容、登録⽇時、履歴をチェック • 整合性検証機能を利⽤することで改ざんされていないことを容易 に確認、証明可能 Blockchain Table応⽤例︓ ⽂書の確実な保存とその証明 Copyright © 2021, Oracle and/or its affiliates 9 A部⾨ B部⾨ C部⾨ 作成 更新 承認 監査 履歴情報 ⽂書内容
  10. 電⼦取引保存およびスキャナ保存の要件を満たしたシステムを短期間、低コストでシンプルに構築 電⼦取引保存 • 真実性の要件︓Blockchain Tableの耐改ざん性を活かし、記録事項の訂 正・削除をできないようにする、あるいは訂正・削除の履歴を確実に保存し確 認可能に • 可視性の要件︓検索機能も容易に実装可能 スキャナ保存

    • 「電磁的記録について訂正⼜は削除を⾏った場合に、これらの事実及び内容 を確認することができる」 「⼊⼒期間内にその電磁的記録の保存を⾏ったことを確認することができる」 の条件を満たすシステムを開発することで、原本保存を廃⽌(ペーパーレス) &タイムスタンプサービスを利⽤したタイムスタンプ付与が不要に 既存ERPの補助システムとして開発・利⽤ • 上記について必要となる範囲でピンポイントに実装し、監査を含めた追加・変 更オペレーションも最⼩限に • データベースに含まれるOracle APEX機能を活⽤することで、UIも簡易に開 発・運⽤が可能 Blockchain Table応⽤例︓ 改正電⼦帳簿保存法への対応に活⽤ Copyright © 2021, Oracle and/or its affiliates スキャナ保存 電⼦取引 ERP Blockchain Tableにも保存 APEX 10
  11. 品質情報に関わる内部の不正を防⽌し、真正性を証明 Blockchain Table応⽤例︓ 品質検査結果データへの耐改ざん性付与および外部証明 検査装置 2.データの分析、検索 1.検査結果ファイル、ファイルのハッシュ、検査値を、 耐改ざん性の⾼いBlockchain Tableに登録 5.

    外部に開⽰したドキュメントの真正性を 証明するためには、別途の仕組みの検討が必要 例)ハッシュ値をブロックチェーン上で共有 4.品質証明書を取引先に開⽰ 取引先 3.品質証明書を作成、 Blockchain Tableに登録 Copyright © 2021, Oracle and/or its affiliates 11
  12. 求められる「データの正当性」、「詳細かつリアルタイムでの可視化」、「データドリブンなアクションと経営判断」 Blockchain Table応⽤例︓ 脱炭素社会への取り組みの信頼できるデータ基盤に利⽤ 12 CO2排出量DB 可視化 予測 アクション Copyright

    © 2021, Oracle and/or its affiliates | CO2排出量DB CO2排出量、品質検査/品質認証、RE100証明、原産地証明 などへの展開 1.⾃社の稼働実績に基づいた CO2排出量を算出、集約 2.集約されたCO2排出量を可視化、 詳細な改善アクションへ 4.LCAでの排出量正当性のため、 他社企業とのデータ開⽰、 ユーザー使⽤の排出把握 3.CO2排出量の正当性証明のため 取引先、投資家、監査機関へ共有 ⾃社 他社 取引先、投資家、 監査機関
  13. ⽂書ファイルの保存、参照、管理のBlockchain Table+APEXでの容易な実現を体験 Blockchain Tableのふたつの特性―耐改ざん性と監査性―を、⽂書ファイルの管理 のシナリオを通じて体験いただくためのサンプルアプリケーションです。 • WORD、PDF、Excel、テキストなど任意の形式の⽂書ファイルをBlockchain Tableに 保存(アップロード)し、⽂書の検索や参照(ダウンロード)が可能です。 •

    Blockchain Tableの持つ耐改ざん性、監査性を体験するための機能も備えています。 データベース上で迅速、容易にアプリケーションを開発し、稼働させるためのツールである Oracle APEXを利⽤しています。 • アプリケーションサーバーの⽤意は不要で、Oracle Databaseのみでサンプルアプリケー ションの利⽤が可能です。 • インストール〜セットアップは最速数分程度で完了し、すぐにトライ可能です。 詳細、ダウンロードはこちら︓https://oracle- japan.github.io/ocidocs/solutions/blockchain/blockchain-table- document-sample/ サンプルアプリケーション︓Blockchain Tableでの⽂書管理 Copyright © 2021, Oracle and/or its affiliates APEX 13
  14. Oracle Database Blockchain Table の技術的な仕様と参考情報 Copyright © 2021, Oracle and/or

    its affiliates 17
  15. 追記オンリーのテーブルで、イミュータブル/不変なデータを保持 • ⾏のDELETEの制約(前述の通りn⽇〜無制限の保持期間を設定可能) • データ量を削減したい場合、適切な保持期間を設定しておいたうえで、 保持期間を過ぎた⾏を整合性を検証した上で(必要に応じて外部にアーカイブしつつ)削除する • 保持期間を過ぎた⾏の⼀括削除⽤PL/SQLパッケージファンクション DBMS_BLOCKCHAIN_TABLE.delete_expired_rows() •

    ⾏のUPDATEとMERGEが不可 • テーブルのDROPの制約(前述の通りn⽇〜無制限の保護期間を設定可能) • テーブルDROPは⾏のINSERT前なら常に可能(誤ってテーブル作成した場合すぐなら消せる) • テーブルのTRUNCATEが不可 • カラムの追加、削除および名前変更が不可 • データ型の変更や⼀部の⻑さ、精度の変更、NULL制約変更も不可 • Blockchain Tableの通常のテーブルへの変換、およびその逆の変換は不可 • パーティションのDROPが不可 Blockchain Tableの特性①︓データの削除、変更を制約 Copyright © 2021, Oracle and/or its affiliates 18
  16. ハッシュ値によるデータの検証可能性により、テーブルの中で完結した監査性を提供 Blockchain Tableの特性②︓ハッシュチェーン • ⾏のINSERT時、⾃動的に {⾏データ+前の⾏のハッシュ値} に対して計算したハッシュ値を隠しカラムに保持 • ある⾏のハッシュ値はその前の⾏のハッシュ値に依存し、その前 の⾏のハッシュ値はその前の前の⾏のハッシュ値に依存し…

    →ハッシュチェーンのつながりで改ざんが検知可能に • ハッシュチェーンと⾏データを突合しながら辿っていくことで、整合 性(INSERT以降、⾏データが変更、削除されていないこと) の検証が可能 • 検証⽤PL/SQLパッケージファンクション DBMS_BLOCKCHAIN_TABLE.verify_rows() ID User Value 1 Tom 500 2 Carol 176 3 Steve 500 4 John 176 5 Mike 332 6 Sarah 632 7 Eve 25 8 Prisha 850 Hash ADSJS %SHS SH@1 DHD3 *EGG AH11 LIO$ SHS4 Copyright © 2021, Oracle and/or its affiliates 19
  17. Q. データが削除不能なら容量がずっと積み上がり続け るのでは︖不要になっても消せない︖ A. 古いデータを破棄できるようにする設定も可能です。 ・⾏レベル︓登録後、指定の⽇数過ぎた⾏は削除が可 能になる ・テーブルレベル︓指定の⽇数新たなデータが登録されな い場合、テーブルの削除が可能になる いずれのレベルの設定もテーブル作成時に定義します。

    作成以降は設定を緩められない点に注意ください。 Q. バックアップやリストアはできる︖ A. バックアップ、リストアも可能です。 ただし、Flashback Tableや19cでのDatapumpを利 ⽤した論理バックアップ/リストアなど、耐改ざん性の担保 の仕様上、⼀部のツールには制約があります。 Q. インデックスやトリガー、通常のテーブルと組み合わ せたJOIN、VIEWやトランザクションは使⽤できる︖ A. 使⽤可能です。 Q. 利⽤できるデータ型は︖ A. 通常のテーブルで利⽤可能なほとんどのデータ型が 利⽤可能です。⼀部(LONG、TIMESTAMP WITH TIME ZONEやBFILE等)のデータ型のみ利⽤できま せん。 Q. 削除、更新不可の他に制約はある︖ A. シャーディング、分散トランザクションなど⼀部のデー タベース機能の利⽤に制約があります。 21cの公式ドキュメント、19cの公式ドキュメントそれぞれ の制約の箇所を確認ください。 Blockchain TableのFAQ Copyright © 2021, Oracle and/or its affiliates 20
  18. 開発と分析に最⾼の⽣産性を 統合された マイクロサービス、イベント、REST, SaaS, 機械学習, CI/CD, ローコード あらゆるワークロードをサポート トランザクション, 分析,

    機械学習, IoT, ストリーミング, ブロックチェーン あらゆるデータをサポート Relational, JSON, グラフ, 地理空間, テキスト, OLAP, XML, マルチメディア 世界で唯⼀のコンバージドデータベース - インクラウドとオンプレミスの両⽅に対応 オラクルデータベースのビジョン Copyright © 2021, Oracle and/or its affiliates 21
  19. ブロックチェーン/DLT基盤や専⽤データベースと⽐較して…… 利⽤のハードルが低い • ⼀般的なOracle Databaseのスキルで⼗分使いこなせるため、学習コストが低い • 通常のテーブルとの使い勝⼿の差異が⼩さく、アプリケーション透過的な利⽤が可能 • 通常テーブルからの乗り換えに必要な改修はゼロ〜最⼩限 アプリケーション側の負担が⼩さい

    • 通常の構造化データやJSON、BLOB(画像やドキュメントファイル)、CLOBなど多様な形式のデータを Blockchain Table上で扱えるため、複数のデータストアを使い分ける必要がない • 同⼀DB上で通常のテーブルとBlockchain Tableを扱えるためトランザクション、整合性担保が容易 データ分析、データ統合が容易 • Blockchain Table上でそのまま集計、分析が可能 • 他テーブル上のデータとのJOINやVIEW、多様なデータ統合ツールやBIツールも利⽤可能 処理性能 • Oracle Databaseの様々な処理性能向上⼿段を適⽤可能(例︓Exadataを利⽤) Oracle Databaseの1テーブルとして使えることのメリット Copyright © 2021, Oracle and/or its affiliates 22
  20. アプリケーションの負担を減らし、分析のための余分な⼿間も削減 単⼀⽤途データベース vs Oracle Database App BI DIツール イミュータブル データ専⽤DB

    (⼜はブロックチェーン/DLT) 通常データ⽤ DB トランザクション トランザクション 複製 複製 分析 分析⽤ DB 整合性担保は アプリの責任 単⼀⽤途データベースの場合 Oracle Databaseの場合 App BI 分析のための データ統合に 余分な⼿間 トランザクション Oracle Database 分析 DB機能で 整合性担保 同⼀DB上で 容易に分析 Copyright © 2021, Oracle and/or its affiliates 23
  21. CREATE BLOCKCHAIN TABLE + 3つの必須句 Blockchain Tableの作成 CREATE BLOCKCHAIN TABLE

    table_name(columns,constraints) NO DROP [ UNTIL number DAYS IDLE ] NO DELETE [ LOCKED ] | NO DELETE UNTIL number DAYS AFTER INSERT [LOCKED] HASHING USING sha2_512 VERSION v1 テーブルのDROPに対しての制約を記述する句。 • UNTIL n DAYS IDLEを付けておいた場合、テーブル上の最新の⾏がINSERT後n⽇経っていないとDROPでき ない(→付けない場合は常にDROP不可)。nの最⼩は0(16以上の指定を推奨)。 • 後からALTER TABLEでUNTIL~~は付けられない&nを減らせない(制約を緩められない)。 ⾏のDELETEに対しての制約を記述する句。 • UNTIL n DAYS AFTER INSERTを付けておいた場合、INSERT後n⽇経っていないとDELETEできない(→ 付けない場合は常にDELETE不可)。nの最⼩は16。 • 後からALTER TABLEでUNTIL~~は付けられない&nを減らせない(制約を緩められない)。 • LOCKEDを付けておくとnを増やすことも不能。 利⽤するハッシュアルゴリズムとデータフォーマットを記述する句。現状、値は固定。 Copyright © 2021, Oracle and/or its affiliates 24
  22. シンプルなCREATE BLOCKCHAIN TABLEの例 CREATE BLOCKCHAIN TABLE bank_ledger (bank VARCHAR2(128), deposit_date

    DATE, deposit_amount NUMBER) NO DROP UNTIL 31 DAYS IDLE NO DELETE LOCKED HASHING USING "SHA2_512" VERSION "v1"; • NO DROP UNTIL 31 DAYS IDLE …テーブル上の最新の⾏がINSERT後31⽇経っていないとDROPできない • NO DELETE LOCKED …⾏はDELETEできない Copyright © 2021, Oracle and/or its affiliates 25
  23. 作成時刻や⾏ハッシュ値などのデータを格納 隠しカラム 説明 INST_ID 行が書き込まれたデータベースインスタンスを示すID CHAIN_ID 行が属するハッシュチェーンを示すID SEQ_NUM そのハッシュチェーンの中で何番目の行かを示すシーケンス番号 CREATION_TIME

    自動的に記録される行の作成時刻 USER_NUMBER 行を書き込んだデータベース・ユーザーのユーザー番号 HASH (行内容および前行のハッシュ値から計算された)ハッシュ値 SIGNATURE ユーザーの秘密鍵を用いて行のハッシュ値から計算されたデジタル署名(オプショナル) SIGNATURE_ALG デジタル署名に使用した署名アルゴリズム SIGNATURE_CERT デジタル署名に紐付いた証明書のGUID SPARE 現状未使用の予備カラム Blockchain Tableの隠しカラム Copyright © 2021, Oracle and/or its affiliates 26
  24. App Database • 書き込んだBlockchain Table上の⾏データに対し、エンドユー ザーが⾃⾝の秘密鍵を⽤いて⽣成したデジタル署名を付与可能 • 秘密鍵は(DBには引き渡さず)アプリケーション側で保持し、 署名の⽣成もDB外で実⾏ •

    エンドユーザーのデジタル証明書はDBに事前に登録 • 証明書に照らして署名が有効かチェックされる • 署名と併せて証明書IDも⾏に格納 • 「誰が書き込んだか」を確実に区別、記録することでセキュリティを 向上し、否認防⽌にも利⽤可能 • さらに応⽤編として、書き込まれた⾏内容および署名に対して DB側の秘密鍵を⽤いて署名(Countersign、副署)した 結果を受領証としてアプリケーションに返却することで、書き込 み成功の確実性の担保および双⽅向の否認防⽌が可能 エンドユーザーによるデータへのデジタル署名(オプショナル) Copyright © 2021, Oracle and/or its affiliates CertID GRTE SOQP OPRT ID User Value 1 Tom 500 2 Carol 176 3 Wang 500 TRADE LEDGER Signature RT#E GI(! HV*P ⾏内容 ハッシュ 署名& 証明書ID ⾏内容 ハッシュ ①書き込み ②署名 ③副署 受領証 27
  25. Blockchain Tableを履歴保持に、ビューを最新断⾯の表現に利⽤ • Blockchain Tableで更新が⼊るタイプの情報を扱うには「枝番」のようなカラムを設ける • 単⼀の情報の変遷を⽰す複数バージョンの⾏を履歴として保持することになる • 最新断⾯を参照するのに毎回「ある情報についての⾏の中で枝番の値が最⼤なもの」を条件に 加えて検索しなければならず、やや不便

    ü 枝番が最⼤の⾏のみを抽出したビューを定義することで最新断⾯を便利に参照可能 ü さらに、ビューに対してDBトリガーを設定しておくことで、ビューをアプリケーションにとってはあたかも通常のテーブルであ るかのように更新可能にすることが可能 • INSTEAD OF UPDATEトリガーを利⽤し、ビューへのUPDATEをBlockchain TableへのINSERTに変換 応⽤編︓Blockchain Tableとビュー(VIEW)の組み合わせ Copyright © 2021, Oracle and/or its affiliates 29 App アイテムID 枝番 内容 doc0001 1 hogehoge1 doc0001 2 hogehoge2 doc0002 1 fugafuga アイテムID 内容 doc0001 hogehoge2 doc0002 fugafuga 最新断面を 参照 更新 (UPDATE) DBトリガーで INSERTに変換 アイテムIDごとに 最新の枝番の 行を抽出 Blockchain Table Blockchain Tableを 参照するビュー
  26. テーブル作成時に”Immutable”キーワードを追加するだけでインサート オンリーの不変なテーブルを作成 • リレーショナルデータ、JSONやLOBドキュメントも格納可能 • 帳簿データだけでなく参照情報もテーブルに保管 通常のテーブルと同様に利⽤が可能だが、以下の操作には制約: • ⾏のUPDATEとDELETE •

    テーブル定義の変更 • Immutable Tableの通常のテーブルへの変換、およびその逆 • データベースディクショナリでテーブルメタデータの修正 アプリケーションに変更を加えることなくImmutable Tableを利⽤可能 Oracle Immutable Table CREATE IMMUTABLE TABLE trade_ledger (…); ID User Value 1 Tom 500 2 Carol 176 3 Wang 500 4 Eve 25 TRADE LEDGER データベース19.11, 21.3で利用可能 Copyright © 2021, Oracle and/or its affiliates 30
  27. Copyright © 2021, Oracle and/or its affiliates 31 セキュリティの観点での Oracle

    Database Blockchain Table
  28. C (機密性) A (可用性) I (完全性) 可⽤性 ︓ 情報資産を必要時に中断することなく、アクセスできる状態を確保すること •

    可⽤性に対する攻撃 :データの破壊、システム停⽌、サービス妨害(DoS)攻撃 機密性 ︓ 情報資産を正当な権利を持った⼈だけ、アクセスできる状態を確保すること • 機密性に対する攻撃︓情報漏えい 完全性 ︓ 情報資産が破壊、改ざんから守られ、正確さと完全さを確実にすること • 完全性に対する攻撃︓データ改ざん、Webサイト改ざん 情報セキュリティの3要素とその脅威 32 Blockchain Tableにより セキュリティ向上できる範囲 Copyright © 2021, Oracle and/or its affiliates
  29. DB管理者職務分掌 /アクセスパス制限 (Database Vault) 内部犯⾏や悪意ある操作によるデータ抽出、破壊、改竄から保護 知財・機密情報、個⼈情報を守るデータベースセキュリティソリューション ユーザー データベース 管理者 イベント

    DF11233 U*1 $5Ha1qui %H1 HSKQ112 A14 FASqw34 £$1 DF@£!1ah HH! データの暗号化 (Transparent Data Encryption) ⾏列レベルのアクセス制御 (Virtual Private DB, Real Application Security) 不正検知・証跡管理 (Audit Vault and Database Firewall) 通信暗号化 (標準機能) レポート アラート ポリシー 開発 データの伏字化 (Data Masking and Subsetting) 多要素認証 (Identity CS) 改ざん対策 (Blockchain Table) セキュリティアセスメント、監査・ 検知の可視化・⾃動化 (Data Safe CS) Copyright © 2021, Oracle and/or its affiliates 33
  30. 様々なパターンの不正なデータの書き換えや攻撃への対策となる特徴 Blockchain Tableによるセキュリティ向上 ハッシュチェーンの検証 により 検知可能 脆弱性を利⽤した ハッカーの攻撃 ⼤規模な データベース改ざん

    デジタル署名付き ダイジェストの⽣成 で抑⽌可能 Copyright © 2021, Oracle and/or its affiliates 34 内部/外部からの 不正な書き換え 削除・更新不可で 改ざんを防⽌
  31. 対策︓書き込んで以降データの削除も更新もできないテーブル セキュリティの脅威 • 組織内部の悪意のあるユーザーや外部の攻撃者が、 データベース管理者などの特権ユーザー権限を利⽤し、 重要なデータを改ざん • 例︓ 会計データや品質情報データ、個⼈情報へのアクセスログを 都合よく書き換え、削除

    • 改ざんが発覚しないよう各種の痕跡も隠蔽 • 例︓システムのアクセスログを削除 対策 • 特権ユーザー含め誰にもデータの書き換え、削除が不能 • 確実に追記オンリーな信頼できるかたちでデータを保持 パターン1︓内部/外部からの不正な書き換え Copyright © 2021, Oracle and/or its affiliates 35 内部/外部からの 不正な書き換え 削除・更新不可で 改ざんを防⽌
  32. 対策︓ハッシュチェーンによる容易かつ確実な検証可能性、監査性 セキュリティの脅威 • 攻撃者がOSやデータベースの脆弱性を利⽤してデータベースをクラッ キングし、削除/更新防⽌をすり抜けてデータを改ざん • データベースに攻撃者の侵⼊を許してしまい、結果、保持している データが改ざんされた可能性がありもはや信⽤できない 対策 •

    ハッシュチェーンの整合性を検証することで • データの改ざんを検知できる • 改ざんが起きていないことを確認できる パターン2︓脆弱性を利⽤したハッカーの攻撃 Copyright © 2021, Oracle and/or its affiliates 36 脆弱性を利⽤した ハッカーの攻撃 ハッシュチェーンの検証 により検知可能
  33. 対策︓データの署名付きダイジェストを⽣成し外部に保管することで真正性を担保 ケース3︓⼤規模なデータベース改ざん Copyright © 2021, Oracle and/or its affiliates 37

    セキュリティの脅威 • 権威者の命令による組織ぐるみの内部不正、あるいは⾼度に洗練 された組織的外部攻撃による⼤掛かりなオペレーションで、ハッシュ チェーンの整合性を保ったままデータを改ざん • 例︓データベースを丸ごと作り変え • 複数のデータベースを保持し、監査には都合の良いものを提出(⼆ 重帳簿、データベースの真正性についての不正) 対策 • 定期的にテーブルのデータダイジェストを⽣成し、デジタル署名を 付与したうえで外部に配布(監査機関に送付、パブリックブロック チェーンに記録) • ダイジェストとテーブルを⽐較することで真正性を確認 ⼤規模な データベース改ざん デジタル署名付き ダイジェストの⽣成 で抑⽌可能
  34. Appendix Blockchain 関連情報 Copyright © 2021, Oracle and/or its affiliates

    38 Copyright © 2021, Oracle and/or its affiliates
  35. Blockchain Table 関連情報 Copyright © 2021, Oracle and/or its affiliates

    39 ブロックチェーンから⽣まれた技術で、データの耐改ざん性を⾼めるメリットとは︖(2021/4/8実施) 内部不正対応、監査対応、法律規制対応、品質検査対応、脱炭素対応、企業内には様々な⽬的のために、「耐改ざん性が必要」 なデータが存在します。もちろん、すでに様々なセキュリティ対応を実施されていらっしゃる⽅が多いと思いますが、それでもなお、改ざんさ れるリスクにさらされたデータが存在しているのが実情ではないでしょうか。 そのような⾼まる耐改ざん性へのニーズにシンプルに対応するため、オラクルはブロックチェーンの思想からうまれた技術を、Blockchain Tableとしてデータベースに実装し、様々なデータの耐改ざん性と証跡性を、シンプルかつ容易に実現可能としています。 本セミナーではそのBlockchain Tableについて、その⽣まれた背景をユースケースやデモをまじえてご紹介します。 動画 https://go.oracle.com/LP=96105#On-Demand-Webinars-2 資料 https://www.slideshare.net/oracle4engineer/oracle-blockchain- tableoracle-cloud-202148
  36. • 【公式ブログ】Blockchain TableによるOracle Databaseのコンバージドデータベースの拡張 • Blockchain Tableの技術的な特⻑およびユースケースの紹介記事 https://blogs.oracle.com/oracle4engineer/blockchain-table • 【公式ドキュメント】

    Oracle Database 21cドキュメント • https://docs.oracle.com/en/database/oracle/oracle-database/21/admin/managing-tables.html#GUID-43470B0C- DE4A-4640-9278-B066901C3926 • https://docs.oracle.com/en/database/oracle/oracle-database/21/nfcon/details-oracle-blockchain-table- 282449857.html • 【イベントスライド】 Oracle Databaseの新機能 Blockchain Tableのご紹介 • https://speakerdeck.com/gakumura/oracle-databasefalsexin-ji-neng-blockchain-tablefalsegoshao-jie • 【イベントスライド】 2021/3/17 BlockchainGIG Exhibition • 動画 https://www.youtube.com/watch?v=6ZNLZj-os5Y • 改ざん不能データベース登場の背景とOracle Blockchain Platformのご紹介 https://speakerdeck.com/gakumura/gai-zanbu-neng-detabesudeng-chang-falsebei-jing-to-oracle-blockchain- platformfalsegoshao-jie • Blockchain GIG Exhibition Blockchain Tableセッション資料 https://www.slideshare.net/oracle4engineer/20210317-blockchain-gig-exhibition-blockchain-table Blockchain Table 関連技術情報 Copyright © 2021, Oracle and/or its affiliates 40
  37. • 【ご参考ブログ】Oracle CloudでOracle Database 20c(プレビュー)のBlockchain Tableを使ってみた話 • Blockchain Tableを作成し、基本的な操作をテスト https://bit.ly/34lFSQr

    • 【ご参考ブログ】Oracle CloudのAlways FreeのATPのAPEXを使って作った我が家の体重管理アプリを、 Blockchain Tablesで改ざんできないようにした • Blockchain Tableを作成し、APEXで操作 https://qiita.com/maato/items/4a43841132074aa35d81 • 【ご参考ブログ】21cのブロックチェーン 表を使ってみる • Blockchain TableにネイティブJSON型(21cで追加)でデータを保存し、APEXから表⽰ https://apexugj.blogspot.com/2020/12/blockchain-table-with-json.html • 【ご参考ブログ】 Blockchain TableにドキュメントのPDFファイルを保存してOracle Textで全⽂検索してみた • https://gakumura.hatenablog.com/entry/how-to-store-files-into-blob-and-use-oracletext-on- blockchain-tables • 【ご参考ブログ】 OracleDBにブロックチェーン︖21c新機能Blockchain Tableとは (アシスト様ブログ、Oracle Database 19c Release Update 19.10への実装) • https://www.ashisuto.co.jp/db_blog/article/oracle-blockchain-table.html Blockchain Tableについての参考Webサイト Copyright © 2021, Oracle and/or its affiliates 41
  38. Appendix Oracle Cloud Free Tierを使った、Blockchain Tableのテスト Copyright © 2021, Oracle

    and/or its affiliates 42 Copyright © 2021, Oracle and/or its affiliates
  39. Oracle Cloud Free Tier: Free TrialとAlways Free Oracle Cloudにサインナップいただくと、両⽅が利⽤可能です •

    https://www.oracle.com/jp/cloud/free/ Free Trial 30 300 + Always Free Copyright © 2021, Oracle and/or its affiliates 43
  40. Oracle Cloudでは以下いずれかのサービスのOracleデータベース上で Blockchain Tableの利⽤が可能です︓ • Autonomous Database • フルマネージド型のデータベース •

    ワークロードごとに以下のタイプを選択︓ • Autonomous Data Warehouse︓分析ワークロード、データウェアハウス • Autonomous Transaction Processing︓オンライントランザクション処理 • Database Cloud Service • カスタマーマネージド型のデータベース Oracle Cloud Free TierでBlockchain Tableを試⽤する⽅法 Copyright © 2021, Oracle and/or its affiliates 44
  41. • 19cバージョンあるいは21cバージョンを選択して構築したAutonomous DatabaseでBlockchain Tableの利⽤が可能です • Autonomous Databaseの21cバージョンを利⽤する際の制約︓ • 現状、21cバージョンを選択して構築するには以下の制約があります •

    ①Always Free枠で構築するAutonomous Databaseに限定(有償枠では21cが選べない) • ②Ashburn、Phoenixなどのいくつかのリージョンに限定 • 上記の制約を満たすためには、Free Trial環境としてクラウドテナントをサインアップする際に選択する ホームリージョン(Home Region)を②に含まれるリージョンにしておく必要があります • 理由︓Always Free枠でのサービスの利⽤はホームリージョン内に限られる、また、サインアップ以降ホームリー ジョンの変更ができないため • 以上から、Ashburnをホームリージョンとして指定することを推奨します Autonomous DatabaseでのBlockchain Table試⽤(2021年9⽉時点) Copyright © 2021, Oracle and/or its affiliates 45
  42. • データベースバージョンの制約︓以下いずれかでBlockchain Tableを利⽤可能です • 21cバージョンを選択して構築したDatabase Cloud Service • 19cバージョン(RU19.11以降)を選択して構築し、適⽤したDatabase Cloud

    Service • サービスの制約︓Database Cloud ServiceはAlways Free枠で提供されていないため、Free Trial クレジット範囲内での使⽤が必要です • Database Cloud Serviceを試⽤する場合は、リージョンの制約はありません Database Cloud ServiceでのBlockchain Table試⽤(2021年9⽉時点) Copyright © 2021, Oracle and/or its affiliates 46
  43. 通常のテーブルと異なる点及び通常のテーブルと同様な点を体験 Oracle Blockchain Tableの基本機能(変更/ 削除不可、隠しカラム、ハッシュ値の⽣成、通常の SQL操作)を確認 • ユーザー情報、操作情報(マスター情報)を通常の テーブルで作成 •

    書き換え、削除のできないログテーブルを Blockchain Tableを使って作成 • UPDATE, DELETE, TRUNCATE, DROP不可 確認 • 通常のテーブルとBlockchain Tableの同⼀トランザ クション(COMMIT, ROLLBACK)の確認 • ログテーブル、ユーザーテーブル、操作テーブルを結合 し、監査ログViewを作成 スキーマ図 サンプルSQLスクリプト: Blockchain Tableの基本 Copyright © 2021, Oracle and/or its affiliates 47 LOGS (Blockchain Table) USERS (Table) OPERATIONS (Table) AUDIT_LOGS (View) システムの操作ログを記録 Blockchain Tableで作 成 操作内容が記録される 操作マスターテーブル ユーザー情報が記録される ユーザーマスターテーブル LOGS、OPERATIONS、 USERS 3表をJOINした 監査ログVIEW
  44. Copyright © 2021, Oracle and/or its affiliates 48 -- exhibition

    スキーマ -- システムの操作内容が記録される通常のテーブルを作成(操作マスター) CREATE TABLE operations ( operation_id number(10) PRIMARY KEY, operation_name varchar2(50) NOT NULL UNIQUE ); -- ユーザーの情報が記録される通常のテーブルを作成(ユーザーマスター) CREATE TABLE users ( user_id number(10) PRIMARY KEY, user_name varchar2(30) NOT NULL UNIQUE, last_name varchar2(30) NOT NULL, first_name varchar2(30) NOT NULL, mail varchar2(60) NOT NULL ); -- システムのログを記録するBlockchain Tableを作成 CREATE BLOCKCHAIN TABLE logs ( log_id number(30) PRIMARY KEY, user_id number(10) NOT NULL, operation_id number(10) NOT NULL, error number(10), ip_address varchar2(20), log_stamp timestamp DEFAULT systimestamp NOT NULL, CONSTRAINT user_id_fk FOREIGN KEY(user_id) REFERENCES users(user_id), -- ユーザーIDに対して外部キーを指定 CONSTRAINT operation_id_fk FOREIGN KEY(operation_id) REFERENCES operations(operation_id) -- 操作IDに対して外部キーを指定 ) NO DROP NO DELETE UNTIL 365 DAYS AFTER INSERT HASHING USING "SHA2_512" VERSION "v1" ; -- 隠しカラムの表示をONにしてからLOGSテーブル定義を表示→Blockchain Table特有の隠しカラムが自動的に作成されている SET COLINVISIBLE ON; DESC logs; -- OPERATIONSテーブルに操作情報をINSERT INSERT INTO operations VALUES (1, 'login'); INSERT INTO operations VALUES (2, 'logout'); INSERT INTO operations VALUES (3, 'add_user'); INSERT INTO operations VALUES (4, 'delete_user'); INSERT INTO operations VALUES (5, 'insert_data'); -- USERSテーブルにユーザー情報をINSERT INSERT INTO users VALUES (1, 'tanaka01', 'tanaka', 'tarou', 'tarou@demo.mail'); INSERT INTO users VALUES (2, 'hanako02', 'yamada', 'hanako', 'hanako@demo.mail'); INSERT INTO users VALUES (3, 'hiroshi03', 'suzuki', 'hiroshi', 'hiroshi@demo.mail'); -- 通常テーブルへのINSERTを確定 COMMIT; -- 通常テーブルのINSERT確認 SELECT * FROM operations; SELECT * FROM users; -- LOGSテーブルにログ情報をINSERT INSERT INTO logs VALUES (1, 1, 1, 0, '192.168.1.1', systimestamp); INSERT INTO logs VALUES (2, 2, 1, 0, '192.168.1.2', systimestamp); INSERT INTO logs VALUES (3, 2, 5, 0, '192.168.1.2', systimestamp); -- (隠しカラム含め)LOGSテーブルをSELECTしてみる→ハッシュ値などの隠しカラムはまだ入っていない SELECT log_id, user_id, operation_id, log_stamp, ORABCTAB_INST_ID$ "inst", ORABCTAB_CHAIN_ID$ "chain", ORABCTAB_SEQ_NUM$ "seq", ORABCTAB_CREATION_TIME$ "time", ORABCTAB_USER_NUMBER$ "user", ORABCTAB_HASH$ "hash" FROM logs; -- Blockchain Tableへのinsertを確定 COMMIT; -- (隠しカラム含め)LOGSテーブルをSELECTしてみる→ハッシュ値などの隠しカラムが自動的に埋められている SELECT log_id, user_id, operation_id, log_stamp, ORABCTAB_INST_ID$ "inst", ORABCTAB_CHAIN_ID$ "chain", ORABCTAB_SEQ_NUM$ "seq", ORABCTAB_CREATION_TIME$ "time", ORABCTAB_USER_NUMBER$ "user", ORABCTAB_HASH$ "hash" FROM logs; -- LOGSテーブルに対してUPDATEを試す UPDATE logs SET user_id = 2 WHERE log_id = 1; -- LOGSテーブルに対してDELETEを試す DELETE FROM logs WHERE user_id = 1; -- LOGSテーブルに対してTRUNCATE(テーブル上のデータ全削除)を試す TRUNCATE TABLE logs; -- LOGSテーブルに対してDROP(テーブルごと削除)を試す DROP TABLE logs CASCADE CONSTRAINTS; -- OUTPUTをON SET SERVEROUTPUT ON; -- LOGSテーブルの行の整合性を検証 DECLARE verify_rows NUMBER; BEGIN DBMS_BLOCKCHAIN_TABLE.VERIFY_ROWS('exhibition','logs', NULL, NULL, NULL, NULL, verify_rows); DBMS_OUTPUT.PUT_LINE('Number of rows verified = '|| verify_rows); END; / -- USERSテーブルとLOGSテーブルに対して行を追加INSERT INSERT INTO users VALUES (4, 'kenta04', 'maeda', 'kenta', 'kenta@demo.mail'); INSERT INTO users VALUES (5, 'haruka05', 'yamamoto', 'haruka', 'haruka@demo.mail'); INSERT INTO logs VALUES (4, 1, 3, 0, '192.168.1.1', systimestamp); INSERT INTO logs VALUES (5, 3, 3, 0, '192.168.1.10', systimestamp); INSERT INTO logs VALUES (6, 3, 5, 0, '192.168.1.10', systimestamp); -- 通常テーブルのINSERT確認 SELECT * FROM users; -- (隠しカラム含め)LOGSテーブルをSELECTしてみる→ハッシュ値などの隠しカラムはまだ入っていない SELECT log_id, user_id, operation_id, log_stamp, ORABCTAB_INST_ID$ "inst", ORABCTAB_CHAIN_ID$ "chain", ORABCTAB_SEQ_NUM$ "seq", ORABCTAB_CREATION_TIME$ "time", ORABCTAB_USER_NUMBER$ "user", ORABCTAB_HASH$ "hash" FROM logs; -- 通常テーブルとBlockchain TableへのINSERTを取り消し ROLLBACK; -- 通常テーブルのROLLBACK確認 SELECT * FROM users; -- Blockchain TableのROLLBACK確認 SELECT log_id, user_id, operation_id, log_stamp, ORABCTAB_INST_ID$ "inst", ORABCTAB_CHAIN_ID$ "chain", ORABCTAB_SEQ_NUM$ "seq", ORABCTAB_CREATION_TIME$ "time", ORABCTAB_USER_NUMBER$ "user", ORABCTAB_HASH$ "hash" FROM logs; -- 再度USERSテーブルとLOGSテーブルに対して行を追加INSERT INSERT INTO users VALUES (4, 'kenta04', 'maeda', 'kenta', 'kenta@demo.mail'); INSERT INTO users VALUES (5, 'haruka05', 'yamamoto', 'haruka', 'haruka@demo.mail'); INSERT INTO logs VALUES (4, 1, 3, 0, '192.168.1.1', systimestamp); INSERT INTO logs VALUES (5, 3, 3, 0, '192.168.1.10', systimestamp); INSERT INTO logs VALUES (6, 3, 5, 0, '192.168.1.10', systimestamp); -- 通常テーブルのINSERT確認 SELECT * FROM users; -- (隠しカラム含め)LOGSテーブルをSELECTしてみる→ハッシュ値などの隠しカラムはまだ入っていない SELECT log_id, user_id, operation_id, log_stamp, ORABCTAB_INST_ID$ "inst", ORABCTAB_CHAIN_ID$ "chain", ORABCTAB_SEQ_NUM$ "seq", ORABCTAB_CREATION_TIME$ "time", ORABCTAB_USER_NUMBER$ "user", ORABCTAB_HASH$ "hash" FROM logs; -- 通常テーブルとBlockchain TableへのINSERTを確定 COMMIT; -- (隠しカラム含め)LOGSテーブルをSELECTしてみる→ハッシュ値などの隠しカラムが自動的に埋められている SELECT log_id, user_id, operation_id, log_stamp, ORABCTAB_INST_ID$ "inst", ORABCTAB_CHAIN_ID$ "chain", ORABCTAB_SEQ_NUM$ "seq", ORABCTAB_CREATION_TIME$ "time", ORABCTAB_USER_NUMBER$ "user", ORABCTAB_HASH$ "hash" FROM logs; -- ログのユーザー情報と操作内容を表示する監査ログのVIEWを作成…通常のテーブルとBlockchain TableをJOINしたVIEWの利用が可能 CREATE VIEW audit_logs AS SELECT l.log_id "ID", o.operation_name "operation", l.ip_address "ip_address", l.log_stamp "time", u.first_name || '.' || u.last_name "name", l.ORABCTAB_HASH$ as hash FROM logs l, users u, operations o WHERE l.user_id = u.user_id and l.operation_id = o.operation_id ORDER BY log_stamp WITH READ ONLY ; -- 作成したVIEWで監査ログを確認 SELECT * FROM audit_logs; SQLスクリプト ~コピペしてご利用ください~
  45. Blockchain Tableと通常のテーブルでの基本的な操作の⽐較で耐改ざん性を体験 このシナリオでは… • 通常のテーブルとBlockchain Tableを作成し、品質情報に⾒⽴てたデータを格納する • 両者に対してデータのUPDATE/更新(→改ざん)、DELETE/削除(→隠蔽)の操作結果を⽐較する • Blockchain

    Table独特の隠しカラムに⾃動的に保存されるデータの有⽤性を理解する サンプルSQLスクリプト︓Blockchain tableへの品質情報の保存 Copyright © 2021, Oracle and/or its affiliates 49 QUALITY 製品の品質検査の 結果データを保存する 通常のテーブル QUALITY_BCT 製品の品質検査の 結果データを保存する Blockchain Table ・UPDATE ・DELETE ・UPDATE ・DELETE
  46. Copyright © 2021, Oracle and/or its affiliates 50 -- ※※※まずは通常のテーブルを作成し操作を実験※※※

    -- QUALITYという名前の品質検査結果を記録する通常のテーブルを作成 -- 製品ID、検査結果スコア、検査実施日時 CREATE TABLE quality ( product_id VARCHAR2(256) NOT NULL, test_score NUMBER NOT NULL, inspection_date DATE NOT NULL ); -- QUALITYテーブルに品質検査結果データをINSERT INSERT INTO quality VALUES ('aaa111', 88, TO_DATE('2021/03/02 10:12:34', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality VALUES ('bbb222', 89, TO_DATE('2021/03/02 11:11:22', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality VALUES ('ccc333', 64, TO_DATE('2021/03/02 12:18:44', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality VALUES ('ddd444', 92, TO_DATE('2021/03/02 13:13:21', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality VALUES ('fff666', 89, TO_DATE('2021/03/02 14:22:04', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality VALUES ('ggg777', 93, TO_DATE('2021/03/02 15:23:12', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality VALUES ('hhh888', 94, TO_DATE('2021/03/02 16:12:58', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality VALUES ('iii999', 90, TO_DATE('2021/03/02 17:18:07', 'YYYY-MM-DD HH24:MI:SS')); -- QUALITYテーブルの品質検査結果データを全件表示 SELECT * FROM quality ORDER BY product_id; -- 検査結果スコアが89点(ギリギリ不合格)のものを90点(ギリギリ合格)に更新…品質情報の改ざん -- 成功する UPDATE quality SET test_score = 90 WHERE test_score = '89'; -- 検査結果スコアが一定以上低かった不良品のデータを削除…隠ぺい -- 成功する DELETE FROM quality WHERE test_score < 70; -- 検査漏れしていた製品の結果を過去日時で新規登録…ねつ造 -- 成功する INSERT INTO quality VALUES ('eee555', 90, TO_DATE('2021/03/02 14:00:45', 'YYYY-MM-DD HH24:MI:SS')); -- QUALITYテーブルの品質検査結果データを全件表示 SELECT * FROM quality ORDER BY product_id; -- ※※※次にBlockchain Tableを作成し操作を実験※※※ -- QUALITY_BCTという名前の品質検査結果を記録するBlockchain Tableを作成 CREATE BLOCKCHAIN TABLE quality_bct ( product_id VARCHAR2(256) NOT NULL, test_score NUMBER NOT NULL, inspection_date DATE NOT NULL ) NO DROP UNTIL 0 DAYS IDLE NO DELETE HASHING USING "SHA2_512" VERSION "v1" ; -- QUALITY_BCTテーブルに品質検査結果データをINSERT INSERT INTO quality_bct VALUES ('aaa111', 88, TO_DATE('2021/03/02 10:12:34', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality_bct VALUES ('bbb222', 89, TO_DATE('2021/03/02 11:11:22', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality_bct VALUES ('ccc333', 64, TO_DATE('2021/03/02 12:18:44', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality_bct VALUES ('ddd444', 92, TO_DATE('2021/03/02 13:13:21', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality_bct VALUES ('fff666', 89, TO_DATE('2021/03/02 14:22:04', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality_bct VALUES ('ggg777', 93, TO_DATE('2021/03/02 15:23:12', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality_bct VALUES ('hhh888', 94, TO_DATE('2021/03/02 16:12:58', 'YYYY-MM-DD HH24:MI:SS')); INSERT INTO quality_bct VALUES ('iii999', 90, TO_DATE('2021/03/02 17:18:07', 'YYYY-MM-DD HH24:MI:SS')); -- QUALITY_BCTテーブルの品質検査結果データを全件表示 SELECT * FROM quality_bct ORDER BY product_id; -- 検査結果スコアが89点(ギリギリ不合格)のものを90点(ギリギリ合格)に更新…品質情報の改ざん -- 失敗する(Blockchain Tableの制約) UPDATE quality_bct SET test_score = 90 WHERE test_score = '89'; -- 検査結果スコアが一定以上低かった不良品のデータを削除…隠ぺい -- 失敗する(Blockchain Tableの制約) DELETE FROM quality_bct WHERE test_score < 70; -- 検査漏れしていた製品の結果を過去日時で新規登録…ねつ造 -- 成功する…ただし隠しカラムに自動で記録されるタイムスタンプと齟齬が出るため識別可能 INSERT INTO quality_bct VALUES ('eee555', 90, TO_DATE('2021/03/02 14:00:45', 'YYYY-MM-DD HH24:MI:SS')); -- 一部の隠しカラム含めBlockchain Tableのデータを表示 -- Blockchain Tableでは、自動的にINSERT時のタイムスタンプが登録されている SELECT product_id, test_score, inspection_date, ORABCTAB_CREATION_TIME$ "bc_date", ORABCTAB_HASH$ "hash" FROM quality_bct ORDER BY product_id; -- ※※※Blockchain Tableのその他の操作※※※ -- 隠しカラムの表示をONにしてからテーブル定義を表示 SET COLINVISIBLE ON; DESC quality_bct; -- Blockchain Tableの行の整合性を検証 DECLARE verified_rows NUMBER; BEGIN DBMS_BLOCKCHAIN_TABLE.VERIFY_ROWS('admin','quality_bct', NULL, NULL, NULL, NULL, verified_rows); DBMS_OUTPUT.PUT_LINE('Number of rows verified = '|| verified_rows); END; -- Blockchain Tableに対してTRUNCATE(テーブル上のデータ全削除)を試す -- テーブル作成時にNO DELETEを指定している場合は常に失敗する TRUNCATE TABLE quality_bct; -- Blockchain Tableに対してDROP(テーブルごと削除)を試す -- テーブル作成時のNO DROP UNTIL n DAYS IDLEの指定およびテーブル上の最新データの経過日数次第で可不可が分かれる -- NO DROP UNTIL 0 DAYS IDLEで作成している場合は常に成功する DROP TABLE quality_bct; サンプルSQLスクリプト ~コピペしてご利用ください~
  47. 無償トライアルで利⽤可能なワークショップ お客さまのクラウド環境ですぐに利⽤できるワークショップを多数 掲載。画⾯キャプチャおよび実⾏コマンドを記載、実環境にて 順を追って操作⽅法を学習することが可能。 英語ですが、ブラウザの翻訳機能を使って⽇本語で利⽤可能。 https://apexapps.oracle.com/pls/apex/dbpm/r/livelabs/home Oracle LiveLabs Copyright ©

    2021, Oracle and/or its affiliates 51
  48. 無償トライアルで利⽤可能なワークショップ:Oracle blockchain tablesのチュートリアル Oracle blockchain tablesのチュートリアル 英語ですが、ブラウザの翻訳機能を使って⽇本語で利⽤可能。 https://apexapps.oracle.com/pls/apex/dbpm/r/livelabs/view-workshop?wid=746&session=13873808601344 Oracle LiveLabs

    Copyright © 2021, Oracle and/or its affiliates 52
  49. None