Azure SQL Database Ledger (Ledger/台帳)と Oracle Blockchain Table を比較してみた話

Blockchain Table

あっという間に、12/24日クリスマスイブですね。この記事は、 JPOUG Advent Calendar 2021 24日目の記事です。23日目は Hiroshi Sekiguchi さんの記事「誰がどんな名前のペットを飼っているのかな? 解答編 / JPOUG Advent Calendar Day 23」でした。

12/24 18:30修正:「このデータベースの将来のテーブルすべてで有効にする」を有効にしなければ、通所のテーブルと Ledger テーブルを混在させられます。誤った記載がございましたことを、お詫びして訂正いたします。

これまで当ブログでは、耐改ざん性、検証性といったブロックチェーンの特性をリレーショナルデータベースに取り込んだ「Azure SQL Database Ledger」、「Oracle Blockchain Table」を取り上げてきました。

本記事では、実際に触ってみたことで分かったそれぞれの概要と機能の比較をしてみたいと思います。

※まだまだ、細かい部分は検証できておらず、また Azure SQL Database Ledger はプレビュー版なことから、正確な比較ではなく 2021/12/24 時点の大まかな比較となり、正式版とは仕様が異なる場合がありますので、ご了承ください。

Azure SQL Database Ledger と Oracle Blockchain Table のおさらい

Azure SQL Database Ledger (Ledger)とは

まず Azure SQL Database とは Microsoft Azure 上で利用できる SQL Server の PaaS サービスです。

Azure SQL Database Ledger(台帳)とは、Azure SQL Database の1機能として提供される、改ざん耐性のあるデータベース(テーブル)となります。比較の際に触れますが、Azure SQL Database Ledger には「更新可能な台帳テーブル」と「追加専用の台帳テーブル」の2つのテーブルがあります。

どちらのテーブルもデータが改ざんされていないことを暗号学的に証明できますが、「更新可能な台帳テーブル(Updatable ledger tables)」は、その名の通り、INSERTだけでなく、UPDATE、DELETEといった更新操作も可能となっています。一方「追加専用の台帳テーブル(Append-only ledger tables)」は文字通り、INSERT オンリーのテーブルとなります。

Ledger 機能は 2021/12/24 現在はオンプレミスの SQL Server では利用ができず、クラウドサービスの Azure SQL Database 上でのみ利用できます(2021年9月に Azure のすべてのパブリックリージョンでプレビュー版の利用が可能となりました)
※本記事公開時にはプライベートプレビュー状態ですが、SQL Server 2022 にてオンプレミスの SQL Server でも Ledger 機能が利用できるようになるようです。

更新可能な台帳テーブル、追加専用の台帳テーブルについては、共に過去の記事で扱っているのでそちらをご参照ください。

※以下 Ledger と記載する際は Azure SQL Database / SQL Server の Ledger 機能を指します。

Oracle Blockchain Table とは

Oracle Blockchain Table とは Oracle Database の1機能、1テーブルであり、Azure SQL Database Ledger と同じく、Blockchain 技術を取り入れ、改ざん耐性、検証性を高めたテーブルとなります。Oracle Blockchain Table は INSERT オンリーとなっています。Oracle Blockchain Table もトランザクションの hash 値を保持し、暗号学的にデータの改ざんがされていないことが証明できます。

こちらも過去の記事で扱っていますので、詳しくはそちらをご覧ください。また、こちらのOCI活用資料集にもわかりやすくまとまっているのでご参照ください。

Oracle Blockchain Table は Oracle Database 21c で新たに追加された機能ですが、現在では19cでも利用することができます。さらに Oracle Cloud Infrastructure 上の DBCS(Database Cloud Service)や Oracle Autonomous Database でも、オンプレミスの Oracle Database でもこの Blockchain Tables を利用することができます。

※Oracle Database には Oracle Immutable Table と呼ばれる、Oracle Blockchain Table からハッシュ値などの監査性を除いた、よりシンプルな INSERT オンリーのテーブルもありますが、本記事では扱いません。

Azure SQL Database Ledger (Ledger) と Oracle Blockchain Table の比較表

早速 Azure SQL Database Ledger と Oracle Blockchain Table の機能比較をしていきます。

概要の比較

まずは、大まかな概要の比較です。

Azure SQL Database Ledger (Ledger)Oracle Blockchain Table
提供元MicrosoftOracle
DBの種類RDBMS (SQL Server の機能)RDBMS (Oracle Database の機能)
クラウド利用対応
(Microsoft Azure:
Azure SQL Database)
対応
(Oracle Cloud Infrastructure)
オンプレミス※対応予定
(※SQL Server 2022 にて提供予定)
対応
対応バージョンAzure SQL Database
SQL Server 2022 予定
Oracle Database 21c 以降
(19c も一部対応)
サポートプレビュー段階
(2021/12/24 現在)
一般提供
テーブルの種類Updatable ledger tables,
Append-only ledger tables
Blockchain Tables
Ledger と Oracle Blockchain Table の概要比較表

言わずもがな、両機能はそれぞれ Microsoft SQL Server 、Oracle Database といった RDBMS(リレーショナルデータベース)の機能となります。両機能の特徴として、Blockchain like なテクノロジーが RDBMS 上で利用でき、慣れ親しんだ SQL クエリで管理/実行ができるという点が挙げられます。

また、現在 2021/12/24 時点では、Oracle Blockchain Table はクラウド、オンプレミス共に利用することができます。一方 Ledger に関しては、SQL Server 2022 よりオンプレミスで利用可能となる予定であり、現時点ではクラウド上の利用でも Azure SQL Database のみ利用可能、かつプレビュー状態となっています。

また、両機能の大きな違いとして、Oracle Blockchain Table は 挿入(INSERT)オンリーのテーブルのみとなりますが、Ledger では Updatable ledger tables(更新可能な台帳テーブル)と Append-only ledger tables(追加専用の台帳テーブル)の2つが利用できます。

機能の比較

次に各機能の比較を見ていきます。

Azure SQL Database Ledger (Ledger)Oracle Blockchain Table
特殊列隠しカラム)有り有り
ハッシュチェーンによる検証性有り有り
ダイジェストの生成による検証性有り有り
デジタル署名無し有り
一度有効にした当機能の無効化不可不可
通常のテーブルとの組み合わせ※可能可能
Ledger と Oracle Blockchain Table の機能比較表

どちらの機能にも、隠しカラムが存在しています。Oracle Blockchain Table ではこの隠しカラムにハッシュ値やチェーン、タイムスタンプなどの情報が保存されます。一方、Ledger では トランザクションの ID やシーケンス番号のみが隠しカラム(Generated Always 列)に保存され、ハッシュ値やタイムスタンプなどの情報は別のテーブルやビューから確認します。

両機能の特徴である検証性では、両機能ともハッシュチェーンによる検証、ダイジェストの生成による検証に対応しています。さらに、Oracle Blockchain Table では デジタル署名機能があり、誰が書き込んだかを証明/検証することが可能となっています。

以下12/24 18:30修正箇所
※通常テーブルとの組み合わせに関しては、以下の通りです。
Oracle Blockchain Table は同じデータベース上に Blockchain Tables と 通常のテーブルを作成することができ、それぞれを結合(join)して使うこともできます。Ledger においても、通常のテーブルと Ledger のテーブルを混在させることができ、同じく join することも可能です。ただし、「このデータベースの将来のテーブルすべてで有効にする」を有効にした場合、Ledger 機能が有効となったデータベースでは、それ以降、通常のテーブルは作成できず、すべて Ledger テーブル(更新可能な台帳テーブルか追加専用の台帳テーブル)となります。デフォルトでは更新可能な台帳テーブルとなります。ただし、後述しますが、更新可能な台帳テーブルは UPDATE や DELETE 操作も可能なため、実質通常のテーブルと同じように利用することも可能です。

仕様/制約の比較

次に細かい SQL 操作、仕様や制約の比較です。
ここでは Ledger を 更新可能な台帳テーブル(Updatable ledger tables)と追加専用の台帳テーブル(Append-only ledger tables)に分けて比較します。

Updatable ledger tables (Ledger)Append-only ledger tables
(Ledger)
Oracle Blockchain Table
DELETE可能不可原則不可
(※保持期間を設定する場合は可)
UPDATE/MERGE可能不可不可
DROP※1可能※1可能原則不可
(※保持期間を設定する場合は可)
TRUNCATE不可不可不可
カラム操作、ALTER TABLE可能
※2 一部不可(DROP不可)
可能
※2 一部不可(DROP不可)
不可
※3 パーティションDROP不可不可不可
Ledger (Updatable ledger tables / Append-only ledger tables) と Oracle Blockchain Table の仕様/制約比較表

仕様や制約においては、Ledger と Oracle Blockchain Table で大きく異なるため、一つ一つ見ていきます。

まず、DELETE 操作です。Ledger の更新可能な台帳テーブル(Updatable ledger tables)では DELETE 操作が可能です。しかし、追加専用の台帳テーブル(Append-only ledger tables)と Oracle Blockchain Table では DELETE が原則できません。原則というのは、Oracle Blockchain Table では保持期間を設定でき、「挿入から〇日経過後削除可能」という設定をした場合、〇日経過した行は DELETE ができるようになります。

UPDATE/MERGE 操作においては、更新可能な台帳テーブルでは実行可能です。一方、追加専用の台帳テーブル、Oracle Blockchain Table では UPDATE/MERGE 操作ができません。

※1 DROP 操作は、Ledger の更新可能な台帳テーブル/追加専用の台帳テーブルでは可能となっています。というのも、Ledger では テーブルを削除しても、「削除済みテーブル」として残り、削除済みテーブルは DROP することができません。さらに、更新可能な台帳テーブルの場合は、履歴テーブルという操作履歴を記録するテーブルも残り、こちらも DROP することができません。
Oracle Blockchain Table では、原則 DROP 操作ができません。しかし、こちらも 保持期間を設定でき、保持期間を過ぎた(IDLE 状態が設定期間以上経過した)場合は DROP が可能となります。

TRUNCATE はすべての機能でできません。

※2 カラムの操作 ALTER TABLE/ALTER COLUMN については、Ledger では通常の SQL Server の制約の範囲内であれば、カラムの変更や追加といった操作が可能です。しかし例外として カラムの削除(DROP)は不可となっています。一方、Oracle Blockchain Table ではカラムの操作は不可となっています。

最後に、パーティションの DROP ですが、こちらはすべて不可となっています。
※3 Ledger に関しては、パーティションテーブルは DROP が可能です。しかし、パーティションテーブル削除後もパーティションスキーマが削除済みテーブルに設定されたままとなるので、実質パーティションの DROP は不可となります。

まとめ

以上、概要/機能/仕様、制約という観点から Azure SQL Database Ledger (SQL Server Ledger) と Oracle Blockchain Table を比較してみました。大まかな設計思想や、機能は同じ、もしくは似ていましたが、細かい制約まで落とし込んでみると思った以上に異なる点がありました。

特に、Ledger では 「更新可能な台帳テーブル」と「追加専用の台帳テーブル」の二つのテーブルがある点やテーブルを削除しても、「削除済みテーブル」や「履歴テーブル」として残る特徴があるため、Oracle Blockchain Table とは異なった制約、仕様となっているようでした。

一方、Oracle Blockchain Table はシンプルなつくりになっており、制約の理解はしやすいように感じます。

どちらも実現できることやユースケースは似たものになると考えられますが、細かい制限や検証周りの操作が異なるため、この点は留意が必要だと思います。

おわりに

本記事では、 Microsoft SQL Server / Azure SQL Database の Ledger 機能と Oracle Blockchain Table の機能を大まかに比較しました。

今後も引き続き、この二つの機能の動向を追っていきたいと思います。今後、両機能のユースケースがどんどん出てくることを楽しみにしています。

また、今後はハッシュの検証やダイジェストあたりもブログ記事にしたいと思っています。

最後までご覧いただきありがとうございました。良いクリスマス、年末をお過ごしください。

*本記事は公式の情報ではなく個人の投稿です。正式では無い情報を含む場合があります。

コメント

タイトルとURLをコピーしました