Oracle Database 12c の新機能「Oracle Data Redaction」
今号では、Oracle Database 12c の新機能であるOracle Data Redaction 機能をご紹介します。是非ご一読ください。
Oracle Data Redaction
Oracle Data Redaction を使用すると、select 文の結果がアプリケーションに返される直前に、その結果に含まれる機密データをマスク (リダクション) できます。マスクといってもあくまでアプリケーションに返される情報がマスクされるだけであり、ディスクやキャッシュ上のデータが変更されるわけではありません。
例えば、コールセンターの職員が使用するアプリケーションにおいてクレジットカード番号の下 4 桁のみを表示するというように機密データを保護できます。
リダクションの方法
リダクションには以下の 4 つの方法があります。
- 1 完全リダクション
- 完全リダクションを使用すると、列の値が固定値にリダクションされます。具体的には以下のように処理されます。
- 文字データは 1 つの空白にリダクションされます。
- 数値データは 1 つのゼロにリダクションされます。
- 日時データは 2001/01/01 にリダクションされます。
例)
データベースのデータ リダクション済みデータAAAAAA ' ' 35000 0 2013/12/01 2001/01/01
なお、この固定値は DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES プロシージャを使用すれば変更することもできます。 - 2 部分リダクション
- 部分リダクションを使用すると、列の値が部分的に変更されます。
例えば、文字列の先頭 4 桁を「#」に変更したり、数値の先頭 3 桁を 9 に変更できます。例)
データベースのデータ リダクション済みデータABCDEFG ####EFG 35000 99900
部分リダクションは、なんらかの方法でデータがリダクションされていることを、データを参照しているユーザーに明らかにしたい場合に便利です。 - 3 正規表現を使用したリダクション
- 正規表現を使用して、パターン検索に基づいて列の値をリダクションできます。たとえば、ドメインのみが表示されるように電子メール・アドレスのユーザー名をリダクションできます。
正規表現を使用したリダクションは文字データのみで使用できます。
例)
データベースのデータ リダクション済みデータhpreston@example.com [redacted]@example.com
- 4 ランダム・リダクション
- ランダム・リダクションでは、値全体がランダムな値に置換されてリダクションされます。
表示されるリダクションされた値は、ユーザーが問合せを実行するたびに、ランダムに変更されます。例)
データベースのデータ リダクション済みデータABCDEFG pdK4nsq 987654321 390871042 2013/12/01 2010/05/06
ランダム・リダクションは、データがリダクションされていることを明らかにしたくない場合に便利です。
リダクションの対象外となる操作
以下の操作ではリダクションは行われません。
- SYS ユーザーとして接続して select 文を実行したとき
- Data Pump エクスポート、インポート
- RMAN によるバックアップ
リダクションの実装
リダクションを実装するためにはまずリダクション・ポリシーというものを作成します。
リダクション・ポリシーでは何を・どのように・どの条件が満たされたときにリダクションするのかを定義します。各々について以下の通り説明致します。
- 1 何をリダクションするか
- リダクションする列のスキーマ名、オブジェクト名 (表またはビューの名前)、列名を定義します。
- 2 どのようにリダクションするか
- 上述の 4 つのリダクション方法のうち 1 つを選んで定義します。
- 3 どの条件が満たされたときにリダクションするのか
- 例えば接続ユーザーが SCOTT 以外である場合のみリダクションを行うように定義できます。
リダクション・ポリシーを作成するには DBMS_REDACT.ADD_POLICY プロシージャを、上述のとおり定義した内容をパラメータに設定して実行します。
まとめ
このように、Oracle Data Redaction を使用するとアプリケーションを修正せずに列データのリダクションが行えます。 データのリダクションをシステムで実現する要件がある場合、本機能を使用することをご検討いただければと思います。
(オラクル事業部 技術担当サポートセンターG 長谷川)