TOP>企業情報>コラム>技術情報>徹底解説!Oracle Database 12cのすべて Vol.3

徹底解説!Oracle Database 12cのすべて Vol.3

前回はOracle Database 12cで新しく実装されたマルチテナント機能(Oracle Multitenant)の基本操作を紹介しました。第3回目となる今回は、Oracle Database 12cで進化したセキュリティとバックアップの機能を紹介します。

Vol.3 現場の課題に直接効く、12cのセキュリティとバックアップ新機能

リアルタイムにデータをマスキング。アプリケーションの変更は一切不要


Vol.1Vol.2で解説したように、Oracle Database 12c(以下、12c)ではクラウド対応の次世代データベースを目指してマルチテナント・アーキテクチャが採用されています。マルチテナント構成の場合、同一のハードウェア上で複数のプラガブル・データベース(PDB)が起動することになりますが、PDB間でデータベースのユーザとデータが分離されているため、スキーマを分けて1つのデータベースを共有しているようなマルチテナント構成と比べてセキュリティに優位性があります。仮に1つのPDB上でセキュリティが破られてしまったとしても、別のPDBにあるデータを閲覧したり改ざんすることはできないため、影響範囲を最小限に抑えることができます。

各PDBにおいてセキュリティ対策が必要になるという点では従来のバージョンと変わりませんが、12cではセキュリティの機能が大幅に強化されており、今まで実現できなかったデータのマスキングや権限分掌を簡単に行えるようになっています。

その中でも、12cの新機能である「Oracle Data Redaction」は、格納されているデータやアプリケーションに一切変更を加えず、リアルタイムにデータをリダクション(マスキング)できるというまさに現場が求めていた実用的な機能です。アプリケーションやユーザが持つ権限に応じて、SELECT結果に含まれるクレジットカード番号などの機密列をその場で別の文字に置換することができます。

リアルタイムなデータのマスキング

リアルタイムなデータのマスキング

似た名前の製品としてOracle Data Masking Packがありますが、使用用途は大きく異なりますのでご注意ください。Oracle Data Masking Packは格納データを実際にマスキングして本番に近いテスト・データを生成することを目的とした機能であり、Oracle Data RedactionはSELECT文で取り出したデータをその場でマスキングして表示させる機能です。結果的に機密データを伏せるという点では同じですが、マニュアル等の公式文書ではOracle Data Masking Packを使用する場合は「マスキング」、Oracle Data Redactionを使用する場合は「リダクション」とそれぞれ呼び分けています。

Oracle Data Masking Pack Oracle Data Redaction
実装方法 Oracle Enterprise Manager ・DBMS Redactパッケージ
・Oracle Enterprise Manager
機能の目的 テスト・データの生成 アクセス制御
データへの影響 格納データを永続的に変更 格納データを変更しない

Oracle Data Masking Packとの違い


Oracle Data Redactionでリダクションの対象となる列や条件を指定するには、DBMS_REDACTパッケージまたはOracle Enterprise Manager Cloud Control 12c(EM12c)を使用します。今回は、初めてでも簡単に設定できるEM12cの手順を紹介します。アプリケーションから見たリダクションの様子がイメージしやすいように、Oracle Application Expressにあらかじめ作成されているサンプル・アプリケーションの画面をもとに説明していきます。

Oracle Application Expressのサンプル・アプリケーション

Oracle Application Expressのサンプル・アプリケーション

※サンプル・アプリケーションの仕様については以下のマニュアルを参照してください。
http://docs.oracle.com/cd/E40395_01/doc/doc.42/b71110/demo_samp.htm#BCGCEFAE

リダクションの設定は直感的で非常に簡単


EM12cの最新バージョンである12.1.0.3から、Oracle Data Redaction用の設定画面が新しく実装されています。対象のスキーマとオブジェクトを選択し、ポリシー式ビルダーにしたがってリダクションされる条件を指定するだけで、誰でも簡単に設定を行うことができます。今回は「DEMO」ユーザの「DEMO_CUSTOMERS表(顧客管理表)」をリダクションの対象に設定します。

Oracle Data Redactionの設定画面

Oracle Data Redactionの設定画面

ポリシー式ビルダーでは、クライアントのIPアドレスやアプリケーション名など、あらかじめ定義された11の項目をもとにリダクションの条件を指定できます。今回はローカル・ホスト以外のアクセスでリダクションが行われるように設定します。

ポリシー式ビルダー

ポリシー式ビルダー

続いて、リダクション対象となる列とリダクションのパターンを指定します。今回は顧客管理表の住所列(CUST_STREET_ADDRESS1,2列)を対象とし、RANDOMリダクションを選択します。メールアドレスやクレジット・カード番号をリダクションする場合、あらかじめ用意されているリダクション・テンプレートを使用することもできます。

リダクション対象の列とパターンの指定

リダクション対象の列とパターンの指定

リダクションのパターンは全部で4種類あります。列の値を部分的に伏せたり、ランダムな値に変換して返したりといった指定ができます。アプリケーションの画面表示における都合上、必ず同じ桁数で結果を返さなければならない場合などにも柔軟に対応できます。

FULL
(フル・リダクション)
データ型に応じて任意の値を返す。
デフォルトでは以下の値を返す。
 ・文字列型 → シングル・スペース
 ・数値型   → ゼロ(0)
 ・日付型   → 01-JAN-01
 ・LOB型   → [ redacted ]
RANDOM
(ランダム・リダクション)
データ型に応じてランダム値を返す。
 ・文字型列 → ランダム文字
 ・数値型   → ランダム数値
 ・日付型   → ランダム日付
 ・LOB型   → 使用不可
PARTIAL
(部分リダクション)
データ型に応じて部分的に任意の値を返す。
 ・文字列型 → 部分的に任意の文字列
 ・数値型   → 部分的に任意の数値
 ・日付型   → 部分的に任意の日付
 ・LOB型   → 使用不可
REGEX
(正規表現リダクション)
正規表現を使用して任意の値を返す。

リダクションのパターン


これでリダクションの設定は完了です。早速、サンプル・アプリケーションを使ってリダクションの効果を確認してみましょう。リダクションを設定する前の画面表示は以下のようになっています。特にデータが伏せられることなく顧客情報が表示されています。

リダクション前の顧客情報検索画面

リダクション前の顧客情報検索画面

ここで先ほどのリダクション設定を適用すると、以下のようにAddress列がランダム文字に置換されます。もちろんサンプル・アプリケーションの表構成や実行されるSELECT文は一切変更していません。リダクションを設定し、Webブラウザから画面を更新するだけで表示結果が変わります。

リダクション後の顧客情報検索画面

リダクション後の顧客情報検索画面

このように、12cのOracle Data Redactionを使用すれば誰でも簡単にリアルタイムなリダクションを行うことができます。今回は1列のみを対象としましたが、複数の列を対象にしたり、時間帯に応じて設定をON/OFFするといったこともできます。なお、Oracle Data RedactionではSELECT文で取り出された結果だけを対象にリダクションを行っているので、性能が大きく劣化することもありません。これまでアプリケーション側で実装していたリダクションの設定が、データベース側でしかも簡単に行えるようになっているので、是非試してみてください。

Oracle Data RedactionはOracle Advanced Securityオプションの新機能として提供されており、12cだけではなく11gR2のターミナル・リリースである11.2.0.4.0にもバックポートされているので、今すぐ12cにバージョンアップできないという場合でも使用できます。

RMANが『表単位』のPoint-in-Timeリカバリに対応


Oracle Databaseにおける定番のバックアップ・ツールと言えば、Recovery Manager(RMAN)ですが、12cでは表単位のPoint-in-Timeリカバリが可能になるなど大幅な機能強化が行われています。これまでの RMANでは、データベースや表領域といった大きな単位でしかPoint-in-Timeリカバリをサポートしていませんでしたが、12cでは影響範囲を最小限に抑えたリカバリ操作が可能になっています。

表単位のPoint-in-Timeリカバリに必要なのは、RMANによるデータベースのバックアップとリカバリする時間までのアーカイブログ・ファイルです。バックアップを取得する際に特別なコマンドは必要ありません。今回は簡単なサンプル・データを使用して表単位のPoint-in- Timeリカバリを行います。

 ①バックアップの取得

バックアップの取得


途中RMANでSELECT文を発行していますが、12cではRMANからSQLを直接実行できるように機能が拡張されています。したがって、これまでのバージョンのように「SQL~」とわざわざ指定する必要がなくなりました。

バックアップが完了したら、疑似障害としてTAB1表を削除します。PURGE付きでDROPしてしまったのでデータを復旧するにはバックアップしたファイルをリカバリするしかありません。

 ②疑似障害の発生

疑似障害の発生


11gR2以前のバージョンでは表単位のリカバリができないため、たとえTAB1表以外のデータが正常だとしてもデータベース全体(または表領域全体)を過去の状態に戻さなければなりませんでしたが、12cでは以下のようにRECOVER TABLE文が使用できます。今回はバックアップが完了した時刻(2013-09-17 19:39:26)までTAB1表をリカバリします。

 ③表単位のPoint-in−Timeリカバリ

表単位のPoint-in−Timeリカバリ


これでTAB1表は元どおりになりましたが、リカバリの際に指定したAUXILIARY DESTINATIONという見慣れないオプションやリカバリ中に登場する『自動インスタンス』とは一体何者なのでしょうか?実はこれが表単位のPoint-in-Timeリカバリを実現するための最も重要な要素なのです。

表単位のPoint-in-Timeリカバリを実行すると、内部的にリカバリ対象のインスタンスとは別に「自動インスタンス(補助インスタンス)」を立ち上げて、いったんそこでリカバリを行い、そこから抽出したデータがリカバリ対象に投入されます。リカバリ時に指定したAUXILIARY DESTINATIONは自動インスタンスが起動するための一時的な作業領域です。

表単位のPoint-in-Timeリカバリの内部動作

表単位のPoint-in-Timeリカバリの内部動作

一見すると回りくどいリカバリ動作のように見えますが、自動インスタンスでリカバリ用のデータを生成しているため、リカバリ対象のDBに対する負荷が低くなるというメリットがあります。また、自動インスタンスのダンプ・ファイルを使って「表を別の名前でリカバリする」、「別の表領域にリカバリする」、「リカバリを行わず、ダンプ・ファイルだけを保存する」といった操作を行うこともできます。例えば、先ほどのTAB1をTAB2という名前でリカバリするには以下のコマンドを実行します。

 ④表を別の名前でリカバリする

表を別の名前でリカバリする


このように、表を元どおりにリカバリすることだけがこの機能のすべてではありません。特別な設定を行わずに普段から取得しているRMANバックアップを使って任意の時点のデータを生成できるため、RMANとは別にExportによる論理バックアップを取得するといった2重バックアップによる運用をなくすこともできます。バックアップを使って開発環境に任意の表だけをコピーするといった使い方もできるでしょう。RECOVER TABLE文など新しいコマンドが増えていますので、12cにバージョンアップした際は、表単位でリカバリを行うためのオペレーションを確認しておくことをお勧めします。


執筆者紹介

岸和田 隆(Takashi Kishiwada)

株式会社アシスト データベース技術本部

アシスト入社後、Oracle Database の研修講師、フィールド・ サポート、新バージョンの検証を経て、2007年 自社ブランド 「DODAI」の準アプライアンス製品の企画・開発、2009年 PostgreSQL、2011年 EDB Postgres、MySQL / MariaDB の事業立上を担当。 現在は「データベースのアシスト」を目指した活動を行っている。

岸和田の紹介記事はこちら



関 俊洋(Toshihiro Seki)

株式会社アシスト データベース技術本部

2006年、株式会社アシスト入社。データベース・システムの構築や運用トラブルの解決といったフィールド・サポート業務を経験し、その後は新製品の検証やハードウェアとデータベースを組み合わせたソリューション(DODAI)の立ち上げに従事。現在はデータベースの価値や魅力を伝えるための執筆・講演活動を行っている。『SQL逆引き大全363の極意』共著。

関の紹介記事はこちら

「徹底解説!Oracle Database 12cのすべて」 連載記事一覧

関連製品


Facebookで情報をお届けしています

Facebookでは、アシストの「今」を週3回のペースでお届けしています。「めげない、逃げない、あまり儲けない」を合言葉に日々頑張っておりますので、応援よろしくお願いします。



ページの先頭へ戻る