Oracle Data Redaction (詳細編)

*以下は、サポート契約締結中のお客様に2015年2月号として配信しているサポートレターより一部抜粋して掲載しています。

Oracle Data Redactionとは

「リダクション」とは、権限のないユーザーへの機密データの公開を回避するために、データの表示内容を変更して伏字化を行う仕組みです。たとえば、クレジット・カード番号の一部が「#」で置き換えられて表示される、などの例が考えられます。

昨今、個人情報保護やセキュリティ対策が注目されるようになってきています。昨年は、データベース管理者によって大量の個人情報が持ち出され、外部に漏えいするという事件があり、社会的に大きなニュースにもなりました。これまでのような外部からの攻撃に対する対策を行うだけではなく、組織内部においても適切な権限分掌を行い、権限を持たないユーザーが機密データの閲覧をできないようにすることが求められています。

そのため今回は、以前にもご紹介させていただきました Oracle Data Redaction について、改めてご紹介いたします。
なお、前回は概要レベルのご紹介でしたが、今回は更に詳細な情報を掲載しております。

  • ※1 Oracle Data Redaction は Enterprise Edition の有償オプションである Oracle Advanced Security をご購入の方のみご使用になれます。Oracle Advanced Securityを購入されていない方はご使用になれませんのでご注意ください。
  • ※2 Oracle Data Redaction は Oracle Database 12c からのバックポートを含む Oracle Database 11g の PSR 11.2.0.4 にも実装されています。

Oracle Data Redaction のメリット

Oracle Data Redaction を使用することで、以下のようなメリットが得られます。

  • リダクション機能をデータベースで実装することができ、アプリケーションで考慮する必要がなくなります。
  • 権限のないユーザーやアプリケーションの開発者が機密データを参照できないため、組織内部における情報漏えいの防止につながります。
  • 実データを書き換える「マスキング」と違い、実データには影響がありません。

特に3つ目の「実データには影響がない」という点がポイントです。「マスキング」では、データ型やデータ形式、制約などを保ったまま、実データを書き換えます。この方法は、性能測定などのテスト環境において実データが不要である場合に適しています。しかし、一度実データを書き換えてしまうと元に戻すことはできないため、本番環境での機密データの保護には使用することができません。

一方、「リダクション」では実データの書き換えは行いません。権限を持たないユーザーが機密データを参照できない一方で、適切な権限を所有するユーザーは実データにアクセスすることができます。そのため、本番環境における機密データの保護にも使用することができます。

Oracle Data Redaction の使用方法

Oracle Database でリダクションを行うには、DBMS_REDACT パッケージの ADD_POLICYプロシージャを使用して「リダクション・ポリシー」を作成します。リダクション・ポリシーを作成または変更するユーザーには、DBMS_REDACT パッケージに対する実行権限が付与されていることが必要です。

リダクション・ポリシーで定義する内容と、対応する DBMS_REDACT.ADD_POLICY プロシージャのパラメータの一例を以下に示します。


何を:スキーマ、オブジェクト(表またはビュー)および列で指定
  • スキーマ名:OBJECT_SCHEMA
  • オブジェクト名:OBJECT_NAME
  • 列名:COLUMN_NAME
どのように:列のリダクション方法とその方法に必要なパラメータ
  • ファンクション・タイプ:FUNCTION_TYPE
  • ファンクション・パラメータ:FUNCTIONS_PARAMETERS
    または 正規表現パラメータ:REGEXP_PATTERN など
いつ:表またはビューの全ての列に対して評価されるSQL文で指定
  • ポリシー式:EXPRESSION

なお、使用可能なリダクション方法(ファンクション・タイプ)には、なし(NONE)、完全(FULL)、部分(PARTIAL)、ランダム(RANDOM)、正規表現(REGEXP)があります。

実際に使ってみよう!

たとえば、test ユーザが所有する card 表があるとします。test ユーザーには、DBMS_REDACT パッケージに対する実行権限が付与されていることを前提とします。
card表には以下のようなデータが含まれています。

NAME CARD_NUMBER
---------- -------------------------
TANAKA 1234-5678-9012-3456
SASAKI 4422-3355-8866-1177
TAKAHASHI 1357-2468-3579-4680
SMITH 3141-5926-5358-9793

card 表に対して、リダクション・ポリシーを設定します。この例では、CARD_NUMBER 列(varchar2 型)の 1 桁目から 12 桁目を「#」に置き換えるというリダクション・ポリシーを設定しています。

BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => 'test',
object_name => 'card', 
column_name => 'card_number',
policy_name => 'partial_redaction_varchar',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => 'VVVVFVVVVFVVVVFVVVV,VVVV-VVVV-VVVV-VVVV,#,1,12',
expression => '1=1'
);
END;
/

同じ card 表に対し、再度問合せを実行すると、以下のように表示されます。

NAME CARD_NUMBER
---------- -------------------------
TANAKA ####-####-####-3456
SASAKI ####-####-####-1177
TAKAHASHI ####-####-####-4680
SMITH ####-####-####-9793

なお、リダクション・ポリシーが設定されていても、SYS ユーザー 及び EXEMPT REDACTION POLICY システム権限を付与されているユーザーで問合せを実行するとリダクションは行われません。これらのユーザーで test.card 表を問い合わせた場合、全てのデータがリダクションされずに表示されます。

Enterprise Manager Cloud Control からの実行

同様のことを Enterprise Manager Cloud Control から実行することもできます。

  1. 対象データベースのページで「セキュリティ」タブから「データ・リダクション」を選択します。
  2. データベースにログインし、「データ・リダクション・ポリシー」セクションの「作成」をクリックします。必要なパラメータを記入し「オブジェクト列」セクションの「追加」をクリックします。
  3. リダクション・ポリシーの必要パラメータを設定し、「OK」をクリックします。
  4. 「ポリシーは正常に作成されました。」というメッセージが出たら、リダクション・ポリシーの作成は完了です。対象の表またはビューを問い合わせると、リダクションが実行されます。

まとめ

Oracle Data Redaction を使用することで、アプリケーションに変更を加えることなく、また、実データに影響を与えることなく、権限のないユーザーやアプリケーションの開発者が機密データを参照することを防ぐことができます。

昨今、個人情報保護やセキュリティ対策が注目されています。これを機に、Oracle Data Redaction のご使用を検討いただければ幸いです。

参考情報

(オラクル事業部 技術担当サポートセンターG 久米)

Oracle Data Redaction (詳細編)