Oracleデータベースで活用したい「データの保護」と「暗号化」データベースセキュリティの基礎のキソ(4)

» 2003年12月05日 00時00分 公開
[篠田道明インターネット総合研究所]

 前回の「第3回 Oracleデータベース導入時のセキュリティ対策の基本」では、Oracleデータベースの導入および運用時の基本的なセキュリティ対策作業について説明した。今回は、Oracle9iデータベースの基本機能を利用して、Oracleデータベースの保存データを保護する仮想プライベートデータベースと保存データの暗号化について紹介する。

 これらのセキュリティ機能については、現在のところ、PostgreSQLやMySQLといったほかのフリーソフトウェアに対するアドバンテージがあるため、ぜひ活用したい機能だ。

※注意

いくつかのオプション製品を利用したより高度なセキュリティ対策も可能だが、本連載ではOracle 9i Enterprise Editionライセンスを利用しているユーザーが行うことができるセキュリティ対策を中心に説明する。


保存データの保護とは

 さまざまなセキュリティ対策を行ったOracle9iデータベースであっても、例えば、社内の複数のユーザーに対してOracle9iデータベースを通じて業務サービスが提供されている場合、正規ユーザーであれば自分の業務とは関係のないデータへのアクセスも可能だ(アプリケーションなどでアクセスが制限されている場合でも、SQL*Plusなどの管理ツールからアクセスされる可能性もある)。

 さらに、Oracle9iデータベース内に保存されているデータは、SQL文を打ち込めば、だれでも確認することができる。しかしOracle9iデータベースでは、3つの側面からデータベース内に保存されているデータの保護を行うことができる(表1)。

・通信経路の暗号化(Oracle Advanced Securityにて実現可能)

・保存データへのアクセス制限

・保存データの暗号化

表1 保存データの保護方法
(ただし、Oracle Advanced Securityについては、有償オプションである)

 これらの機能を利用することで、第三者からの不正アクセスに対しても、有効な対策を行うことができる。Oracle9iデータベース内に保存されているデータの保護方法について、アクセス制限と暗号化による対策をここでは説明するが、果たしてどちらが効果的だろうか。Oracle9iデータベースの製品構成から考えると、データの暗号化の方が現実的だと思われる。

※注意

個人的には、アクセス制限を実装する方が効果的だと思う。なぜならば、これは現状の製品構成上Oracle Label Securityオプションを購入しなければアクセス制限が非常に煩雑になるためだ。


保存データへの行単位のアクセス制限が可能となる
「仮想プライベートデータベース」

 Oracle9iデータベースでは、仮想プライベートデータベース(Virtual Private Database)機能を利用することで、保存データへの行単位のアクセス制限が可能となる。

 仮想プライベートデータベースでは、ユーザーが対象のデータにアクセスする場合、どんなアクセス方法であっても、サーバ側のWHERE句(条件)を付加してSQL文が発行され、これによってアクセスできる範囲が制限される。

 ここでは、同一データに対して、同じ条件のSQL文を要求しても、ユーザーによって、SQL文の条件が自動的に付与されて、出力される結果が異なる。

 例えば、図1のように、病院などで医師が自分の担当する患者以外のデータにアクセスできないようにすることで患者のプライバシーを内部的にも守ることができるようになる。

 仮想プライベートデータベースを利用すれば、複数の企業の顧客情報を同一インスタンス内で管理することができるだろう。

図1 アクセス範囲を制限できる仮想プライベートデータベース 図1 アクセス範囲を制限できる仮想プライベートデータベース

コラム 仮想プライベートデータベース機能を別の方法で実現

仮想プライベートデータベース機能と同等の機能をほかの方法で実現する場合、「ビュー」を利用する。

ビューを利用することで、例えばある病院の外科の患者の情報だけを取り出したビューを作成し、アプリケーションからその病院の外科医がこれを使う場合、アクセス先をそのビューだけに限定することで、外科以外の患者の情報へのアクセスを制限することができる。

ただし、この方法の場合、ユーザーごとと条件ごとにビューを事前に用意する必要があるので、ユーザー数が多い場合などはあまり現実的ではない。

図2 ビューによるアクセス制限イメージ 図2 ビューによるアクセス制限イメージ

仮想プライベートデータベースの概要

 では、非常に簡単であるが、仮想プライベートデータベースの概念を説明する。仮想プライベートデータベースは、アプリケーションコンテキストとファイングレン・アクセス・コントロール(PL/SQLパッケージを利用して、WHERE条件を設定することができる)の2つの機能から構成されている(この2つを組み合わせることを仮想プライベートデータベースという)。

図3 仮想プライベートデータベースの構成イメージ 図3 仮想プライベートデータベースの構成イメージ

●アプリケーションコンテキスト

 アプリケーションコンテキストとは、セッション上の属性情報を格納するためのデータ保存領域で、仮想プライベートデータベースのアクセス権限などを格納している。

 仮想プライベートデータベースではユーザーのアクセス権限に合う条件句を作成するためにアプリケーションコンテキストを利用する。アプリケーションコンテキストは、アプリケーションコンテキスト名、属性、値の3つの要素から構成されている。

 また、1つのアプリケーションコンテキストには、複数の属性を持てる。例えば、患者情報を格納するPATIENT_DATAという名前のアプリケーションコンテキストを作成し、科部門名、担当医を、それぞれSURGERY、DOCTORという属性で値を保持できる。

●ファイングレン・アクセス・コントロール

 ファイングレン・アクセス・コントロールは、SQL文実行時に事前に設定されている条件を付与することにより、アクセス制御を実行する。

図4 ファイングレン・アクセス・コントロールイメージ(条件文により、アクセス制御されている) 図4 ファイングレン・アクセス・コントロールイメージ(条件文により、アクセス制御されている)

 ここからは、保存データの保護のもう一方のセキュリティ対策であるデータの暗号化について説明する。

保存データの暗号化

 Oracleデータベース内に保存されているデータは、暗号化することで不正アクセスから保護することができる(暗号化は、カラム単位で実装することが可能)。この暗号化については、DBMS_OBFUSCATION_TOOLKITに添付されているPL/SQLパッケージを利用することで実現できる。

列の暗号 DESEncrypt
DES3Encrypt
列の復号 DESDecrypt
DES3Decyrypt
列でのチェックサムの作成によるデータの整合性の保証 MD5
表2 DBMS_OBFUSCATION_TOOLKITパッケージに含まれるプログラム・ユニット

 PL/SQLパッケージは、DES(Data Encryption Standard)および3DESと呼ばれるアルゴリズムで暗号化することができる。また、MD5(Message Digest 5)を利用して、データのハッシュ化(符号化)を行うこともできる。

 データの暗号化および復号の最も簡単な方法は、DESEncryptプロシージャおよび、DESEncryptプロシージャの利用である。

・DESアルゴリズムによる暗号化

dbms_obfuscation_toolkit.DESEncrypt(
  input_string => v_input_string,
  key_string => v_key_string,
  encrypted_string => v_encrypted_string)

・DESアルゴリズムによる復号

dbms_obfuscation_toolkit.DESDecrypt(
  input_string => v_encrypted_string,
  key_string => v_key_string,
  decrypted_string => v_decrypted_string)

 またDESアルゴリズムは、56ビットの鍵を使用し、データを64ビットのブロック単位で暗号化する。また、DESEncryptプロシージャおよびDESDecryptプロシージャでは、key_stringパラメータに64ビットの鍵を提供する必要があることを付け加えておく。

コラム 保存データの暗号化のメリット

Oracle9iデータベースに保存されているデータを暗号化する必要があるのかと思う読者もおられるかもしれない。これまで連載で説明してきたネットワークおよびサーバのセキュリティ対策を行い、さらにOracle9iデータベースのセキュリティ対策を行っても、まだセキュリティ対策を行わなければならないのかと。

暗号化は、いままで説明してきたセキュリティ対策上の問題に対するソリューションでもあり、何よりもデータベースにアクセスできる内部ユーザーに対するセキュリティソリューションとしてそのメリットを理解する必要があると思う。

例えば、少し前に話題になった住基ネット(住民基本台帳ネットワーク)の場合も外部からのアクセスに対するセキュリティ対策については、しっかり行われているようだが、果たしてどのくらいの市町村役場で内部からの不正アクセスに対して万全な対策が取られているかは不明である。

そのような場合に、保存データの重要なものを暗号化しておけば、万が一不正アクセスが行われても、それがそのまま重要なデータの漏えいにはつながらないことを意味する(Oracle9iデータベースの場合、暗号鍵を利用してデータの暗号化を行っているので、この鍵に対して不正アクセスが同時に行われた場合は、その限りではない)。


コラム 通信データの暗号化のライセンス形態

Oracle9iデータベースでは、保存されているデータの暗号化については、Oracle9i Standard EditionおよびEnterprise Editionなどサーバのライセンス形態にかかわらず利用できるが、通信データの暗号化を実現するためには、別途Oracle Advanced Security Optionを購入する必要がある。

この点で、Oracle9iデータベースの製品ラインアップとして、基本的なセキュリティ対策機能については、サーバライセンス購入者に対して提供することができれば、Oracleデータベースのセキュリティ対策について、一貫した対策を行うことができるものと筆者は考えている。

このあたりについて次期バージョンでどういったライセンス形態になるかをぜひ日本オラクルに検討していただきたいと思う。

今回取り上げた、仮想プライベートデータベースについても利用しているユーザーは非常に少ないかと思われる(Oracle9iデータベースでは、Oracle Label Securityが仮想プライベートデータベースの拡張機能として提供されている。なお、今回紹介しなかったOracle Label Securityを利用する場合は、 Oracle9i Enterprise Editionとは別に購入する必要がある)。

さらに、詳細情報については、Oracle Technology Network Japan上でOracleデータベースのオンラインマニュアルなどを見ることで得られるだろう。まず、Oracle9iに幅広いセキュリティ対策機能があることを理解したうえで、システム構築の際の参考にしてもらえれば幸いだ。

※注意

Advanced Security Optionは、Oracle9i Enterprise Editionのオプション製品である。




 いかがだっただろうか。今回の記事により、Oracle9iデータベースの保存データのセキュリティ対策機能の概要は理解できたのではないだろうか。仮想プライベートデータベースと保存データの暗号化については、業務で利用する場面は少ないかもしれないが、Oracle9iデータベースでこんなことができるという意味で今回ご紹介した。

 次回は、Oracleデータベースの監査機能を紹介したいと思う。

筆者Profile

株式会社インターネット総合研究所 主任研究員。

篠田道明(しのだ みちあき)

大学時代に社会福祉を学び、現在は、ITコンサルタントとして、活動中。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。