4 データ・マスキング

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

概要

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

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

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

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

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

表4-1 関連製品

Oracleソリューション 説明
Oracle Data Masking and Subsetting テストや開発データベースなどの非本番環境で使用する、本番データのマスキングおよびサブセッティングされたコピーを作成するためのソフトウェア。
Oracle Data Safe (データ検出/データ・マスキング) Oracle Cloud、オンプレミス、サードパーティのクラウドなど、Oracle Databasesをサポートするあらゆる場所のクラウド・サービスで、機密データを検出してマスキングします。
Oracle Label Security マルチレベル・セキュリティ(MLS)を実装し、機密性が異なる行を同じ表に配置できるようにします。グループ、コンパートメントおよび機密レベルの行を明示的にラベル付けし、ユーザー・ラベルと照合します。
Oracle Data Redaction クライアント・アプリケーションを介して表示される前に、問合せ結果から機密データをリダクションします。オーバーヘッドが低く、ポリシーに設定された条件に従って、実行時にリダクションを適用します。

データ・マスキング・コンポーネント

データ・マスキングは、次の2つの主要コンポーネントで構成されています:

  • マスキング・フォーマット

    マスキング・フォーマットは、特定のデータをマスキングする方法の定義を表します。たとえば、IPアドレスのマスキング・フォーマットは、0から255までの3桁のランダムな数字と固定文字列のドット(.)が4回繰り返される(末尾はドットなし)ように指定できます。マスキング・フォーマットには、ユーザーが作成したものか、Oracle付属のデフォルト・マスキング・フォーマットのリストから取得したものを使用できます。

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

  • マスキング定義

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

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

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

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

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

図4-1 推奨されるデータ・マスキングのワークフロー

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

このワークフロー図は、Oracle環境内のデータ・マスキングおよびサブセッティングのプロセスを示しており、次のステップが含まれています:

  1. 機密データの検出: 保護を必要とする機密データを識別します。
  2. マスキング・フォーマット: 事前定義済のOracle提供のテンプレートまたはカスタム・マスキング・ルールを使用して、マスキング・フォーマットを作成します。
  3. マスキング定義: 機密列とそれに関連付けられたマスキング・フォーマットを統合し、これらの列の機密データをマスキングする方法を定義します。
  4. 本番からステージングへのクローニング: 本番データのコピーが、マスキング操作が実行されるステージング環境にクローニングされます。
  5. マスキング・スクリプトの実行: 定義されたマスキング・ルールをクローニングされたデータに適用し、機密データが保護されるようにします。
  6. サブセット定義: サブセット・データに対する定義で、データの露出を制限します。
  7. マスキング定義の追加: マスキング・ルールをサブセッティング定義と組み合せます。
  8. マスキング/サブセッティング・スクリプトの実行: データ・セットに対してマスキングとサブセッティングの両方を実行します。
  9. 機密データの共有: マスキングされたデータおよびサブセッティングされたデータは、機密情報を漏らすことなく安全に共有できます。

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

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

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

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

マスキング・フォーマット

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

マスキング・フォーマットは1つ以上のフォーマット・エントリで構成され、フォーマット・エントリは固定文字列、ランダム文字列、シャッフルなどのサポートされている事前定義済のタイプのマスキング方法です。つまり、入力値を出力値に変換する方法を記述します。マスキング・フォーマットは、これらの変換の1つ以上の組合せであり、それらを連鎖して入力値を受け取り、最終的なマスキング値を出力します。

この項の内容は次のとおりです。

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

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

  1. 「ターゲット」メニューから、「データベース」を選択して「セキュリティ」メニューをクリックし、「Data Masking and Subsetting」「データ・マスキング」の順に移動します。「セキュリティ」「Data Masking and Subsetting」「データ・マスキング」の順に選択して、データベースのホーム・ページからこのメニューにアクセスすることもできます。

    「データ・マスキング」の下の「マスキング・フォーマット」に移動します。Oracle Enterprise Managerに付属する事前定義済のフォーマットが含まれた「データ・マスキングのフォーマット・ライブラリ」ページが表示されます。

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

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

  3. 新しいマスキング・フォーマットに必要な名前を指定して、説明を追加し、機密タイプを選択して、ドロップダウン・リストからカスタム・フォーマット・エントリ・タイプを選択します。

    選択したフォーマット・エントリにデータを入力できるセクションが表示されます。たとえば、「配列リスト」を選択した場合は、その隣のボックスにカンマ区切りの値のリスト(New York, New Jersey, New Hampshireなど)を入力できます。

  4. 必要に応じて続けて別のフォーマット・エントリを追加します。
  5. 完了したら、オプションのユーザー定義関数または後処理関数を指定し、「作成」をクリックして、このカスタマイズされたマスキング・フォーマットをライブラリに含めます。

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

既存のフォーマットからのマスキング・フォーマットの作成

フォーマットを少なくとも1つ作成したら、このフォーマットをテンプレートとして使用できます。このテンプレートでは、新しいフォーマットをゼロから作成するのではなく、マスキング・フォーマットの大部分を別の名前で実装し、必要に応じてエントリを変更できます。

  1. 「マスキング・フォーマット」ページに移動し、テンプレートとして使用するフォーマットを選択します。
  2. 「アクション」をクリックし、「類似作成」を選択します。
  3. 新しいフォーマットの名前を入力し、機密タイプを選択します。
  4. 必要に応じてフォーマット・エントリをカスタマイズし、「作成」をクリックします。

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

Enterprise Managerには、すぐに利用できるいくつかの事前定義済フォーマットが用意されています。様々な事前定義済フォーマットと組込みフォーマットが用意されています。

マスキング・フォーマットのカテゴリおよび特性

データ・マスキング・フォーマットには特性があります。一般的な特性には、結合可能、一意性、可逆的および決定論的があります:

  • 結合可能: マスキング・フォーマットは、条件を使用して他の基本マスキング・フォーマットまたは事前定義済マスキング・フォーマットと結合できる場合、結合可能とみなされます。
  • 一意性: マスキング・フォーマットは、生成されたマスキング済データの一意性が保証される場合、一意性を持つものとみなされます。これらのタイプのマスキング・フォーマットは、一意性制約がある列をマスキングする場合に便利です。
  • 可逆的: 可逆的とみなされるマスキング・フォーマットでは、マスキングされたデータから元の列データを取得できます。データ・マスキングは通常、データを完全に置き換えて、誰も元のデータを取得できないようにすることを意味します。ただし、元のデータの表示が必要になる場合があります。
  • 決定論的: 決定論的マスキング・フォーマットでは、データベースおよびデータ・マスキング・ジョブ間で、指定された入力に対して一貫性のある出力が生成されます。決定論的マスキングは、複数のアプリケーション間でデータの整合性を維持し、シングル・サインオン環境でシステムの整合性を保つために役立ちます。
マスキング・フォーマット 説明 マスクされたデータの例 結合可能 一意性
Visaクレジット・カード番号 最大100億個の一意のVisaクレジット・カード番号
  • 4929677281270400
  • 4929026969239255
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
米国電話番号フォーマット 最大27億個の一意の米国電話番号
  • 305-557-9243
  • 540-140-3020
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
米国電話番号 最大27億個の一意の米国電話番号
  • 6823682394
  • 3208603360
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
UPC番号フォーマット 最大1000億個のUPC番号
  • 1-12345-12345-1
  • 2-38193-12983-9
あり。指定範囲の個別値の数は、列の値の数以上である必要があります
UPC番号 最大1000億個のUPC番号
  • 277909630632
  • 492259845110
あり。指定範囲の個別値の数は、列の値の数以上である必要があります
社会保障番号フォーマット 最大7億1800万個の一意の米国社会保障番号
  • 058-20-6521
  • 337-71-7394
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
社会保障番号 最大7億1800万個の一意の米国社会保障番号
  • 087719720
  • 177470222
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
社会保険番号フォーマット 最大10億個の一意のカナダの社会保険番号
  • 861-115-129
  • 186-915-534
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
社会保険番号 最大10億個の一意のカナダの社会保険番号
  • 300580727
  • 780632832
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
国民保険番号フォーマット 一意の英国の国民保険番号を生成します
  • BH 85 53 00 D
  • RX 81 61 33 B
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
MasterCardクレジット・カード番号 最大100億個の一意のMasterCardクレジット・カード番号
  • 5353780646712850
  • 5259381925706856
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
ISBN (13桁)フォーマット 最大20億個の一意のISBN番号
  • 978-3-315533-40-1
  • 979-3-343005-63-4
はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
ISBN (13桁) 最大20億個の一意のISBN番号
  • 9792746294911
  • 9789075358902
はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
ISBN (10桁)フォーマット 最大10億個の一意のISBN番号
  • 8-13-132012-X
  • 7-69-626483-4
はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
ISBN (10桁) 最大10億個の一意のISBN番号
  • 9890454203
  • 7851091314
はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
汎用クレジット・カード番号フォーマット 最大100億個の一意の汎用クレジット・カード番号
  • 3647-1229-3400-9783
  • 3088-2317-5970-6344
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
汎用クレジット・カード番号 最大100億個の一意の汎用クレジット・カード番号
  • 5595470359501553
  • 3826796343439260
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
フィンランドの社会保障番号 最大24億個の一意のフィンランドの社会保障番号
  • 080309A635C
  • 290558-119J
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
Discover Cardクレジット・カード番号 最大100億個の一意のDiscover Cardクレジット・カード番号
  • 6011793517281170
  • 6011061023216399
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合
自動マスク・フォーマット 文字と数字のスクランブルによるマスキングこのフォーマットでは、入力長、入力内の文字と数字の位置、大文字と小文字の区別および特殊文字が保持されます。
  • 入力: ABCD_343_ddg
  • 出力: FHDT_657_tte
適用なし
American Expressクレジット・カード番号 最大100億個の一意のAmerican Expressクレジット・カード番号
  • 3791330644732875
  • 3481870017424316
はい、生成されたマスキングされた値が後処理機能検証に合格した場合 はい、LMFで生成できる個別値の数が、列の個別値の数より大きい場合

ノート:

上の表のすべてのマスキング・フォーマットで、決定論的および可逆的のフォーマット特性値は「いいえ」です。

マスキング・フォーマットの特性の詳細は、マスキング・フォーマットの特性を参照してください。

クレジット・カード番号

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

提供されているマスキング・フォーマットの一部には、次のようなクレジット・カード・タイプのカバレッジが含まれます:

  • Mastercard

  • VISA

  • アメリカン・エキスプレス

  • ディスカバー

  • 汎用クレジット・カード番号(すべてのカード・タイプに対応可能)

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

  • 番号のみ

  • 4桁ごとに空白を挿入

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

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

米国社会保障番号

デフォルトで、有効な米国社会保障番号(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としてマスクされます。

マスキング・フォーマットをカスタマイズするためのフォーマット・エントリ・オプション

フォーマット・エントリ・オプションは次のとおりです。

  1. 配列リスト

    値リストを入力として受け入れ、リスト内のそれぞれの値を入力列の値とマッピングします。リスト内の値の数は、マスクされた列の個別値の数以上にしてください。ユーザー指定のリストの値は、元の列値にマッピングされる前はランダムな順番になっています。たとえば、元の列に値[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は次から問い合せます。

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

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

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

      ノート:

      マスキング列が日付またはタイムスタンプの場合、ユーザーは配列リスト・フォーマットを使用して列をマスキングできます。サポートされている日付/タイムスタンプ書式は次のとおりです
      yyyy-MM-dd
      および
      yyyy-MM-DDTHH:mm:ssTZD

      たとえば、"2015-01-18"および"2015-01-18T03:25:46Z"です。

  2. 削除

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

    EMPID < 100 
          DELETE 
    EMPID < 200
    	    RANDOM NUMBERS [Start Value:1 End Value:100]
    DEFAULT
    	    PRESERVE ORIGINAL DATA
    

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

  3. 暗号化

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

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

    ノート:

    ユーザーが指定した正規表現の最大値は64ビットを超えることはできません。

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

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

  4. 固定数

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

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

  5. 固定文字列

    このフォーマットは参照やマッピング表を使用しません。文字列の列に固定文字列値を割り当てます。たとえば、ライセンス・プレート番号を持つ列をマスキングした場合、エントリの1つが固定文字列「CA」になる可能性があります。このフォーマットは結合できます。

  6. Null値

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

  7. 元のデータの保持

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

  8. ランダム日付

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

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

    このフォーマットは、データ範囲の後の末尾に結合できます。

  9. ランダム小数

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

  10. ランダム桁数

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

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

  11. ランダム数値

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

  12. ランダム文字列

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

  13. 正規表現

    このフォーマットは参照表を使用します。マッピング表は作成されません。フォーマットを実装する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.5555
      Regular Expression  	Regex: [9]{3}[.][4]{3}[.][5]{4} 	  Replacement Value: ***.***.****
    

    最初の正規表現と一致する各列の値がまず999.444.5555に置き換えられ、この値は次に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)の電話番号を格納するマスキング列の値に使用できます。

  14. シャッフル

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

  15. 置換

    このフォーマットでは、マッピング表が作成されます。ユーザー指定の「置換」表をマスキングされた値のソースとして使用します。このフォーマットでは、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
    
  16. SQL式

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

    1.	dbms_random.string('u', 8) || '@company.com'
    2.	%first_name% || '.' || %last_name% || '@company.com'
  17. 部分文字列

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

  18. 表の列

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

  19. 切捨て

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

  20. ユーザー定義関数

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

     function userdef_func(rowid varchar2, col_name varchar2, orig_val varchar2) returns varchar2;
  21. 後処理関数

    オプションで、一部のフォーマットには、すべてのフォーマット・エントリの実行後に出力を受け取って関数を実行し、最終的なマスクされた値を生成する、後処理関数を含めることもできます。

    このフォーマットでは、列値が標準データ・マスキング・フォーマットを使用してマスキングされた後、カスタム関数を使用して列値を処理できます。たとえば、まず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 ORIGINAL DATA
    

ノート:

前述のエントリ・オプションを使用した推奨されるマスキング・フォーマットのカスタマイズの詳細は、「よくある質問」を参照してください。

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

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

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

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

シャッフル形式を使用できますが、列値が一意でない場合、または条件付きマスキングが使用されている場合、元のデータの配分は維持されません。たとえば、EmpName列とSalary列の2つの列を持つ元の表では、Salary列に10、90、20などの個別の値がある場合があります。

元の表

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

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

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

EmpName Salary
10 20
90 10
20 90

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

マスキングされた表(保持せず)

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

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

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

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

従業員 ジョブ・カテゴリ 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

条件付きマスキングの使用

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

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

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

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

これらの条件を適用すると、次の表のマスキングされた値となります:

従業員 ジョブ・カテゴリ 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番目の値となります。そのため、この例では、Frankの給与は保持されず、01になります。

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

必要に応じて、マスキング・フォーマットの作成ページでユーザー定義関数および後処理関数を指定できます。ユーザー定義の選択肢はカスタム書式エントリ・リスト内、後処理関数フィールドはページ下部にあります。

  • ユーザー定義関数

    ユーザー定義関数を指定するには、ドロップダウン・リストから「ユーザー定義関数」を選択して、入力フィールドにアクセスします。

    ユーザー定義関数は、元の値を入力として受け取り、マスク値を戻します。出力値のデータ型と一意性は、元の出力値と互換性がある必要があります。それ以外の場合、ジョブの実行に失敗します。また、ユーザー定義関数は、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はマスキングされる値です。

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

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

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

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

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

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

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

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

マスキング定義

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

前提条件

マスキング定義を作成する前に、「前提条件」で要件および補足情報を確認してください。

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

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

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

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

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

パフォーマンスの評価を目的としてテスト・システムをマスキングする場合は、マスキング前スクリプトを追加して一時表にSQLプロファイルおよび統計をエクスポートしてから、マスキングの完了後にリストアすることで、マスキングの完了後に本番の統計およびSQLプロファイルが維持されるようにしてみてください。

ノート:

Enterprise Manager 24.1リリース1更新2 (RU02)の導入により、Enterprise Managerの「マスキング定義」ページで、削除されたデータベース・ターゲットから既存のターゲット・データベースにマスキング定義を再関連付けできるようになりました。

マスキング定義の作成

  1. 「ターゲット」メニューから、「データベース」を選択して「セキュリティ」メニューをクリックし、「Data Masking and Subsetting」「データ・マスキング」の順に移動します。または、特定のデータベースを右クリックし、「セキュリティ」「Data Masking and Subsetting」「データ・マスキング」に移動することもできます。

    「マスキング定義」ページが開き、新しいマスキング定義を作成したり、既存のマスキング定義を管理できます。

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

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

  3. 「名前」、「アプリケーション・データ・モデル」、「関連データベース」、「データベース名前付き資格証明」など、必要な詳細を指定します。

  4. 「次」をクリックして機密列およびマスキング・フォーマット・ページに移動し、マスキングするADMの機密列を選択できます。

    機密列は最初のセクションに表示され、マスキング定義に追加された列は次のセクションの下に表示されます。

  5. マスキングする機密列を選択します。

    「フォーマットの定義と追加」をクリックして列のフォーマットをすぐに定義するか、「列の追加」を選択して列をマスキング定義に追加して後でフォーマットを定義できます。

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

    使用可能なその他のマスキング・オプションを次に示します(省略可能):
    • グループ・マスキング: 選択した列をグループとしてマスキングする場合は、グループ・マスキングを有効にします。グループとしてマスキングする列は、すべて同じ表の列である必要があります。このチェック・ボックスが選択されている間に定義されたフォーマットは、選択したすべての列にグループとして適用されます。
    • フィルタリングされたすべての行の選択: 複数の列を個別にマスキングするのではなく、まとめてマスキングする場合は、フィルタリングされたすべての行の選択チェック・ボックスを選択します。

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

  6. 次のいずれかを行います:

    • 前のステップで「列の追加」を選択し、現時点ではマスキング・フォーマットを指定しない場合:

      最終的には、列のマスキング・フォーマットを定義する必要があります。マスキング・フォーマットを指定する準備ができたら、「マスキング定義」の「アクション」メニューに移動し、「編集」を選択してフォーマットを定義します。フォーマットを定義するには、次の手順を参照してください。

    • 前のステップで「フォーマットの定義と追加」を選択した場合:
      「フォーマットの定義と追加」ページが表示されます。このページでは、次に示すように、選択したすべての列のフォーマットを定義できます:
      • 事前定義済のマスキング・フォーマットのドロップダウンからマスキング・フォーマットを選択するか、独自にカスタマイズします。「インポート」をクリックします。
      • 1つ以上のフォーマット・エントリを指定できます。
      • 「生成」をクリックすると、サンプル・データを生成できます。
      • 列のフォーマット設定が終了したら、「追加」をクリックします。前に選択してマスキング・フォーマットを割り当てた機密列が、次のセクションに表示されるようになりました。「次」をクリックします。
  7. 「データ・マスキング」オプションを確認します。「次」をクリックする前に、マスキング前およびマスキング後のスクリプトを指定することもできます。マスキング前スクリプトおよびマスキング後のスクリプトの詳細は、「データ・マスキング拡張オプションの選択」を参照してください。

  8. 最終ページを確認し、「作成」をクリックして「マスキング定義」ページに戻ります。新しいマスキング定義が表の上部に表示されます。

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

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

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

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

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

    ノート:

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

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

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

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

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

  • 暗号化列の複号化:

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

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

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

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

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

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

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

乱数ジェネレータ

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

  • 速度を優先:

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

  • セキュリティを優先:

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

マスキング前処理およびマスキング後処理のスクリプト

マスキング前およびマスキング後のスクリプトは、ユーザーが必要に応じてマスキングの前後にSQL文およびPL/SQLストアド・プログラム・ユニット(プロシージャ、ファンクション、パッケージ、無名ブロック)を実行できるフリー・フロー・スクリプトです。

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

「マスク後スクリプト」テキスト・ボックスを使用して、マスキング完了後に実行するSQLスクリプトを指定します。

マスキング・スクリプトの作成

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

  1. スクリプトを生成するマスキング定義を選択して、「アクション」ボタンをクリックし、マスキング・スクリプトの管理マスキング・スクリプトの生成の順に選択します。
  2. 「データ・マスキング」オプションを選択します:
    • データベース内マスキング - 指定したデータベース(通常、本番からコピーされます)の機密データをマスキングされたデータでインプレース置換します。

    • エクスポート内マスキング – Oracle Data Pumpを使用して、指定したソース・データベース(通常、本番)からマスキングされたデータをエクスポートします。

    • 両方のオプション(つまり、データベースを直接マスキングするスクリプト、およびマスキングされたダンプを作成するスクリプト)を選択できます。

  3. ドロップダウン・リストから「関連データベース」および「データベース名前付き資格証明」を選択します。
  4. 必要に応じてデフォルトのジョブ名を意味のわかりやすい名前に変更し、ジョブの説明(オプション)を指定します。
  5. ジョブを即時に開始するか、後で指定した日時に開始するかを指定し、「生成」をクリックします。

    スクリプトの生成ジョブが正常に発行されたことを確認するメッセージが表示されます。「リフレッシュ」ボタンをクリックして、最新のジョブ・ステータスを確認します。

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

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

  1. スクリプトが生成されたマスキング定義を選択し、「アクション」をクリックして「マスキング・ジョブのスケジュール」を選択します。
  2. 「データ・マスキングのオプション」ラジオ・ボタンを選択して、プリファレンスを指定します:
    • データベース内マスキング – 指定されたデータベース内の機密データ(通常は本番からのコピー)をマスキングされたデータで直接置き換えます。このオプションは、非本番環境のみを対象としています。

      ノート:

      先に進むには選択したデータベースが本番データベースでないことを示すチェック・ボックスを有効にする必要があります。
    • エクスポート内マスキング – Oracle Data Pumpを使用して、指定したソース・データベース(通常は本番)からマスキングされたデータをエクスポートします。このオプションは、顧客データを変更しないため、本番環境は安全に保たれます。ただし、マスキング操作が完了すると削除される一時表が作成されます。選択内容によって、ラジオ・ボタンの下にあるチェック・ボックスのテキストおよびページ上のその他の領域が更新されます。

  3. ドロップダウン・メニューから、必要な「関連データベース」、「データベース名前付き資格証明」およびホストの名前付き資格証明を選択します。
  4. 一時オブジェクト用の表領域を選択します。3つの選択肢があります。
    1. デフォルトの表領域
    2. 一時表領域
    3. カスタム表領域

    ニーズに基づいて適切なオプションを選択します。

  5. 「ジョブ名」を入力するか、デフォルトの事前入力された値を受け入れます。
  6. ジョブをすぐに開始するか、後の日付と時刻に開始するかを指定します。その後、「次」をクリックします。
  7. ステップ2でデータベース内マスキングを選択した場合:
    1. スクリプト・ファイルの場所と名前を入力し(事前入力)、「発行」をクリックします。
  8. ステップ2でエクスポート内マスキングを選択した場合:
    1. エクスポート・ファイル名を入力します(事前入力)。
    2. エクスポート・ディレクトリのタイプからオプションを選択して、マスク・ダンプ・ファイルを保存するディレクトリを指定します。使用可能なオプションは、データベース・ディレクトリ、カスタム・ディレクトリまたは「外部ディレクトリ」です。
    3. エクスポートするデータを使用して、マスキングされたデータのみをエクスポートするか、マスキングされたデータとともにデータベース全体をエクスポートするかを選択します。データベース全体をエクスポートすると、ジョブ全体の実行時間が大幅に長くなる可能性があります。
    4. 最大エクスポート・ファイル・サイズ(MB)を入力します(事前入力)。オプションで、必要に応じてエクスポート・ファイルの圧縮の有効化またはエクスポート・ファイルの暗号化の有効化(あるいはその両方)を選択します。エクスポート・ファイルの暗号化が有効になっている場合は、暗号化パスワードを入力して確認します。
    5. 「スレッドの最大数」を指定します(事前入力)。
    6. データ・ダンプ・ログの生成はデフォルトで有効になっていますが、必要に応じてオフにすることもできます。
    7. 「発行」をクリックします。
  9. ジョブがスケジュールされたことを確認するメッセージが表示され、表の上にあるリフレッシュ・ボタンを使用してジョブ・ステータスを更新できます。