4 データ・マスキング

この章では、Oracleデータ・マスキングを構成するコンポーネントの概念と、マスキング・フォーマットやマスキング定義の作成など、タスク順序を実行する手順について説明します。データ・マスキングでは、機密列が定義されたアプリケーション・データ・モデル(ADM)が作成されていることを前提としています。

この章の手順は、Oracle Enterprise Manager Cloud Control 12.1以上のみに適用されます。データ・マスキング機能を使用するには、Oracle Data Masking and Subsetting Packライセンスが必要です。

注意:

Database Plug-in 12.1.0.3以上を使用する11.2.0.3データベースでマスキングを実行するには、マスキングを正常に実行するためにデータベース・パッチ#16922826の適用が必要です。エクスポート内マスク機能(ソース・マスキングとも呼ばれる)は、Oracle Database 11.1以上で動作します。

Oracleデータ・マスキングの概要

企業は、アプリケーション開発、テストまたはデータ分析のために本番データを非本番環境にコピーする際に、機密情報が漏えいするリスクにさらされます。Oracleデータ・マスキングを使用すると、元の機密データを架空のデータに不可逆的に置き換え、本番データを非本番ユーザーと安全に共有できるようにすることで、このようなリスクを低減できます。Oracleデータ・マスキングはOracle Enterprise Managerからアクセス可能で、エンドツーエンドの安全な自動化により、本番データを元に規制に準拠したテスト・データベースを提供します。

データ・マスキングの概念

データ・マスキング(データ・スクランブルやデータの匿名化とも呼ばれる)は、本番データベースから非本番テスト・データベースにコピーされる機密情報を、外見は本物であるもののマスキング・ルールに基づいて修正されたデータに置き換えるプロセスのことです。データ・マスキングは、機密データまたは規制対象のデータを非本番ユーザーと共有する必要があるほぼすべての状況において最適です。そのようなユーザーには、アプリケーション開発者などの内部ユーザーや、海外のテスト企業、サプライヤ、カスタマなどの外部のビジネス・パートナなどが含まれます。このような非本番ユーザーは、すべての表のあらゆる列を参照する必要はありませんが、元のデータの一部にはアクセスする必要があります(特に情報が政府の規制によって保護されている場合)。

データ・マスキングを使用すると、組織ではオリジナル・データに類似した特性を持つ、外見は本物で完全に機能するデータを生成し、機密情報のかわりに使用することができます。これと対照的な暗号化や仮想プライベート・データベースの場合は、データが単に隠されるだけであり、適切なアクセス権やキーがあればオリジナル・データを取得できます。データ・マスキングの場合は、元の機密データを取得することも、元の機密データにアクセスすることもできません。

情報コンテンツを不適切な開示から保護すべきデータの例としては、名前、住所、電話番号、クレジット・カードの詳細情報などがあります。本物の本番稼働データベース環境には、貴重な機密データが含まれており、そのような情報へのアクセスは厳重に規制されます。ただし、各本稼働システムには通常、開発用のコピー・データがあり、そのようなテスト環境に対する規制はさほど厳しくありません。これにより、データが不適切に使用されるリスクが非常に高くなります。データ・マスキングでは、データベースの機密レコードを変更し、利用可能ではあるものの機密情報も個人情報も含まれないようなデータにすることができます。マスクされたテスト・データは、アプリケーションの整合性を確保するために、外見はオリジナル・データに類似しています。

データ・マスキング・ユーザーのロール

通常のエンタープライズの場合は、次のタイプのユーザーがデータ・マスキング・プロセスに関与します。

  • アプリケーション・データベース管理者またはアプリケーション開発者

    このユーザーは、アプリケーションおよびデータベースのオブジェクトに精通しています。このユーザーは、カスタムなデータベース・オブジェクトまたは拡張機能をOracle E-Business Suiteのようなパッケージ・アプリケーションに追加する場合もあります。

  • 情報セキュリティ管理者

    このユーザーは、情報セキュリティ・ポリシーの定義、セキュリティに関するベスト・プラクティスの施行、および隠蔽および保護の対象とすべきデータの推奨を行います。

Oracleのセキュリティ関連の製品

データ・マスキング以外に、Oracleでは次のセキュリティ製品を提供しています。

  • 仮想プライベート・データベースまたはOracle Label Security - ユーザーのアクセス権限に基づいて、行およびデータを隠します。

  • 透過的データ暗号化 - ディスクに格納されている情報を暗号化を使用して隠します。暗号化されていない情報は、クライアントに表示されます。

  • DBMS_CRYPTO: ユーザー・データを暗号化できるサーバー・パッケージが得られます。

  • Database Vault - データに対するアクセス制御を強化できます。

データ・マスキングについてのエージェントの互換性

データ・マスキングは、Oracle Database 9i 以上のリリースをサポートしています。11.1より前のバージョンを保有している場合、次の回避策を実行することで、そのバージョンを使用できます。

次のファイルを置き換えます。

AGENT_HOME/sysman/admin/scripts/db/reorg/reorganize.pl

... 次のファイルと置き換えます。

OMS_HOME/sysman/admin/scripts/db/reorg/reorganize.pl

フォーマット・ライブラリとマスキング定義

データのマスキングを対象として、Data Masking Packでは次の2つの主要な機能を提供しています。

  • マスキング・フォーマット・ライブラリ

    すぐに利用可能な一連のマスキング・フォーマットが入ったフォーマット・ライブラリです。このライブラリは、マスキングに利用可能な一連のフォーマット・ルーチンから構成されています。マスキング・フォーマットには、ユーザーが作成したものか、Oracle付属のデフォルト・マスキング・フォーマットのリストから取得したものを使用できます。

    組織では、一般的に規制の対象になるすべての情報に対してマスキング・フォーマットを作成し、機密データが属するデータベースとは無関係に機密データにフォーマットを適用できるようにすることをお薦めします。そうしておけば、組織全体にわたり、全機密データに対するマスキングを首尾一貫して行うことができます。

  • マスキング定義

    マスキング定義では、1つのデータベース内の1つまたは複数の表に実装されるデータ・マスキング操作を定義します。マスキング定義では、データのマスキングに使用する表の列とフォーマットを関連付けます。また、データベース内で正式に宣言されない列間の関係も、関連列を使用して維持されます。

    マスキング操作には、新しいマスキング定義を作成することもできますし、既存の定義を使用することもできます。マスキング定義を作成するには、データがマスキングの対象となる表の列とマスク・データのフォーマットを指定します。マスク対象の列が一意な主キー制約または外部キー制約に関与している場合は、データ・マスキングにより、それらの制約に違反しないような値が生成されます。マスキングでは、10進演算を使用して文字ごとの一意性が確保されます。たとえば、5文字の文字列では最大で99999個の一意な値のみが生成されます。同様に、1文字の文字列では最大で9個の一意な値のみが生成されます。

    通常は、マスキング定義をファイルにエクスポートした後、他のシステムにインポートします。テスト・サイトと本番サイトが、別々のOracle Management Systemにある場合や、まったく別のサイトにある場合には、これが重要です。

関連項目:

オンライン・ヘルプのデータ・マスキングの作成に関する説明および各「データ・マスキング」ページのヘルプを参照してください。

データ・マスキングで推奨されるワークフロー

次の図は、ステージング領域に本番データベースのクローンが作成され、そこでマスキングされることを示しています。マスキングのプロセスでは、ステージング領域およびテスト領域は本番サイトのように厳重に規制されます。

図4-1 データ・マスキングのワークフロー

図4-1の説明が続きます
「図4-1 データ・マスキングのワークフロー」の説明

データ・マスキングは、セキュリティ管理者によって処理され、データベース管理者によって実装される、反復され改良される処理です。データ・マスキングを最初に構成する場合は、テスト・システムでマスキング定義を十分に試してから、マスキング定義に追加する列の数を増やし、マスキング定義が適切に機能し、かつアプリケーションの制約に違反しないことをテストします。この過程において、実データに対するすべての埋込み参照を削除する際に、参照整合性を維持するように注意する必要があります。

データ・マスキングを納得いくまで構成したら、クローニング後に既存の定義を使用して繰り返しマスキングを行うことができます。ただし、新しいスキーマの変更によって新しいデータおよび列のマスキングが必要になったら、マスキング定義を修正する必要があります。

マスキング・プロセスが終わると、データベースは広く利用可能な状態にすることができます。データベースを別のサード・パーティ・サイトに移送する場合は、データ・ポンプ・エクスポート・ユーティリティを使用してリモート・サイトにダンプ・ファイルを移送する必要があります。ただし、マスキングされたデータを社内に保持する場合は、「データ・マスキング・タスクの順序」を参照してください。

サブセット定義の作成時に、インラインでまたはソースで、データ・マスキングを実行できます。

データ・マスキング・タスクの順序

この項のタスク順序では、データ・マスキングのワークフローを具体的に示すと同時に、一部のタスク順序では追加情報を紹介します。この順序を確認する前に、このプロセスを完了するためのオプションが2つあることに注意してください。

  • 別のデータベースへのエクスポートおよびインポート

    本番データベースをステージング領域にクローニングしてマスキングし、別のデータベースにエクスポートおよびインポートしてから、社内テスト実行者または外部のカスタマに提供できます。これは最も安全な方法です。

  • テスト・リージョンとしてのステージング領域の使用

    本番データベースをマスキングされたステージング領域にクローニングし、そのステージング領域を新しいテスト・リージョンにします。この場合は、SYSDBAアクセスや、データベース・ファイルへのアクセス権をテスト実行者に付与しないでください。付与するとセキュリティが低下します。マスキングされたデータベースでは、未使用ブロックと空きリストに元のデータが含まれます。この情報は、データを別のデータベースにエクスポート/インポートすることでのみパージできます。

次の基本的なステップは、データ・マスキング・プロセスを、追加情報が記載されている他のセクションの参照箇所とともに示します。

  1. アプリケーション・データベースを見直し、機密情報のソースを特定します。
  2. 機密データのマスキング・フォーマットを定義します。マスキング・フォーマットがシンプルであるか複雑であるかは、組織の情報セキュリティに対するニーズによって異なります。
  3. これらのマスク・フォーマットに表の列とエディション・ビュー・オブジェクトを関連付けるために、マスキング定義を作成します。データ・マスキングにより、データベースの外部キー関係が決定され、外部キー列がマスクに追加されます。
  4. マスキング定義を保存してマスキング・スクリプトを生成します。
  5. マスキングされたデータが情報セキュリティ要件を満たしているかどうかを確認します。満たしていない場合は、マスキング定義を調整し、変更した表をリストアした後、マスキング定義の最適なセットが得られるまでマスキング定義の適用を繰り返します。
  6. 本番データベースをステージング領域にクローニングし、クローニング後に使用するマスキング定義を選択します。Oracle Enterprise Managerを使用してクローンを作成し、Oracle Enterprise Managerのクローン・ワークフローにマスキングを追加できます。ただし、Oracle Enterprise Manager外でクローンを作成した場合は、クローンの作成が完了した後にOracle Enterprise Managerからマスキングを開始する必要があります。クローニングされたデータベースは、本番環境用の機密データがまだ含まれているので、本稼働システムと同じ権限で制御する必要があります。

    クローニングの後、パスワードを変更し、外部データ・ソースへのデータベース・リンク、ストリームまたは参照を更新するか無効にしてください。クローニングされたデータベース、または少なくともマスキングされたデータが含まれる表をバックアップします。そうしておけば、マスキング定義をさらに調整する必要がある場合に、オリジナル・データをリストアできます。

  7. マスキングが終わったら、アプリケーション、レポートおよびビジネス・プロセスをすべてテストし、それらが機能していることを確認します。すべて正常に機能している場合は、マスキング定義をエクスポートし、バックアップとして保存することができます。
  8. ステージング・サイトのマスキング後、テスト・リージョンにクローニングする前に、MGMT_DM_TTという表をすべて削除します。これらの一時表は、元の機密列値とマスク値間のマッピングを含んでいるため、機密データとして扱う必要があります。

    これらの一時表は、デフォルトの「マスキング中に作成した一時表の削除」オプションにより、Oracle Enterprise Managerでマスキング中に自動的に削除されます。ただし、このオプションの選択を解除することで、これらの一時表を維持できます。この場合、テスト・リージョンにクローニングする前にユーザーの責任で一時表を削除します。

  9. マスキングが完了したら、置換列フォーマットまたは表の列フォーマットによって使用するためにロードされたすべての表が削除されることを確認します。これらの表には、表の列フォーマットまたは置換フォーマットによって使用されるマスク値が含まれています。セキュリティ上の理由から、この情報をパージすることをお薦めします。
  10. データベースをテスト・リージョンにクローニングするか、データベースを新しいテスト・リージョンとして使用します。データベースを外部サイトまたは安全でないサイトにクローニングする場合、エクスポートまたはインポートを使用することをお薦めします。データベース・ファイル自体ではなく、データベースのみにデータを指定します。
  11. テスト用のクローニングされた本番環境の一部として、マスキング定義をアプリケーション・データベース管理者に提供し、データベースをマスキングできるようにします。

マスキング・フォーマットの定義

マスキング定義では、そのマスキング定義に含まれる列に対する1つ以上のマスキング・フォーマットが必要です。マスキング定義に列を追加する場合、マスキング・フォーマットを手動で作成するか、フォーマット・ライブラリからインポートすることができます。多くの場合、フォーマット・ライブラリのマスキング・フォーマットを使用して作業する方が効率的です。

新規マスキング・フォーマットの作成

この項では、Enterprise Managerを使用して新規マスキング・フォーマットを作成する方法について説明します。

フォーマット・ライブラリにマスキング・フォーマットを作成するには、次の手順を実行します。

  1. 「エンタープライズ」メニューから「クオリティ管理」を選択し、次に「データ・マスキングのフォーマット」を選択します。あるいは、「データベース」ホーム・ページにいる場合は、「スキーマ」メニューから「データ・マスキングのフォーマット・ライブラリ」を選択します。

    Oracle Enterprise Managerに付属する事前定義済のフォーマットが含まれたフォーマット・ライブラリが表示されます。

  2. 「作成」をクリックします。

    マスキング・フォーマットを定義できる「フォーマットの作成」ページが表示されます。

    関連項目:

    オンライン・ヘルプのページ・ユーザー・コントロールに関する説明を参照してください。

  3. 新規フォーマットに必要な名前を指定し、「追加」リストからフォーマット・エントリ・タイプを選択して、「実行」をクリックします。

    選択したフォーマット・エントリにデータを入力できるページが表示されます。たとえば、「配列リスト」を選択した場合、後続のページでは、New York、New Jersey、New Hampshireなどの値のリストを入力できます。

  4. 必要に応じて続けて別のフォーマット・エントリを追加します。

  5. 次に、オプションのユーザー定義または後処理関数を指定して「OK」をクリックし、マスキング・フォーマットを保存します。

    「フォーマット・ライブラリ」ページが再表示され、新しく作成したフォーマットが「フォーマット・ライブラリ」表に表示されます。後でこのフォーマットを使用して、同じ機密タイプの列をマスキングできます。

    関連項目:

    オンライン・ヘルプの「フォーマット・ライブラリ」および「フォーマットの作成」ページに関する説明を参照してください。

ユーザー定義関数および後処理関数の指定

必要に応じて、「フォーマットの作成」ページでユーザー定義関数および後処理関数を指定できます。ユーザー定義の選択肢は「追加」リスト内、後処理関数フィールドはページ下部にあります。

  • ユーザー定義関数

    ユーザー定義関数を指定するには、「追加」リストから「ユーザー定義関数」を選択し、「実行」をクリックして、入力フィールドにアクセスします。

    ユーザー定義関数は、元の値を入力として受け取り、マスク値を戻します。出力値のデータ型と一意性は、元の出力値と互換性がある必要があります。それ以外の場合、ジョブの実行に失敗します。また、ユーザー定義関数は、SELECT文で起動できるPL/SQLファンクションです。シグネチャは、次のように戻されます。

    Function udf_func (rowid varchar2, column_name varchar2, original_value varchar2) returns varchar2;
    
    • rowidは、第3引数のoriginal_valueの値を含む行の最小値(rowid)になります。

    • column_nameはマスキングされる列の名前です。

    • original_valueはマスキングされる値です。

    つまり、それは、元の値を入力文字列として受け取り、マスク値を戻します。

    入力値と出力値は、両方ともVARCHAR2です。たとえば、数値をマスキングするユーザー定義関数は、入力として100を受け取り(数値100の文字列表現)、99を戻します(数値99の文字列表現)。値は、表への挿入時に適切にキャストされます。値をキャストできない場合、マスキングは失敗します。

  • 後処理関数

    後処理関数を指定するには、「後処理関数」フィールドに関数を入力します。

    後処理関数は、ユーザー定義関数と同じシグネチャを持ちますが、マスキング・エンジンが生成したマスク値を受け取り、マスキングに使用できるマスク値を戻します。次の例を参照してください。

    Function post_proc_udf_func (rowid varchar2, column_name varchar2, mask_value varchar2) returns varchar2;
    
    • rowidは、mask_valueの値を含む行の最小値(ROWID)です。

    • column_nameはマスキングされる列の名前です。

    • mask_valueはマスキングされる値です。

マスキング・フォーマット・テンプレートの使用

1つ以上のフォーマットを作成したら、「フォーマットの作成」ページでテンプレートとしてフォーマット定義を使用し、新規フォーマットを最初から作成することなく、フォーマットの大部分を異なる名前で実装し、必要に応じてそのエントリを変更できます。

既存のフォーマットに似た新規フォーマットを作成するには、「フォーマット・ライブラリ」ページでフォーマットを選択し、「類似作成」をクリックします。マスキング・フォーマットには、以前に自分で定義したフォーマットか、即時利用可能なマスキング・フォーマットのリストから取得したフォーマットを選択できます。これらの汎用マスキング・フォーマット定義は、様々なアプリケーションに使用できます。

様々なOracle付属の事前定義済のマスキング・フォーマット定義と、要件に合せてそれらを変更する方法の詳細は、「Oracle付属の事前定義済のマスキング・フォーマットの使用」を参照してください。

ユーザー定義関数および後処理関数の指定

必要に応じて、「フォーマットの作成」ページでユーザー定義関数および後処理関数を指定できます。ユーザー定義の選択肢は「追加」リスト内、後処理関数フィールドはページ下部にあります。

  • ユーザー定義関数

    ユーザー定義関数を指定するには、「追加」リストから「ユーザー定義関数」を選択し、「実行」をクリックして、入力フィールドにアクセスします。

    ユーザー定義関数は、元の値を入力として受け取り、マスク値を戻します。出力値のデータ型と一意性は、元の出力値と互換性がある必要があります。それ以外の場合、ジョブの実行に失敗します。また、ユーザー定義関数は、SELECT文で起動できるPL/SQLファンクションです。シグネチャは、次のように戻されます。

    Function udf_func (rowid varchar2, column_name varchar2, original_value varchar2) return varchar2;
    
    • rowidは、第3引数のoriginal_valueの値を含む行の最小値(rowid)になります。

    • column_nameはマスキングされる列の名前です。

    • original_valueはマスキングされる値です。

    つまり、それは、元の値を入力文字列として受け取り、マスク値を戻します。

    入力値と出力値は、両方ともVARCHAR2です。たとえば、数値をマスキングするユーザー定義関数は、入力として100を受け取り(数値100の文字列表現)、99を戻します(数値99の文字列表現)。値は、表への挿入時に適切にキャストされます。値をキャストできない場合、マスキングは失敗します。

  • 後処理関数

    後処理関数を指定するには、「後処理関数」フィールドに関数を入力します。

    後処理関数は、ユーザー定義関数と同じシグネチャを持ちますが、マスキング・エンジンが生成したマスク値を受け取り、マスキングに使用できるマスク値を戻します。次の例を参照してください。

    Function post_proc_udf_func (rowid varchar2, column_name varchar2, mask_value varchar2) return varchar2;
    
    • rowidは、mask_valueの値を含む行の最小値(ROWID)です。

    • column_nameはマスキングされる列の名前です。

    • mask_valueはマスキングされる値です。

Oracle付属の事前定義済のマスキング・フォーマットの使用

Enterprise Managerには、即時利用可能ないくつかの事前定義済フォーマットが用意されています。.様々な事前定義済フォーマットと組込みフォーマットが用意されています。次の項では、様々なOracle付属のフォーマット定義と、要件に合せてそれらを変更する方法について説明します。

関連項目:

事前定義済のマスキング・フォーマットを使用できるようにDM_FMTLIBパッケージをインストールする方法の詳細は、「DM_FMTLIBパッケージのインストール」を参照してください

フォーマット定義のパターン

すべてのフォーマット定義は、次の一般的なパターンに準拠します。

  • ランダム数値またはランダム桁数を生成します。

  • 生成された値に後処理が実行され、有効で現実的な値が最終的に生成されます。

たとえば、クレジット・カード番号が有効であるためには、Luhnチェックに合格する必要があります。つまり、クレジット・カード番号の最後の桁はチェックサム桁であり、この桁は常に計算されます。また、最初の数桁は、カード・タイプを示します(MasterCard、Amex、Visaなど)。したがって、クレジット・カードのフォーマット定義は、次のようになります。

  • ランダムで一意な10桁の数値を生成します。

  • 後処理関数の使用により、既知のカード・タイプ接頭辞を追加して最後の桁を計算することで、前述の値を適切なクレジット・カード番号に変換します。

このフォーマットにより、100億個の異なるクレジット・カード番号を生成できます。

カテゴリ定義

次の項では、これらの定義の異なるカテゴリについて説明します。

デフォルトでは、これらのマスキング・フォーマットは、ハイフン(-)形式などの異なるフォーマット・スタイルでも使用できます。フォーマット・スタイルは、必要に応じて変更できます。

クレジット・カード番号

デフォルトで、フォーマット・ライブラリには、クレジット・カード用の異なるフォーマットが多数用意されています。これらのフォーマットにより生成されたクレジット・カード番号は、アプリケーションによる標準的なクレジット・カード検証テストに合格するため、有効なクレジット・カード番号を装うことができます。

次のようなクレジット・カード・フォーマットを使用できます。

  • MasterCard番号

  • Visaカード番号

  • American Expressカード番号

  • Discover Card番号

  • 任意のクレジット・カード番号(すべてのタイプのカードに属するクレジット・カード番号)

クレジット・カード番号を格納するために、次のような異なるスタイルを使用できます。

  • 番号のみ

  • 4桁ごとに空白を挿入

  • 4桁ごとにハイフン(-)を挿入、など

マスキングされた値に特定のフォーマット・スタイルを適用するには、DM_FMTLIBパッケージのDM_CC_FORMAT変数を設定します。パッケージをインストールするには、「DM_FMTLIBパッケージのインストール」を参照してください。

米国社会保障番号

デフォルトで、有効な米国社会保障番号(SSN)を生成できます。これらのSSNは、有効なSSNを検証する通常のアプリケーション・テストに合格します。

DM_FMTLIBパッケージのDM_SSN_FORMAT変数を設定すると、フォーマット・スタイルを変更できます。たとえば、この変数を「-」に設定すると、一般的な社会保障番号は「123-45-6789」のように示されます。

ISBN番号

フォーマット・ライブラリを使用して、10桁または13桁のISBN番号を生成できます。これらの番号は、標準的なISBN番号検証テストに合格します。これらのISBN番号は、事実上すべてランダムです。他のフォーマット定義と同様に、DM_ISBN_FORMATに値を設定することでISBNフォーマットのスタイルを調整できます。

UPC番号

フォーマット・ライブラリを使用して、有効なUPC番号を生成できます。これらの番号は、有効なUPC番号を検証する標準的なテストに合格します。DM_FMTLIBパッケージのDM_UPC_FORMAT値を設定すると、フォーマット・スタイルを変更できます。

カナダの社会保険番号

フォーマット・ライブラリを使用して、有効なカナダ社会保険番号(SIN)を生成できます。これらの番号は、カナダSIN番号を検証する標準的なテストに合格します。フォーマット・スタイルを調整するには、DM_FMTLIBパッケージのDM_CN_SIN_FORMAT値を設定します。

北米電話番号

デフォルトで、フォーマット・ライブラリには、米国およびカナダの様々な電話番号が用意されています。これらは、見かけ上有効で現実的な番号であり、アプリケーションで採用されている標準的な電話番号検証テストに合格します。次のタイプの番号を生成できます。

  • 任意の北米電話番号

  • 任意のカナダ電話番号

  • 任意の米国電話番号

イギリスの国民保険番号

フォーマット・ライブラリを使用すると、有効な一意のイギリスの国民保険番号(NIN)をランダムに生成できます。これらの番号は、イギリスのNIN番号を検証する標準的なテストに合格します。一般的な保障番号は、GR 12 56 34 RSなどのように表示されます。

自動マスク

このフォーマットでは、データのフォーマットおよび長さを維持しながら、特殊文字を含む文字および数字をABCD_343-ddgからFHDT_657-tteへなど、マスキングされた文字および数字にスクランブルします。

DM_FMTLIBパッケージのインストール

事前定義済のマスキング・フォーマットは、DM_FMTLIBパッケージに定義されたファンクションを使用します。このパッケージは、Enterprise Managerリポジトリ・データベースのDBSNMPスキーマに自動的にインストールされます。(リポジトリ・データベースではなく)ターゲット・データベースで事前定義済のマスキング・フォーマットを使用するには、手動でそのデータベースにDM_FMTLIBパッケージをインストールする必要があります。

DM_FMTLIBパッケージをインストールするには、次の手順を実行します。

  1. Enterprise Managerのインストール環境で次のスクリプトを検索します。

    $PLUGIN_HOME/sql/db/latest/masking/dm_fmtlib_pkgdef.sql
    $PLUGIN_HOME/sql/db/latest/masking/dm_fmtlib_pkgbody.sql
    

    PLUGIN_HOMEは、SYSMANとして実行される次のSQL SELECT文によって返される場所のいずれかです。

    select PLUGIN_HOME from gc_current_deployed_plugin where plugin_id='oracle.sysman.db' and destination_type='OMS'; 
    
  2. これらのスクリプトをターゲット・データベースのインストール環境にあるディレクトリにコピーし、DBSNMPスキーマにパッケージを作成できるユーザーとしてSQL*Plusに接続してから、これらのスクリプトを実行します。

    これで、マスキング定義で事前定義済のマスキング・フォーマットを使用できます。

  3. 列マスクの定義ページの「フォーマットのインポート」ボタンをクリックし、事前定義済のマスキング・フォーマットを選択してマスキング定義にインポートします。

マスキング・フォーマットの指定による列の定義

マスキング定義を作成する場合(「アプリケーション・データ・モデルおよびワークロードによるマスキング」)、フォーマットをインポートするか、「列マスクの定義」ページで使用できるいずれかの種類を選択します。フォーマット・エントリ・オプションは次のとおりです。

  • 配列リスト

    値リストを入力として受け入れ、リスト内のそれぞれの値を入力列の値とマッピングします。リスト内の値の数は、マスクされた列の個別値の数以上にしてください。ユーザー指定のリストの値は、元の列値にマッピングされる前はランダムな順番になっています。たとえば、元の列に値[10,20,30,40,50]が含まれていて、ユーザーによって指定された配列リストが[99,100,101,102,103]の場合、最初のマスキング実行ではマッピング[10,101]、[20,103]、[30,100]、[40,99]、[50,102]が生成され、別のマスキング実行では[10,100]、[20,99]、[30,101]、[40,102]、[50,103]が生成される場合があります。

    マッピング表が作成されます。マッピング表を作成するCTASは次から問い合せます。

    1. マスキングされた列値および各列値の行番号をフェッチする元の表。行番号はOracleが提供するROW_NUMBER関数から導出されます。

    2. ユーザーに渡された値リスト — ユーザーに渡された配列リストの値はSQL TABLE関数を使用して、表のようなレコード・セットに変換されます。レコード・セットのそれぞれの値に対応して行番号も取得されます。行番号はROWNUM疑似列から導出されます。レコード・セットの値は、DBMS_RANDOM.VALUE関数を使用してランダムに並びます。

    3. 次にマッピング表CTASは両方の副問合せで行番号を結合し、元の値(前述のステップ1の副問合せ)およびユーザーリストからの値(前述のステップ2の副問合せ)をマッピングします。CTASの複数実行は、ステップ2のユーザー・リストがランダム順のため、異なる元のマスキングされた値マッピングを使用してマッピング表を作成します。

  • 削除

    条件に基づいて行を削除します。条件が一致すると、ターゲット上の行が削除されます。マッピング表が作成されます。マッピング表の「DELETE_VAL」列は、削除する候補の行として1に設定されます。たとえば、SALARY列をマスキングしていて、マスキング定義ではEMPID列に条件があり、形式は次のように定義されているとします。

    EMPID < 100 
          DELETE 
    EMPID < 200
    	    RANDOM NUMBER [Start Value:1 End Value:100]
    DEFAULT
    	    PRESERVE
    

    マッピング表では、SALARY行のDELETE_VAL列が1に設定され、EMPID < 100に設定されます。その他すべての行のDELETE_VALは0に設定されます。マスキングされた表を作成するために元の表とマッピング表を結合する最終マスキングCTAS SQLでは、DELETE_VALが1に設定されている行をフィルタで除外します。そのため、結合条件と一致する元の表の行は実質的に「削除済」になります。

  • 暗号化

    「暗号化」マスキング・フォーマットは、トリプルDES (3DES)を使用して列データを暗号化します。暗号化後の列データのフォーマットは、元の値のフォーマットと似ています。たとえば、9桁の数値をマスキングすると、暗号化された値も9桁になります。暗号化は、決定論的かつ可逆的なマスキング・フォーマットです。これは、企業が分析、レポートまたは任意の他の業務処理のためにデータをマスキングしてサード・パーティに送信する必要がある場合に役立ちます。処理されたデータをサード・パーティから受信した後、データの暗号化に使用したのと同じシード値を使用して元のデータを復元(復号化)できます。

    文字または数値型の列をマスキングするための正規表現を指定します。指定した正規表現は、列内のすべての元の値と一致する必要があります。値が正規表現と完全には一致しない場合、マスキング・フォーマットでは1対1マッピングが生成されない可能性があります。そのため、一意性を確保するには、すべての値が正規表現と一致する必要があります。暗号化された値も、指定した正規表現と一致します。暗号化では、固定幅の文字列の暗号化がサポートされています。正規表現言語のサブセットがサポートされており、正規表現での*または+構文はサポートされていません。

    暗号化および復号化用のキーの生成に使用するシード値も指定します。シード値は、データ・マスキング・ジョブの発行時に指定する必要があります。英数字を使用した任意の文字列を指定できます。

    マスキング定義に「暗号化」を使用した機密列がある場合、データ・マスキング・ジョブの発行時に「復号化」オプションが表示されます。このオプションを選択すると、暗号化された列値を復号化できます。

  • 固定数値

    このフォーマットは参照やマッピング表を使用しません。文字列/数値の列に固定数値を割り当てます。

    このエントリに適用可能な列のタイプはNUMBER列またはSTRING列です。たとえば、社会保障番号を持つ列をマスクした場合、エントリの1つが固定数値900になる可能性があります。このフォーマットは結合できます。

  • 固定文字列

    このフォーマットは参照やマッピング表を使用しません。文字列の列に固定文字列値を割り当てます。

    このエントリに適用可能な列のタイプはSTRING列です。たとえば、ライセンス・プレート番号を持つ列をマスクした場合、エントリの1つが固定文字列CAになる可能性があります。このフォーマットは結合できます。

  • NULL値

    NULL値を使用して列をマスキングします。このフォーマットは参照やマッピング表を使用しません。

    注意:

    列が複数のフォーマットからマスキングされる場合、固定数値/固定文字列およびNULL値のフォーマットは、マッピング表から実装されます。たとえば、SALARYがEMPID<100の固定数値とEMPID>100のランダムな数値でマスキングされる場合、マッピング表が使用されます。暗号化フォーマットと同様、列にフォーマットの組合せがない場合、マッピング表は作成されません。この例では、固定数値がすべてのEMPID値のSALARYをマスクするためのみに使用される場合、マッピング表は作成されません。この場合、フォーマットは最後のマスキングSQLにおいてインラインで実装されます。

  • 後処理関数

    このフォーマットでは、列値が標準データ・マスキング・フォーマットを使用してマスキングされた後、カスタム関数を使用して列値を処理できます。たとえば、まずSQL式を使用してSALARY列をマスキングし、マスキングされた値に対し後処理関数を適用して「$」のような通貨記号を追加できます。関数には次の固定署名が含まれます。

    function post_proc_func(rowid varchar2, column_name varchar2, mask_value varchar2) returns varchar2;

    ROWIDの入力によって、ユーザーはマスキングされた表から列値をフェッチできます。基本的には、標準フォーマットが適用されたかなり後で列を変換するために、関数では入力列値をマスキングするのにこれらの値を使用できます。このフォーマットでは、マッピング表が作成されます。マッピング表CTAS SQLの一部として後処理関数が起動されます。関数のmask_value引数への入力は、元の列のマスキングされた値です。たとえば、SALARY列をマスキングしていて、マスク定義にはEMPID列に条件があり、形式は次のように定義されているとします。

    EMPID < 100 
          RANDOM NUMBERS [START:100000 END: 10000000]
          POST PROCESSING FUNCTION ppf 
    EMPID < 200
    	    FIXED NUMBER 100000
    DEFAULT
    	    PRESERVE
    
  • 元のデータの保持

    元の列値を保持します。条件に基づいて値のサブセットをマスクする必要がある場合にのみ、他のフォーマットとの組合せで条件付マスキングで使用されます。

  • ランダム日付

    このフォーマットでは、マッピング表が作成されます。マッピング表CTASには、ユーザー指定の日付範囲でランダムな日付を生成するコードが含まれます。ランダムな日付は次に示すロジックを使用して生成されます。

    TO_DATE(start_date','YYYY-DD-MM HH24:MI:SS') + 
    mask_util.genrnd(0, <#of days between the specified date range>)
  • ランダム小数

    混合ランダム文字列の一部として使用される場合、一意の値の生成に対する使用は制限されます。このマスキング・フォーマットは、指定された範囲内で一意の値を生成します。たとえば、開始値が5.5で終了値が9.99の場合、5.5以上9.99以下の範囲の小数が生成されます。このマスキング・フォーマットは結合できます。

  • ランダム桁数

    このフォーマットは、指定範囲内で一意の値を生成します。たとえば、長さが[5,5]で、[0, 99999]間の整数のランダム桁数は、長さおよび一意性の要件を満たすよう左側が0で埋められてランダムに生成されます。これは、0で埋められることがないランダム数値の補完型です。ランダム桁数を使用する場合、文字列内で適切な長さになるように0が埋められます。番号の列に使用する場合、0は埋められません。このフォーマットは結合できます。

    データのマスキングにより生成された値は一意です。ただし、十分な桁数を指定していない場合、指定した範囲内で一意の値がなくなる場合があります。

  • ランダム数値

    混合ランダム文字列の一部として使用される場合、一意の値の生成に対する使用は制限されます。このフォーマットは、指定範囲内で一意の値を生成します。たとえば、開始値が100で終了値が200の場合、100以上200以下の範囲の整数が生成されます。Oracle Enterprise Managerリリース10.2.0.4.0はFLOAT数値をサポートしません。このフォーマットは結合できます。

  • ランダム文字列

    このフォーマットは、指定範囲内で一意の値を生成します。たとえば、開始の長さが2で終了の長さが6の場合、2文字から6文字の長さのランダム文字列が生成されます。このフォーマットは結合できます。

  • 正規表現

    このフォーマットは参照表を使用します。マッピング表は作成されません。フォーマットを実装するPL/SQL関数は、マスキング表を作成する最後のCTASから直接起動されます。参照表には、ユーザーによって指定された正規表現および置換値を格納する2つの列があります。このフォーマットを実装するには、SQL REGEXP_REPLACE関数が使用されます。

    関数には次の署名が含まれます。

    regexp_replace(column_value, regex, replacement_val);

    たとえば、フォーマットnnn.nnn.nnnnの電話番号は、正規表現[1-9]{3}[.][0-9]{3}[.][0-9]{4}と置換値***.***.****を使用してマスキングできます。このフォーマットでは、正規表現-置換の値ペアごとにregexp_replaceを起動します。電話番号の列が正規表現を使用してマスキングされた場合、次のようになります。

    EMPID < 100
      Regular Expression  	Regex: [1-9]{3}[.][0-9]{3}[.][0-9]{4}  Replacement Value: 999.444.555
      Regular Expression  	Regex: [9]{3}[.][4]{3}[.][5]{4} 	  Replacement Value: ***.***.***
    

    最初の正規表現と一致する各列の値がまず999.444.555に置き換えられ、この値は次に2番目の正規表現と一致し、***.***.***に置き換えられます。この例は、実環境のユースケースではありません。この動作はおそらくフォーマットが実装される方法の副次的な影響ですが、列をマスキングするために複数の正規表現フォーマットを指定する実際のユースケースは、列のデータが複数の正規表現と一致するケースを処理するためです。次に例を示します。

    EMPID < 100
      Regular Expression  	Regex: [1-9]{3}[.][0-9]{3}[.][0-9]{4}  Replacement Value: ***.***.****
      Regular Expression  	Regex: [1-9]{3}[.][0-9]{3}[.][0-9]{3}  Replacement Value: ***.***.***
    

    10桁(nnn.nnn.nnnn)または9桁(nnn.nnn.nnn)の電話番号を格納するマスキング列の値に使用できます。

  • シャッフル

    このフォーマットは参照やマッピング表を使用しません。マッピング表を作成する最後のCTASには、DBMS_RANDOM.VALUE関数を使用して列内容をランダムな順番にする副問合せが含まれます。グループ化列とともにシャッフルが使用されると、PARTITION句が使用されてグループ化列ごとにパーティション化され、パーティション内で列がランダムに並べられます。この実装は、「配列リスト」および「表の列」と似ています。シャッフル・フォーマットのランダムな順序付けは「シャッフル・マスキングされた」列で行われますが、「配列リスト」ではユーザーから渡されたリストで、「表の列」ではユーザー指定の列で行われます。

  • 置換

    このフォーマットでは、マッピング表が作成されます。ユーザー指定の「置換」表をマスキングされた値のソースとして使用します。このフォーマットでは、Oracle指定のハッシュ・ベースのパーティショニング関数ORA_HASHを使用して、参照(置換)表で列の値をそのマスク値にマップします。処理には、マスク列の個別値の数を取得するための置換表への問合せが含まれます。次に、この件数(nとします)はORA_HASHmax_bucketパラメータとして使用され、元の列値をn個のバケットにハッシュします。たとえば、SUBST.SUB_COL列を置換列としてEMPLOYEE.SALARYをマスキングしている場合、まずSUB_COLの個別値の件数を取得します。次にマッピング表CTASでは次を問い合せます。

    1. 元の列(EMPLOYEE.SALARY)。

    2. SUBST.SUB_COLのすべての個別値をフェッチするために、ユーザー指定の置換表。また、各行に関連するROWNUMもフェッチします。

    次にCTAS SQLはORA_HASHを使用して1と2を結合し、その出力結果をステップ2で取得したROWNUMに合わせます。CTAS SQLのSELECT部分を次に示します。max_bcktは、置換列SUBST.SUB_COLの個別値の件数です。

    select s.orig_val,
           a0.new_val
    from ( select orig_val
           from (select "SALARY" orig_val
            	 from "TESTU"."EMPLOYEE") 
           group by orig_val) s,
         (select rownum rn, 
                 SUB_COL new_val 
          from (select distinct SUB_COL
                from TESTU.SUBST
                order by SUB_COL)) a0
     where ora_hash(s.orig_val, max_bckt, seed)+1 = a0.rn
    
  • SQL式

    このフォーマットでは、マッピング表は作成されません。列をマスキングする「SQL式」をユーザーが使用できるようになります。データ・マスキングはこの式を使用して、マスキングされた値を生成し、元のデータを置き換えます。式はマスキングするCTAS SQLから直接起動されます。SQL式は1つ以上の値、演算子、および値に評価されるSQL関数で構成できます。置換列(マスキングされる列と同じ表の列)を含めることもできます。有効な式のいくつかの例を次に示します。

    1.	dbms_random.string('u', 8) || '@company.com'
    2.	%first_name% || '.' || %last_name% || '@company.com'
    3.	dbms_lob.empty_clob()
    4.	custom_mask_clob(%CLOB_COL%)
    5.	(case when %PARTY_TYPE%='PERSON' then %PERSON_FIRST_NAME%|| ' ' ||%PERSON_LAST_NAME% else (select dbms_random.string('U', 10) from dual) end)
    6.	select MASK_ZIPCODE from data_mask.DATA_MASK_ADDR where ADDR_SEQ = ora_hash( %ZIPCODE% , 1000, 1234)
  • 部分文字列

    このフォーマットでは、マッピング表が作成されます。マッピング表CTASは、入力列でOracle SUBSTR関数を起動します。フォーマットは入力として開始位置と長さを受け取り、SUBSTRを使用して入力列からデータを抽出し、それをマスク値として使用します。

  • 表の列

    このフォーマットでは、マッピング表が作成されます。フォーマットは元の列の値をユーザー指定表の列の値にマッピングします。この処理は配列リスト・フォーマットと似ています。ユーザー指定表の値は、元の列にそれぞれの値をマッピングする前にDBMS_RANDOM.VALUEを使用してランダムに並べられています。置換列はランダムに並べられているため、「置換」フォーマットとは異なり、このフォーマットは確定的ではありません。

  • 切捨て

    このフォーマットでは、表のすべての行で切捨てが実行されます。マッピング表は作成されません。表の列の1つがこのフォーマットを使用してマスキングされると、他の列にそれ以外のマスキング・フォーマットは指定できません。

  • ユーザー定義関数

    このフォーマットでは、マッピング表が作成されます。ユーザー定義関数の戻り値は、列のマスクに使用されます。関数はマッピング表CTASの一部として起動されます。関数には次の固定署名が含まれます。

    function userdef_func(rowid varchar2, col_name varchar2, orig_val varchar2) returns varchar2;Function udf_func (rowid varchar2, column_name varchar2, original_value varchar2) return varchar2;
    

置換フォーマットを使用した決定論的マスキング

状況によっては、複数の異なるデータベースを一貫してマスキングする必要があります。たとえば、3つの異なるデータベースで従業員IDの概念を持つHR、給与および手当てを管理する場合、従業員のIDを選択することで従業員のHR、給与または手当ての情報を取得できるという意味において、この概念はすべてのデータベースで一貫性を保持する可能性があります。この前提に基づくと、実際に社会保障番号を含むために従業員のIDをマスキングする必要がある場合、これら3つのデータベースすべてで一貫してマスキングを行う必要があります。

決定論的マスキングにより、この問題を解決できます。置換フォーマットを使用して、3つのデータベースすべての従業員ID列をマスキングできます。置換フォーマットでは、値の表を使用して元の値をマスク値と置換します。この値の表が変更されないかぎり、3つのデータベース全体で決定論的なマスクまたは一貫したマスクを使用できます。

関連項目:

置換フォーマットの詳細は、オンライン・ヘルプの「列マスクの定義」ページに関する説明を参照してください。

アプリケーション・データ・モデルおよびワークロードによるマスキング

マスキング定義を作成する前に、次の前提条件およびアドバイス情報を確認してください。

  • データ・マスキングの最小限の権限を持っていることを確認します。

    • ターゲット権限(すべてのターゲットに適用可能):

      • 表示可能な任意のターゲットに接続

      • 任意の場所でのコマンドの実行

      • 任意のターゲットの表示

    • リソース権限:

      • ジョブ・システム

      • 名前付き資格証明

      • Oracle Data Masking and Subsettingのリソース権限

      注意:

      Enterprise Manager Cloud ControlユーザーのためのEM_ALL_OPERATOR権限には、前述のすべての権限が含まれています。

    • データベース・ユーザーのSELECT_CATALOG_ROLE

    • データベース・ユーザーのSELECT ANY DICTIONARY権限

    • DBMS_CRYPTOパッケージのEXECUTE権限

  • 選択したフォーマットが、チェック制約に違反していないことと、そのデータを使用するアプリケーションを中断させないことを確認してください。

  • トリガーおよびPL/SQLパッケージでは、データ・マスキングによりオブジェクトが再コンパイルされます。

  • パーティション表(特にパーティション・キー)をマスキングする場合、注意が必要です。この場合、行が別のパーティションに移動する可能性があります。

  • データ・マスキングでは、クラスタ表、オブジェクト表のマスキング情報、XML表および仮想列はサポートされません。リレーショナル表はマスキングでサポートされます。

  • オブジェクトが表の上層に位置する場合(ビュー、マテリアライズド・ビュー、PL/SQLパッケージなど)、それらのオブジェクトは有効になるように再コンパイルされます。

パフォーマンス評価の目的でテスト・システムをマスキングする場合、次を実行することをお薦めします。

  • マスキング前スクリプトを追加して一時表にSQLプロファイルおよび統計をエクスポートしてから、マスキングの完了後にリストアすることで、マスキング後に、本番統計およびSQLプロファイルの保持を試行します。

  • 「SQLパフォーマンス・アナライザ」評価を実行し、パフォーマンスに対するマスキングの影響を理解します。評価レポートに示されたもの以外のパフォーマンスの変更は通常、マスキングされたデータベースのアプリケーション固有の変更に関連しています。

マスキング定義を作成するには:

  1. 「エンタープライズ」メニューから「クオリティ管理」を選択し、次に「データ・マスキング定義」を選択します。

    「データ・マスキング定義」ページが開き、このページで新規のマスキング定義を作成し、スケジューリングしたり、既存のマスキング定義を管理できます。

  2. 「作成」をクリックして「マスキング定義の作成」ページに移動します。

    マスキング定義には、表の列と各列のフォーマットに関する情報が含まれます。マスキングする列とそのまま残す列を選択できます。

  3. 必須の「名前」「アプリケーション・データ・モデル」および「参照データベース」を入力します。

    「検索」アイコンをクリックし、リストから「アプリケーション・データ・モデル」(ADM)の名前を選択すると、自動的に値が「参照データベース」フィールドに移入されます。

    • オプション: 「取得ファイル」と「SQLチューニング・セット」をマスキングする場合は、「ワークロード・マスキングの互換性を確認」を選択します。

      このチェック・ボックスを有効にすると、マスキング定義が評価され、SQL式のフォーマットまたは条件付きマスキングが使用されているかどうかが判断されます。「OK」をクリックする際にいずれかが使用されている場合は、オプションのチェックが解除され、このオプションを選択する前にこれらのアイテムの削除を求めるエラー・メッセージが表示されます。

      注意:

      次のステップに進む前に、アプリケーション・データ・モデルで1つ以上の機密列がすでに定義済である必要があります。詳細は、「カスタム機密列タイプの作成と管理」を参照してください。

  4. 「追加」をクリックして、マスクするADMの機密列を選択できる「列の追加」ページへ移動します。

    結果は「列」表に表示されます。主キー列および外部キー列は、機密列の下に表示されます。

  5. フィルタ基準を使用して、機密列の結果を絞り込みます。たとえば、名前で順序が設定されているすべての列を分離するとします(列名=order%)。まず、フィルタ・セクションを公開する必要があります(「フィルタの表示」)。

  6. 無効化機能を使用して、特定の列をマスキングの考慮から除外します。デフォルトで、すべての列が有効になっています。選択した列またはすべての列を無効にできます。無効にする列(列名=order%)のサブセットを検索することもできます。右側の「ステータス」列は、列の無効の状態を反映するよう変更されます。列の無効の状態は、データ・マスキング定義のエクスポートの際も続きます。

  7. オプションです。「フォーマット」列の「編集」アイコンをクリックして、マスキング・フォーマットを確認および編集します。

  8. 「拡張オプションの表示」を展開し、選択したデフォルト・データ・マスキングのオプションが十分であるかどうかを判断します。

  9. 「OK」をクリックして定義を保存し、「データ・マスキング定義」ページに戻ります。

    この時点で、スーパー管理者は互いのマスキング定義を確認できます。

  10. 定義を選択し、「スクリプトの生成」をクリックします。「ジョブのスケジュール」ダイアログが開きます。まず、データベースにログインしている必要があります。

    「ジョブのスケジュール」ダイアログに必要な情報を指定し、「発行」をクリックします。

  11. ジョブが正常に発行されたというメッセージが表示され、「データ・マスキング定義」ページに戻り、ステータスには「スクリプトの生成中」と表示されます。「ジョブ詳細を表示」をクリックし、「ジョブ・サマリー」ページを開きます。

    ジョブが完了したら、「ログ・レポート」をクリックし、操作に十分なディスク領域があるかどうかを確認し、マスキング後に他の宛先オブジェクト(ユーザーなど)に影響があるかどうか判断します。マスキング定義に含まれている表に、データ型LONGの列がある場合、警告メッセージが表示される場合があります。

  12. 「データ・マスキング定義」ページのステータスが「スクリプトが生成されました」の場合、スクリプトを選択し、次からアクションを選択します。

    • データベースのクローニング - データベースのクローニング・ウィザードを使用してデータベースをクローニングおよびマスキングします(これには、Database Lifecycle Management Packライセンスが必要です)。

    • スクリプトの保存: デスクトップにPL/SQLスクリプトをすべて保存します。

    • マスク・バンドルの保存 - ソースでのマスキング・スクリプト生成オプションの一部として生成されたSQLファイルを含むzipファイルをダウンロードします。スクリプトを抽出および実行して、データベースのマスクされたダンプを作成できます。

    • スクリプトの表示: 編集および保存するPL/SQLスクリプトを表示します。影響レポートにエラーおよび警告を表示することも可能です(ある場合)。

    • 「ストレージ要件レポート」–マスキング中に断続的オブジェクトに必要な領域を表示します。

      注意:

      正確なストレージを見積もるには、必ずdbms_stats.gather_table_statsを使用して、マスキング・プロセスに関与しているすべての表の統計を収集してください。

    「実行」をクリックして、選択したアクションを実行します。

  13. テスト・データベースですでに作業しており、そのデータベースのデータを直接マスキングする場合、「ジョブのスケジュール」をクリックします。

    • 必須情報と必要なオプションを入力します。実行時のデータベースは任意のデータベースに指定できます。選択したデータベースは、ソース・データベースのクローンであるとみなされます。デフォルトでは、ADMからのソース・データベースが選択されます。

    • 「発行」をクリックします。

      データ・マスキング定義ページが表示されます。ジョブはEnterprise Managerに発行されており、マスキング・プロセスが表示されます。このページの「ステータス」列は、プロセスの現在のステージを示します。

データのサブセット化を定義する際に、ソースでデータ・マスキングを行うことも可能です。詳細は、「データ・セブセット定義の作成」を参照してください。

マスキングする列の追加

このページを使用して、マスキング用の1つ以上の列を追加し、外部キー列を自動的に追加します。対応するスキーマからマスクするデータベース列を選択します。列を選択したら、その内のデータをマスクするのに使用するフォーマットを指定します。

注意:

少なくとも1つの列をマスキング定義で追加する必要があります。列が1つも追加されない場合、オブジェクトおよび検査済リソースの情報を提供し、検出された警告やエラーに関する詳細を記載する影響レポートを作成するスクリプトを生成できません。

  1. 検索基準を入力し、「検索」をクリックします。

    次の表に、ADMに定義した機密列が表示されます。

  2. 1つ以上の列を選択し、「マスキング定義の作成」ページで後でフォーマットするか、(選択した列のデータ型が同一の場合)その場でフォーマットします。
  3. オプション: 選択した複数の列をグループとしてマスキングする場合、「選択した列をグループとしてマスキング」を有効にします。グループとしてマスキングする列は、すべて同じ表の列である必要があります。

    複数の列を別々ではなく一緒にマスキングする場合、このチェック・ボックスを有効化します。2つ以上の列を選択し、「グループ・マスクの定義」ページのフォーマットを定義すると、列が一緒に表示され、選択したフォーマットの種類または表のマスキングがすべての列にまとめて適用されます。

    グループを定義してこのページに戻ると、グループのすべてのメンバーの「列グループ」列に同じ数字が表示されます。たとえば、4つの列を含む最初のグループを定義した場合、このページの4つのエントリの「列グループ」列には1が表示されます。別のグループを定義すると、この列には2が表示されます。これにより、どの列がどのグループに所属するのか簡単に識別できます。

  4. 「追加」をクリックしてマスキング定義に列を追加し、「マスキング定義の作成」ページに戻って後で列のフォーマットを定義するか、「フォーマットの定義と追加」をクリックしてその場で列のフォーマットを定義します。

    「フォーマットの定義と追加」機能では、かなりの時間を節約できます。同じデータ型の複数の列を選択して追加する場合、「追加」をクリックするときのように列ごとにフォーマットを定義する必要はありません。たとえば社会保障番号(SSN)を検索し、これによって100のSSN列が生じた場合、これらをすべて選択し、「フォーマットの定義と追加」をクリックしてからすべての列に対するSSNフォーマットをインポートできます。

  5. 次のいずれかを行います:
    • 前のステップで「追加」をクリックした場合:

      操作を進めるには、「マスキング定義の作成」ページで列のフォーマットを定義する必要があります。準備ができていれば、フォーマットする列の 「フォーマット」 列ページでアイコンをクリックします。選択した列をグループとしてマスキングすることを「列の追加」ページで指定したかどうかに応じて、「列マスクの定義」または「グループ・マスクの定義」が表示されます。どちらの場合も、詳細はこのステップの後続の内容を参照してください。

    • 前のステップで「フォーマットの定義と追加」をクリックし、「選択した列をグループとしてマスキング」を選択していない場合:

      「列マスクの定義」ページが表示され、このページで、「マスキング定義の作成」ページに列を追加する前に、列のフォーマットを定義できます。

      • 必須のデフォルト条件のフォーマット・エントリを指定するため、リストからフォーマット・エントリを選択して「追加」をクリックするか、「フォーマットのインポート」をクリックして「フォーマットのインポート」ページで事前定義済のフォーマットを選択し、「インポート」をクリックします。

        「フォーマットのインポート」ページには、マスクされた列と同じ機密タイプでマークされたフォーマットが表示されます。

      • 別の条件を追加するには、「条件の追加」をクリックして新しい条件行を追加し、前のステップに従って1つ以上のフォーマット・エントリを指定します。

      • 列のフォーマット作業が終了したら、「OK」をクリックして「マスキング定義の作成」ページに戻ります。

    • 前のステップで「フォーマットの定義と追加」をクリックし、「選択した列をグループとしてマスキング」を選択した場合:

      「グループ・マスクの定義」ページが表示され、このページで、「マスキング定義の作成」ページに表示されるグループ列のフォーマット・エントリを追加できます。

      • 使用可能ないずれかのフォーマット・タイプを選択します。フォーマット・タイプの詳細は、オンライン・ヘルプのグループ・マスキング・フォーマットの定義に関するトピックを参照してください。

      • オプションで、グループに列を追加します。

      • グループのフォーマット作業が終了したら、「OK」をクリックして「マスキング定義の作成」ページに戻ります。

        結果は「列」表に表示されます。あらかじめ選択した機密列がこのページに表示されます。主キー列および外部キー列は、機密列の下に表示されます。

データ・マスキング拡張オプションの選択

デフォルトでは、「マスキング定義」ページで次のオプションがすべて選択されているため、無効にしたいオプションは選択を解除してください。

データ・マスキングのオプション

データ・マスキングのオプションには次のものが含まれます。

  • マスキング中のREDOログ生成の無効化

    マスキングを行うと、REDOロギングとフラッシュバック・ロギングが無効になり、元々マスキングされていないデータがログからパージされます。ただし、マスキングのテストのみを行い、変更をロールバックして複数のマスク列をテストする場合には、このチェック・ボックスの選択を解除し、マスキングを実行した後で、マスキングされていない古いデータをフラッシュバック・データベースから取得したほうが効率的です。Enterprise Managerでデータベースのフラッシュバックが可能です。

    注意:

    このオプションを無効にすると、セキュリティが侵害される可能性があります。本番データベースのコピーに最終的なマスキングを実行する場合には、このオプションを有効にする必要がります。

  • マスキング後の統計のリフレッシュ

    統計収集が有効になっているときに、ヒストグラムや異なるサンプリング率などの特殊オプションを統計収集で使用する場合には、このオプションをオフにしてデフォルトの統計収集を無効にし、独自の統計収集ジョブを実行します。

  • マスキング中に作成した一時表の削除

    マスキングでは、元の重要なデータ値とマスク値を対応付けるため、一時表が作成されます。この情報を保持し、マスキングによるデータの変更を追跡する場合があります。ただし、これを行うと、セキュリティ侵害の危険性が高くなります。権限の低いユーザーにデータベースへのアクセスを許可する前に、これらの表は削除する必要があります。

  • 暗号化列の複号化

    このオプションでは、「暗号化」フォーマットを使用して以前にマスクされた列を復号します。以前に暗号化された列を復号化するには、シードの値が暗号化に使用した値と同じである必要があります。

    暗号化に使用した元のフォーマットが元の値と一致する場合、復号化によって元の値のみがリカバリされます。元の暗号化された値が指定した正規表現に準拠していない場合、復号化すると、暗号化された値は元の値を再現できません。

  • 可能な場合、パラレル実行を使用

    Oracle Databaseでは、様々なSQL操作がパラレルで実行できるため、パフォーマンスが著しく向上します。このオプションを選択すると、この機能がデータ・マスキングで使用されます。Oracle Databaseに並列度を自動的に判別させることも、値を指定することもできます。パラレル実行と並行度の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

  • マスキング後、無効な依存性オブジェクトを再コンパイルします。

    マスキング・プロセスによってマスキングされる表が再作成され、その結果、存在するすべての依存性オブジェクト(パッケージ、プロシージャ、関数、MViews、ビューおよびトリガー)が無効になります。チェック・ボックスを選択することにより、マスキング・プロセスで表の作成後、これらの無効なオブジェクトが再コンパイルされるよう指定できます。それ以外の場合、マスキングの最後でutl_compプロシージャを使用して、無効なオブジェクトは再コンパイルできません。

    このオプションを選択した場合、シリアルまたはパラレルで実行するか指定します。Oracle Databaseに度合いを自動的に判別させることも、値を指定することもできます。パラレル実行と並列度の使用の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

乱数の生成

乱数の生成オプションには次のものが含まれます。

  • 速度を優先

    乱数の生成にDBMS_RANDOMパッケージが使用されます。

  • セキュリティを優先

    乱数の生成にDBMS_CRYPTOパッケージが使用されます。また、「置換」フォーマットを使用する場合には、マスキング・ジョブまたはデータベース・クローニング・ジョブをスケジュールする際にシード値が必要です。

マスク前およびマスク後スクリプト

パフォーマンスの評価のためにテスト・システムをマスキングすると、マスキング後のオブジェクト統計保持に役立ちます。マスキング前スクリプトを追加して統計を一時表にエクスポートして、マスキングの終了後にマスキング後スクリプトを使用してリストアすることで、これを行います。

「マスク前スクリプト」テキスト・ボックスを使用して、マスキングの開始前に実行する必要のある任意のユーザー指定のSQLスクリプトを指定します。

「マスク後スクリプト」テキスト・ボックスを使用して、マスキング完了後に実行するSQLスクリプトを指定します。マスキングでデータが変更されるため、ブックをリバランスしたり、ロープアップ・モジュールや集計モジュールを呼び出して関連情報と集計情報の整合性を維持するなどのタスクも実行できます。

次に、統計を保持するためのマスク前およびマスク後スクリプトの例を示します。

この例に、統計を保持するためのマスク前スクリプトを示します。

variable sts_task  VARCHAR2(64);

/*Step :1 Create the staging table for statistics*/

exec dbms_stats.create_stat_table(ownname=>'SCOTT',stattab=>'STATS');
 
/* Step 2: Export the table statistics into the staging table. Cascade results 
in all index and column statistics associated with the specified table being 
exported as well. */
 
exec
dbms_stats.export_table_stats(ownname=>'SCOTT',tabname=>'EMP',
partname=>NULL,stattab=>'STATS',statid=>NULL,cascade=>TRUE,statown=>'SCOTT');
exec
dbms_stats.export_table_stats(ownname=>'SCOTT',tabname=>'DEPT',
partname=>NULL,stattab=>'STATS',statid=>NULL,cascade=>TRUE,statown=>'SCOTT');

/* Step 3: Create analysis task */
3. exec :sts_task := DBMS_SQLPA.create_analysis_task(sqlset_name=>
'scott_test_sts',task_name=>'SPA_TASK', sqlset_owner=>'SCOTT');
 
/*Step 4: Execute the analysis task before masking */
exec DBMS_SQLPA.execute_analysis_task(task_name => 'SPA_TASK', 
execution_type=> 'explain plan', execution_name  => 'pre-mask_SPA_TASK'); 

この例に、統計を保持するためのマスク後スクリプトを示します。

*Step 1: Import the statistics from the staging table to the dictionary tables*/
 
exec
dbms_stats.import_table_stats(ownname=>'SCOTT',tabname=>'EMP',
partname=>NULL,stattab=>'STATS',statid=>NULL,cascade=>TRUE,statown=>'SCOTT');
exec
dbms_stats.import_table_stats(ownname=>'SCOTT',tabname=>'DEPT',
partname=>NULL,stattab=>'STATS',statid=>NULL,cascade=>TRUE,statown=>'SCOTT');
 
/* Step 2: Drop the staging table */
 
exec dbms_stats.drop_stat_table(ownname=>'SCOTT',stattab=>'STATS');

/*Step 3: Execute the analysis task before masking */
exec DBMS_SQLPA.execute_analysis_task(task_name=>'SPA_TASK', 
execution_type=>'explain plan', execution_name=>'post-mask_SPA_TASK');
 
/*Step 4: Execute the comparison task */
exec DBMS_SQLPA.execute_analysis_task(task_name =>'SPA_TASK', 
execution_type=>'compare', execution_name=>'compare-mask_SPA_TASK'); 

関連項目:

データ・マスキング・ジョブのスケジュール時にこれらのスクリプトの場所を指定する方法を説明する手順は、「パフォーマンス評価のためのテスト・システムのマスキング」を参照してください

スクリプト生成ジョブのスケジューリング

スクリプト生成ジョブをスケジューリングするには、次の手順を実行します。

  1. スクリプトを生成するマスキング定義を選択し、「スクリプトの生成」をクリックします。
  2. 必要に応じてデフォルトのジョブ名を意味のわかりやすい名前に変更し、ジョブの説明(オプション)を指定します。
  3. ドロップダウン・リストから参照データベースを選択します。
  4. 次のスクリプト生成オプションを選択します。
    • インデータベースのマスク: 指定したデータベース(通常、本番からのコピー)上で、機密データをマスクされたデータでインプレース置換します。このオプションは、非本番環境でのみ使用します。これは、「アクション」メニュー・オプションの「データベースのクローニング」(データベースをクローニングしてからデータをマスキングします)とは異なります。

    • インエクスポートのマスク: Oracle Data Pumpを使用して、指定したソース・データベース(通常では本番)から、マスクされたデータをエクスポートします。このオプションは、顧客データを変更しないため、本番環境で安全に実行されます。ただし、このオプションでは、マスキング操作の完了時に削除される一時表が作成されることに注意してください。

    両方のオプション(データベースを直接マスキングするスクリプト、およびマスクされたダンプを作成するスクリプト)を選択できることに注意してください。

  5. 参照データベースにログインするための資格証明を指定します。
  6. ジョブを即時に開始するか、後で指定した日時に開始するかを指定し、「発行」をクリックします。

    メッセージでは、ジョブがスケジュールされていることを確認します。ページをリフレッシュして、ジョブの結果を表示します。

データ・マスキング・ジョブのスケジュール

データ・マスキング・ジョブを設定し、その実行スケジュールするには、次の手順に従います。

  1. スクリプトが生成されるマスキング定義を選択し、「ジョブのスケジュール」をクリックします。
  2. 必要に応じてデフォルトのジョブ名を変更し、ジョブの説明(オプション)を入力します。
  3. ドロップダウン・メニューからデータベースを選択し、プリファレンスを指定します。
    • インデータベースのマスク: 指定したデータベース(通常、本番からのコピー)上で、機密データをマスクされたデータでインプレース置換します。このオプションは、非本番環境でのみ使用します。これは、「アクション」メニュー・オプションの「データベースのクローニング」(データベースをクローニングしてからデータをマスキングします)とは異なります。

      注意:

      先に進むには選択したターゲットが本番データベースでないことを示すチェック・ボックスを有効にする必要があります。

    • インエクスポートのマスク: Oracle Data Pumpを使用して、指定したソース・データベース(通常では本番)から、マスクされたデータをエクスポートします。このオプションは、顧客データを変更しないため、本番環境で安全に実行されます。ただし、このオプションでは、マスキング操作の完了時に削除される一時表が作成されることに注意してください。

    選択内容は、ラジオ・ボタンの下およびこのページの他のリージョンに表示されるチェック・ボックスのテキストに影響を及ぼします。

  4. ステップ3での選択内容に応じて進めます。
    • データ・マスク・オプション - 必要な情報を次のように指定します。

      • スクリプトの生成が完了した後、データ・マスキング・スクリプトはEnterprise Managerのリポジトリに格納されます。デフォルトでは、データ・マスキング・ジョブは、リポジトリからスクリプトを取得し、データベース・ホスト上の$ORACLE_HOME/dbsディレクトリに生成されたファイル名を使用してコピーします。スクリプト・ファイルの場所と名前フィールドで、デフォルトの場所と生成されたファイル名をオーバーライドできます。

      • ワークロード - 必要に応じて、SQLチューニング・セットをマスキングしてファイルを取得するオプションを選択します。ファイルを取得するファイルの場所を参照します。

      • マスキングによるSQL計画の変更の検出 - SQLパフォーマンス・アナライザを実行して、マスキングの影響を評価します。タスク名を指定し、対応するSQLチューニング・セットを参照します。

    • データ・エクスポート・オプション - 必要な情報を次のように指定します。

      • マスク・ダンプを保存するディレクトリを指定します。ドロップダウン・リストは、アクセス可能なディレクトリ・オブジェクトで構成されます。カスタムのディレクトリ・パスを選択することも可能です。外部ディレクトリを使用して処理を高速化する場合は、チェック・ボックスをクリックします。推奨されるデフォルト: DATA_FILE_DIR

      • デフォルトをオーバーライドする場合、適切な値を指定します。エクスポート・ファイルの名前を入力します。最大ファイル・サイズをMB単位で指定します。エクスポート・ジョブのために、アクティブな実行操作の最大スレッド数を指定します。これにより、リソース消費と経過時間のバランスを取ることができます。

      • マスクされたデータのみをエクスポートするかマスクされたデータとともにデータベース全体をエクスポートするかを指定します。

      • ダンプ・ファイルの圧縮および暗号化を有効にするかどうかを選択します。該当する場合は、暗号化パスワードを入力して確認します。デフォルトでは、ログ・ファイルの生成が選択されています。

  5. データベース・ホストにログインするための資格証明を指定します。
  6. 参照データベースにログインするための資格証明を指定します。
  7. 一時オブジェクトを作成するために、次のいずれかのオプションを選択します。
    • デフォルト設定を使用して記憶域を最適化します — 一時オブジェクトを圧縮して格納します
    • 推奨設定を使用して記憶域を最適化します — 圧縮されたマッピング表を格納する一時表領域を作成します
    • カスタム設定を使用して記憶域を最適化します

      カスタム表領域に一時オブジェクトを作成します — ステップ8で指定された表領域に一時オブジェクトを作成します。

      一時オブジェクトとマスクされる表のコピーをカスタム表領域に作成します — ステップ8で指定された表領域に一時オブジェクトと、マスキングされる元の表のコピーを作成します。

      注意:

      このオプションでは、元の表のコピーを作成し、一時オブジェクトと元の表のコピーの両方をカスタム表領域に移動する必要があるため、マスキング時間をかなり増やす場合があります。

  8. ステップ5でカスタム設定を選択した場合は、オブジェクトが作成される必要があるカスタム表領域を選択します。
  9. ジョブを即時に開始するか、後で指定した日時に開始するかを指定し、「発行」をクリックします。

    メッセージでは、ジョブがスケジュールされていることを確認します。ページをリフレッシュして、ジョブの結果を表示します。

マスキング操作のための領域の要件の見積り

マスキング操作のための領域の要件の見積りのガイドラインを示します。これらの見積りは、予測される最大の表サイズが500GBであることに基づきます。マスキングの領域の見積もりでは、「最悪のシナリオ」を想定します。

  • インプレース・マスキングの場合:

    • マッピング表のために2 * 500GB (マッピング表には元の列およびマスクされた列の両方が格納されます。最悪の場合は、すべての列がマスクされます)。

    • 元の表およびマスクされた表の両方のために2 * 500GB (マスキング・プロセス中のある時点でデータベース内に両方が存在します)。

    • 一時表領域のために2 * 500GB (hash joins、sortsなどに必要です)。

    最悪の場合の必要な合計領域は3TBです。

  • ソースでのマスキングの場合:

    • マッピング表のために2 * 500GB (インプレース・マスキングと同様)。

    • 一時表領域のために2 * 500GB (インプレース・マスキングと同様)。

    • ダンプ・ファイルに対応する十分なファイル・システム領域。

    最悪の場合の必要な合計領域は、2TBに必要なファイル・システム領域を加えたものです。

いずれの場合も、一時およびUNDO表領域を自動拡張に設定することをお薦めします。

スクリプトの生成中に、マッピング表用の表領域を指定できます。表領域を指定しない場合は、実行中のユーザーの表領域内に表が作成されます。領域の見積りはスクリプトの生成中に提供され、必要に応じてリソースの警告が発生します。シャッフル形式を使用しているときなど、状況によっては、マッピング表は必要ありません。そのような場合、インラインで元の表への更新が発生します。

依存列の追加

依存列をアプリケーション・データ・モデルに追加することで、定義します。次の前提条件は、依存列として定義される列に適用されます。

  • マスキング用としてすでに含まれている列は、有効な依存列になりません。

  • 外部キー列、または外部キー列に参照される列は、依存列に指定できません。

  • この列のデータは、親列のデータに準拠している必要があります。

列がこれらの基準を満たしていない場合、依存列を追加しようとすると、「無効な依存列」というメッセージが表示されます。

パッケージ・アプリケーションの依存列のマスキング

次の手順では、データ・ディクショナリに関係が定義されていないパッケージ・アプリケーションでの、列間でのデータのマスキング方法について説明します。

パッケージ・アプリケーションの依存列をマスキングするには:

  1. 「データ検出およびモデリング」へ移動して、パッケージ・アプリケーション・スイートのメタデータ・コレクションを使用して、新しいアプリケーション・データ・モデル(ADM)を作成します。

    メタデータ収集が完了してから、新しく作成されたADMを編集します。

  2. 参照関係を手動で追加します。

    1. 「参照関係」タブから、「アクション」メニューを開き、「参照関係の追加」を選択します。

      「参照関係の追加」ポップアップ・ウィンドウが表示されます。

    2. 必要な親キーおよび依存キー情報を選択します。

    3. 「列名」リストで、親キー列に関連付ける依存キー列を選択します。

    4. 「OK」をクリックして、参照関係をADMに追加します。

      これで、新規依存列が参照関係リストに表示されます。

  3. 機密列の検出を実行します。

    機密列の検出が完了したら、検索ジョブによって検出された列を確認し、必要に応じてそれらを機密または非機密としてマーク付けします。

    機密としてマークされているとき、検出されたすべての機密列は、親と、親の他の子の列にも機密としてマーク付けします。このため、すべての関係を含むADMを最初に作成することをお薦めします。デフォルトでは、またはドライバの実行後、ADMが非正規化された関係を含むことはできません。これらは手動で追加する必要があります。

    機密列の検出の詳細は、「機密データの検出の実行」を参照してください。

  4. 「データ・マスキング」へ移動して、新しいマスキング定義を作成します。

  5. 新しく作成したADMを選択して、「追加」をクリックしてから「検索」をクリックして、このADMの機密列を表示します。

  6. 検索結果に基づいて列を選択し、選択した列のフォーマットをインポートします。

    Enterprise Managerで、プライバシ属性に準拠するフォーマットが表示されます。

  7. フォーマットを選択し、スクリプトを生成します。

  8. マスキング・スクリプトを実行します。

    Enterprise Managerでは、生成されたスクリプトがターゲット・データベースで実行され、指定した列すべてがマスキングされます。

データ・マスキング・テンプレートのインポート

現在のEnterprise ManagerリポジトリにXMLファイルとして保存されている、以前にエクスポートされたデータ・マスキング定義をインポートして再利用できます。Oracle提供のデータ・マスキング定義をソフトウェア・ライブラリからインポートすることもできます。

以前にエクスポートされたマスキング定義のインポート

次の補足情報に注意してください。

  • XMLファイル・フォーマットは、マスキング定義のXMLフォーマットと互換性があることが必要です。

  • インポートされるマスキング定義の名前がリポジトリにすでに存在しないこと、またソース・データベース名が有効なEnterprise Managerターゲットを識別することを確認してください。

  • インポートされるXMLファイルの値が、有効なデータベース・ターゲットを参照していることを確認してください。

  1. 「データ・マスキング定義」ページで、「インポート」をクリックします。

    「マスキング定義のインポート」ページが表示されます。

  2. マスキング定義の名前を指定し、テンプレートに関連付けるADMを選択します。参照データベースが自動的に指定されます。

  3. XMLファイルを参照するか、またはXMLファイルの名前を指定してから、「続行」をクリックします。

    「データ・マスキング定義」ページが再表示され、インポートされた定義が以降の表示およびマスキング用の表リストに表示されます。

ソフトウェア・ライブラリからのデータ・マスキング・テンプレートのインポート

自己更新機能では、最新のOracle提供のデータ・マスキング・テンプレートをソフトウェア・ライブラリで使用できます。更新をチェックすることもできます。「自己更新」ページに移動し、テスト・データ管理の更新を確認します。存在する場合は、ソフトウェア・ライブラリで使用できるように、ダウンロードして適用します。

  1. 「データ・マスキング定義」ページで、「ソフトウェア・ライブラリからのインポート」をクリックします。

    「マスキング定義のインポート」ページが表示されます。

  2. 「ソフトウェア・ライブラリ」リストでマスキング・テンプレートを選択します。

  3. マスキング定義の名前を指定し、テンプレートに関連付けるADMを選択します。参照データベースが自動的に指定されます。

  4. 「続行」をクリックします。

    「データ・マスキング定義」ページが再表示され、インポートされた定義が以降の表示およびマスキング用の表リストに表示されます。

ソフトウェア・ライブラリからデータ・マスキング定義をエクスポートすることもできます。

  1. 「データ・マスキング定義」ページで、「ソフトウェア・ライブラリからのエクスポート」をクリックします。
  2. 「ソフトウェア・ライブラリ」リストでマスキング・テンプレートを選択します。
  3. 「エクスポート」をクリックします。

    異なるリポジトリにインポートするテンプレート・ファイルを保存します。

本番データベースのクローニング

データベースのクローニングおよびマスキングを行う場合、マスキング・スクリプトのコピーがEnterprise Managerリポジトリに保存され、クローニング・プロセスの完了後に取得されて実行されます。そのため、スキーマの変更後または本番データベースの変更後には、スクリプトを再生成することが重要です。

マスキング定義のターゲット・データベースをクローニングおよび(オプションで)マスキングするには、次の手順を実行します。

  1. 「データ・マスキング定義」ページで、クローニングするマスキング定義を選択し、「アクション」リストから「データベースのクローニング」を選択し、「実行」をクリックします。

    「クローン・データベース: ソース・タイプ」ページが表示されます。

    テスト・システムを作成してマスキングを実行できる、データベースのクローニング・ウィザードが表示されます。

  2. クローニング操作に使用するソース・データベース・バックアップのタイプを指定して、「続行」をクリックします。

  3. 通常のデータベースのクローニングと同じように、ウィザードのステップを進めます。詳細は、各ステップのオンライン・ヘルプを参照してください。

  4. ウィザードの「データベース構成」ステップで、マスキング定義を追加してから「SQLパフォーマンス・アナライザ」オプションおよびその他の任意のオプションを選択します。

  5. クローン・ジョブをスケジュールして実行します。

パフォーマンスの評価のためのテスト・システムのマスキング

データ・マスキング定義を作成した後、テスト・システムでのマスキングによるパフォーマンスの影響の分析に使用する場合があります。次の各項の手順では、マスキングのみまたはクローニングとマスキングでのこのタスクのプロセスを説明しています。

マスキングのみを使用した評価

マスキングのみを使用してパフォーマンスを評価するには:

  1. 「データ・マスキング定義」ページで、分析するマスキング定義を選択してから「ジョブのスケジュール」をクリックします。

    「データ・マスキング・ジョブのスケジュール」ページが表示されます。

  2. ページの上部に、必要な情報を指定します。

    スクリプト・ファイルの場所は、マスキング・スクリプトに関係し、これには「マスク前およびマスク後スクリプト」で作成したマスキング前およびマスキング後スクリプトも含まれます。

  3. 「暗号化シード」セクションで、暗号化に使用するテキスト文字列を指定します。

    このセクションは、「置換」または「暗号化」フォーマットを使用するマスキング定義にのみ表示されます。シードは、暗号化/ハッシュベースの置換APIによって使用される暗号化キーで、マスキングがランダムではなく、より決定的になります。

  4. 「ワークロード」セクションで次を実行します。

    1. 必要に応じて、「SQLチューニング・セットのマスク」オプションを選択します。

      機密データを含むSQLチューニング・セットを使用してパフォーマンスを評価する場合、セキュリティ、データベースとデータの整合性および適切な評価結果の生成のために有効です。

    2. 必要に応じて、「取得ファイル」オプションを選択して、取得ディレクトリを選択します。

      このオプションを選択すると、ディレクトリのコンテンツがマスキングされます。取得ファイルのマスキングは、データベースと一貫した状態で実行されます。

  5. 「マスキングによるSQL計画の変更の検出」セクションで、「SQLパフォーマンス・アナライザの実行」オプションを選択解除します。

    作成したマスキング前およびマスキング後スクリプト(ステップ2参照)は、すでにアナライザを実行しているため、このオプションを有効にする必要はありません。

  6. 資格証明およびスケジュール情報を指定して、「発行」をクリックします。

    「データ・マスキング定義」ページが再表示され、データ・マスキング・ジョブが正常に発行されたことを示すメッセージが表示されます。

    データベースのマスキング中に、AWRバインド変数データが削除され、機密バインド変数のテスト・システムへの漏洩を防止します。

  7. ジョブが正常に完了してから、「SQLパフォーマンス・アナライザのタスク」列のリンクをクリックして、実行された分析タスクおよび計画の変更、タイミングなどを示す試行比較レポートを表示します。

クローニングおよびマスキングを使用した評価

クローニングおよびマスキングの両方を使用したパフォーマンスの評価は、「データ・マスキング・ジョブのスケジュール」からではなく、「データベースのクローニング」ウィザードからオプションを指定するという点以外は、前述の項で説明した手順と非常に類似しています。

クローニングおよびマスキングの両方を使用してパフォーマンスを評価するには:

  1. 「データ・マスキング定義」ページで、クローニングするマスキング定義を選択し、「アクション」リストから「データベースのクローニング」を選択し、「実行」をクリックします。

    「クローン・データベース: ソース・タイプ」ページが表示されます。

    テスト・システムを作成してマスキングを実行できる、データベースのクローニング・ウィザードが表示されます。

  2. クローニング操作に使用するソース・データベース・バックアップのタイプを指定して、「続行」をクリックします。

  3. 通常のデータベースのクローニングと同じように、ウィザードのステップを進めます。詳細は、各ステップのオンライン・ヘルプを参照してください。

  4. ウィザードの「データベース構成」ステップで、マスキング定義を追加してから「SQLパフォーマンス・アナライザ」オプションおよびその他の任意のオプションを選択します。

    注意:

    データベース構成ステップのフォーマットが、「マスキングのみを使用した評価」で説明した「データ・マスキング・ジョブのスケジュール」ページとは異なって表示されますが、「データ・マスキング・ジョブのスケジュール」ページと同じようにオプションを選択します。

  5. ウィザードのステップを続行して、クローニングおよびマスキング・ジョブを完了および発行します。

アップグレードに関する考慮事項

データのマスキング定義を10または11 Grid Controlから12c Cloud Controlにアップグレードする場合、次のタスクが完了していることが前提です。

  • Enterprise Managerが12cにアップグレードされています。

  • 自己更新を使用し最新のデータベース・プラグインがダウンロードされ、プラグインがOMSおよび管理エージェントにデプロイされています。

これらのタスクが完了すると、マスキング定義が自動的にアップグレードされ、レガシー・マスク定義から機密列およびその依存列情報が移入されるシェルApplication Data Model (ADM)がそれぞれ作成されます。ADMは(またはデータ・マスキングも)ディクショナリ関係がないため、検証されていない状態のままになります。

次に従って進み、マスキング定義のアップグレードを完了します。

  1. 「エンタープライズ」メニューから「クオリティ管理」を選択し、次に「データ検出およびモデリング」を選択します。

  2. 各シェルADM(検証のステータスは、アップグレードが必要)に対し、次を実行します。

    1. 表のADMを選択します。

    2. 「アクション」メニューから、「アップグレードと検証」を選択します。

    3. ジョブをスケジュールして発行します。

      ジョブが完了したら検証のステータスは有効になります。

  3. 「エンタープライズ」メニューから「クオリティ管理」を選択し、次に「データ・マスキング定義」を選択します。

  4. アップグレードされた各マスキング定義に対し、次を実行します。

    1. 編集するためにマスキング定義を開きます。

    2. 「拡張オプション」で「マスキング後の無効な依存オブジェクトの再コンパイル」オプションを「パラレル」および「デフォルト」設定とともに選択します。

    3. 「OK」をクリックして、変更を保存します。

  5. 次に、アップグレードした各マスキング定義に対し、スクリプトの生成ジョブをスケジュールします。

これで、アップグレードされたデータ・マスキング定義を使用し、マスキングを再開できます。

関連項目:

依存列の詳細は、「依存列の追加」を参照してください

アップグレードに関して次のその他の点もご注意ください。

  • 複数のアップグレードしたADMを結合するには、ADMをエクスポートして別のADMに対して「コンテンツのインポート」を実行します。

  • アップグレードしたADMでは、レガシー・マスク定義をアップグレードしたのと同じセマンティクスを使用し(前述で説明)、その際、検証を実行する必要があります。

  • Oracleより出荷されたEBSマスキング・テンプレートに基づく11.1 Grid Control E-Business Suite (EBS)マスキング定義は、アップグレード後にはカスタム・アプリケーションとして扱われます。前述の1番目の項目で説明されているアプローチを使用して、すべてのメタデータを持つ、新規に作成された EBS ADMにいつでも移行できます。だし、これは必須ではありません。

シャッフル・フォーマットの使用

列値が一意でない場合および条件付でマスキングされている場合、データ配分を保持しないシャッフル・フォーマットが使用できます。たとえば、EmpNameとSalaryの2つの列がある元の表(表4-1)があるとします。Salary列には10、90、20という3つの個別の値があります。

表4-1 元の表(保持せず)

EmpName Salary
A 10
B 90
C 10
D 10
E 90
F 20

Salary列をこのフォーマットでマスキングすると、元の値はそれぞれ、このセットの値の1つに置き換えられます。シャッフル・フォーマットが10を20に、90を10に、20を90に置き換えたと仮定します(表4-2)。

表4-2 マッピング表(保持せず)

EmpName Salary
10 20
90 10
20 90

この結果シャッフルされたSalary列がマスクされた表(表4-3)に表示されますが、データ配分は変更されています。値10は元の表のSalary列では3回発生しますが、マスクされた表では2回発生するだけです。

表4-3 マスクされた表(保持せず)

EmpName Salary
A 20
B 10
C 20
D 20
E 10
F 90

salaryの値が一意である場合、フォーマットによりデータ配分が保持されます。

グループ・シャッフルの使用

グループ・シャッフルでは、グループのメンバー間で関係がある個別のユニットまたはグループ内のシャッフルを実行できます。従業員の給与をシャッフルする場合を考えてみます。表4-4 では、従業員を管理者(M)と就業者(W)に分類し、ジョブ・カテゴリ内で給与をシャッフルする、グループ・シャッフルのメカニズムを示しています。

表4-4 ジョブ・カテゴリを使用したグループ・シャッフル

従業員 ジョブ・カテゴリ Salary シャッフルされた給与

Alice

M

90

88

Bill

M

88

90

Carol

W

72

70

Denise

W

57

45

Eddie

W

70

57

Frank

W

45

72

条件付マスキングの使用

条件付マスキングで重複した値がどのように処理されるかを示すために、表4-4にアシスタント(A)というジョブ・カテゴリを追加し、このカテゴリの従業員Georgeを、Frankと同じ給与にします。想定する条件は、次のとおりです。

  • ジョブ・カテゴリがMである場合、給与を1から10の間のランダムな数字に置き換えます。

  • ジョブ・カテゴリがWである場合、給与を固定の数値(01)に設定します。

  • デフォルトでは、既存の値を保持します。

これらの条件を適用すると、表4-5のマスクされた値となります。

表4-5 グループ・シャッフルでのジョブ・カテゴリの使用

従業員 ジョブ・カテゴリ Salary 条件結果

Alice

M

90

5

Bill

M

88

7

Carol

W

72

01

Denise

W

57

01

Eddie

W

70

01

Frank

W

45

01

George

A

45

45

条件付きマスキングが機能するのは、重複した値が指定されている場合、依存列または外部キーがない場合です。これらのいずれかが存在する場合、ブリーディング条件によって、2つの重複した値のうち1番目の値が2番目の値となります。そのため、この例では、Georgeの給与は保持されず、01になります。

LONG列を含むデータ・マスキングの使用

データ・マスキング・スクリプトの生成が完了したら、影響レポートが表示されます。マスキング定義に、データ型LONGの列を持つ表がある場合、影響レポートに次の警告メッセージが表示されます。

The table <table_name> has a LONG column. Data Masking uses "in-place" UPDATE 
to mask tables with LONG columns. This will generate undo information and the
original data will be available in the undo tablespaces during the undo 
retention period. You should purge undo information after masking the data. 
Any orphan rows in this table will not be masked.