レベル: 中級 難波 かおり (knamba@jp.ibm.com), ソフトウェア開発研究所 IM&Lotus開発, IBM
2009年 5月 11日 IBM Optim Data Privacy Solution バージョン1.2は、多様なデータ・プライバシー・ポリシーを提供し、データソース内のさまざまな機密情報をマスクすることができます。さらに、ユーザーが独自のデータ・プライバシー・ポリシーを作成することで、より複雑なデータのマスクや、企業独自のルールに従ったマスクも可能になります。本稿では、データ・プライバシー・ポリシーの作成手法とその具体例を紹介します。
1. はじめに
IBM Optim Data Privacy Solution バージョン1.2 (以下Optim V1.2)は、データソース内の機密情報をマスクすることで、データの安全性を保持するソリューションです。多様なデータ・プライバシー・ポリシーを提供することで、さまざまな機密情報、個人情報のマスクを可能にしています。また、JavaScriptにてインライン式ポリシーを記述することで、簡単なカスタマイズも可能です。
しかし、昨今データやアプリケーションは複雑化しており、Optim V1.2が提供するプライバシー・ポリシーでは対応できない場合もあります。そのような場合のために、Optim V1.2ではユーザー独自のプライバシー・ポリシーを作成して利用することも可能です。
「データ・プライバシー・ポリシーを使用したデータのマスク手法」で紹介されている通り、Optim V1.2が提供しているデータ・プライバシー・ポリシーは、ルックアップとルール・ベースの2種類です。Optim V1.2はどちらのポリシーについても、カスタム・ポリシーを作成することができます。その方法について、具体例とともに説明します。
2. ルックアップ・ポリシーのカスタマイズ
ルックアップ・ポリシーとは、マスク値を予め定義されたルックアップ表から取得し、データをマスクする手法です。マスク値がランダムな文字列や数値でなく、かつルールに従って生成されるものでもない場合に利用します。関連のある複数の列をマスクする場合に特に有効です。
カスタム・ルックアップ・ポリシーを作成するには、以下の手順を実行する必要があります。
- ルックアップ表を用意する
- データ・プライバシー・モデル・スキーマを定義する
- プライバシー・ポリシーを登録する
- プライバシー・ポリシーとルックアップ表を関連付ける
ここでは、例として「振り仮名付き姓」のルックアップ・ポリシーを作成することを考えます。Optim V1.2が提供している姓のルックアップ・ポリシーは、漢字姓のみをマスクするものです。マスクされるデータソースに振り仮名がある場合、漢字姓と振り仮名姓を同時にマスクすることができません。アプリケーションが振り仮名列を利用していない場合は、インライン式ポリシーにて適当な文字列に置き換えればよいですが、ソート等に使用している場合は、漢字の姓に対応した振り仮名でマスクする必要があります。そのような場合に使用する「振り仮名付き姓」のルックアップ・ポリシーを作成しましょう。
2.1. ルックアップ表を用意する
始めにマスク値を格納したルックアップ表を用意します。ルックアップ表は、実際に置換するデータの列に加えて、ハッシュ・ルックアップを実行するときに使用される通し番号を格納する列が必要です。この列には-4から始まる整数が格納されます。マイナスの値は、NULL値や空文字列など、特殊な値をマスクする時に使用されるものです。
ルックアップ表に挿入されるマスク値は、すべて固有である必要があります。必要な行数は、マスク値やマスクされる表のカーディナリティに依存します。「都道府県名」などカーディナリティの低いデータは、全データを挿入する必要がありますし、カーディナリティの非常に高い「人名」などの場合は、10000件を目処に可能な限り多くのデータを挿入する必要があります。
「振り仮名付き姓」ルックアップ・ポリシーは姓と姓の振り仮名をマスクするので、ルックアップ表はそれらを格納するLAST_NAME列、LAST_NAME_KANA列と、通し番号を格納するSEQ列が必要になります。表のスキーマをMY_LOOKUP、名前をLAST_NAME_KANAとすると、DB2上に作成する場合の表定義文は、リスト1のようになります。このテーブルにデータ(表1)を格納すれば、ルックアップ表の完成です。こちらに入っている表定義文(LastNameKanaLookup/create_my_lookup_table.txt)とサンプル・データ(LastNameKanaLookup/last_name_kana.csv)を利用すると、簡単に作成できます。
リスト1. 「振り仮名付き姓」ルックアップ表の定義
CREATE TABLE MY_LOOKUP.LAST_NAME_KANA
( SEQ INT NOT NULL PRIMARY KEY GENERATED AS IDENTITY (START WITH -4),
LAST_NAME VARCHAR(20),
LAST_NAME_KANA VARCHAR(40)); |
表 1. 「振り仮名付き姓」ルックアップ表のデータ (抜粋)
| SEQ | LAST_NAME | LAST_NAME_KANA |
|---|
| -4 | 丹野 | たんの | | -3 | 米田 | よねだ | | -2 | 川井 | かわい | | -1 | 中嶋 | なかじま | | 0 | 江口 | えぐち | | 1 | 長塚 | ながつか | | ... | | |
2.2. データ・プライバシー・モデル・スキーマを定義する
データ・プライバシー・モデルとは、データ・プライバシー・ポリシーの集合です。プライバシー・ポリシーを、設計時や使用時に分かりやすくするため、グループ化するものです。
プライバシー・モデルの実体は、ワークスペースのOptim Default/Optim Models/Data Privacyディレクトリ (以下Data Privacyディレクトリ) の下のxdsmファイルです。xdsmファイルはXMLで記述されますが、手で作成するのは容易ではありません。そこで、データ・プライバシー・モデル・スキーマを作成し、Optimに解釈させてモデルを生成することになります。
プライバシー・モデル・スキーマの実体は、Data Privacyディレクトリの下のxsdファイルであり、Data Privacyディレクトリのdpa.xsdスキーマのアノテーションです。ひとつのプライバシー・ポリシーをひとつのcomplexType要素とし、その子のannotation要素にポリシーの特性を、sequence要素にマスクするデータ列を記述していきます。プライバシー・モデル名はxsdファイルのファイル名、プライバシー・ポリシーの名前はannotation要素の孫であるPrivacyEntity要素のdisplayName属性に指定します。さらに詳細なアノテーション・ルールはdpa.xsdを参照してください。リスト2に「振り仮名付き姓」ルックアップ・ポリシーのプライバシー・モデル・スキーマを示します。
リスト2. 「振り仮名付き姓」ルックアップ・ポリシーのプライバシー・モデル・スキーマ
1)<complexType name="lastNameKanaType">
2) <annotation>
3) <appinfo source="optim-dp:PrivacyEntity">
4) <PrivacyEntity name="Last Name Kana">
5) <ReplacementType>Category Lookup</ReplacementType>
6) </PrivacyEntity>
7) </appinfo>
8) </annotation>
9) <sequence>
10) <element name="lastName" type="string"></element>
11) <element name="lastNameKana" type="string"></element>
12) </sequence>
13)</complexType> |
- 1行目: lastNameKanaTypeという名のタイプを宣言しています。
- 3行目: このアノテーションがプライバシー・ポリシー用であることを宣言しています。
- 4行目: ポリシーの名前がLast Name Kanaであることを指定しています。このname属性値もしくはdisplayName属性値がポリシーの名前として表示されます。
- 5行目: ポリシーがルックアップ・ポリシーであることを指定しています。
- 9-12行目: ポリシーが置換するのは、lastNameとlastNameKanaという名前の2つの文字列データであることを宣言しています。
実際に「振り仮名付き姓」ルックアップ・ポリシーのポリシー・モデル・スキーマを作成してみましょう。
- ファイル -> 新規 -> その他 メニューを選択します。
- 「ウィザードを選択」パネルで、XML -> XMLスキーマを選択し、次へボタンをクリックします。
- 「新規XMLスキーマ」パネルで、フォルダーとしてOptim Default -> Optim Models -> Data Privacyを指定し、ファイル名に「My Data Privacy.xsd」と入力し、終了ボタンをクリックします(図1)。このとき、My Data Privacyがプライバシー・ポリシー名となります。
図1. 「新規XMLスキーマ」パネル
- 表示されたXMLスキーマ・エディタの「ソース」タブをクリックし、リスト2の内容を<schema>エレメント内に追加します。
- ファイル -> 保管 メニューを選択し、ファイルを保存します。
こちらに「振り仮名付き姓」のデータ・プライバシー・ポリシー・スキーマ((LastNameKanaLookup/My Data Privacy.xsd)が格納されていますので、これをData Privacyディレクトリにインポートしても同じ結果が得られます。Optimエクスプローラにて、My Data Privacyというポリシー・グループが作成されていることを確認してください(図2)。
図2. My Data Privacyポリシー・グループの追加
2.3. プライバシー・ポリシーを作成する
前節の作業で作成されたMy Data Privacyポリシー・グループを展開すると、Last Name Kanaポリシー・フォルダも作成されていますが、その中身は空です。ポリシー・モデルを登録しただけでは、プライバシー・ポリシーが作成されないからです。ポリシー・スキーマを作成/変更したときは、Optimを使用してプライバシー・ポリシーを作成する必要があります。
プライバシー・ポリシーを作成するためには、My Privacy Modelプライバシー・モデルを右クリックし、プライバシー・ポリシーの作成コンテキスト・メニューを選択します。「ポリシーを上書きしますか」パネルが表示された場合は、はいボタンをクリックします。データ・プライバシー・モデルが正しく構文解析されると、Optim はスキーマのアノテーション付き置換タイプごとにポリシー・サービス・ファイル(psvcファイル)をData Privacyディレクトリに作成します。また、Optimエクスプローラには、Last Name Kanaポリシー・フォルダの下にLast Name Kana Lookupアイコンが表示されます(図3)。
ポリシー・サービス・ファイル名は、データ・プライバシー・モデル・スキーマのPrivacyEntity エレメントおよびReplacementType エレメントのname属性値に基づきます。ポリシー・サービス・ファイルの競合を回避するために、プライバシー・エンティティーには固有の名前を指定してください
 |
ポリシー作成時の問題判別
プライバシー・ポリシーのアイコンが表示されない場合、スキーマの記述に誤りがあります。以下の方法でエラー・ログを表示させ、問題判別を行ってください。
- ヘルプ -> Optim Studioについてをクリックします。
- 「Optim Studioについて」パネルで構成の詳細ボタンをクリックします。
- 「構成の詳細」パネルでエラー・ログの表示ボタンをクリックします。
|
|
図3. Last Name Kanaプライバシー・ポリシーの作成
2.4. プライバシー・ポリシーとルックアップ表を関連付ける
最後に、作成したプライバシー・ポリシーとルックアップ表を関連付けます。その方法は以下の通りです。
- ファイル -> 新規-> リレーショナル・データベース・モデルをクリックします。
- モデル名に「My Privacy Data」と入力して次へボタンをクリックします。
- 「データベース・スキーマ・セレクター」パネルで、2.1節でルックアップ表を作成したデータベースのMY_LOOKUPスキーマを選択し、終了ボタンをクリックします。
- My Privacy Modelプライバシー・モデルを右クリックし、ルックアップ・ポリシーの構成コンテキスト・メニューを選択します。
- 「ルックアップ・ポリシーの構成」パネルで、置換データソースとして、My Privacy Data.rdsmを選択します。
- 「ルックアップ・ポリシーの構成」パネルで、Last Name Kanaポリシーを展開し、Last Name Kana Lookupエントリーの右に表示される編集ボタンをクリックします(図4)。
図4. Last Name Kanaプライバシー・ポリシーの構成
- 「置換データ表セレクター」パネルで、LAST_NAME_KANA表を選択し、次へボタンをクリックします。
- 「シーケンス列セレクター」パネルで、SEQ列を選択し、次へボタンをクリックします。
- 「ルックアップ・データ列からプライバシー属性へのマッピング」パネルで、LAST_NAME列とlastNameKanaType.lastName属性、LAST_NAME_KANA列とlastNameKanaType.lastNameKana属性をマップし、終了ボタンをクリックします(図5)。
- 「ルックアップ・ポリシーの構成」パネルで、終了ボタンをクリックします。
図5. ルックアップ・データ列のマッピング
関連付けが成功したかどうかを見るには、OptimエクスプローラにてLast Name Kana Lookupアイコンをダブルクリックしてください。「ルックアップ表」タブをクリックすると、関連付けられたMY_LOOKUP.LAST_NAME_KANA表が表示されるはずです。また、関連付けに成功すると、Data PrivacyディレクトリにMy Data Privacy-1.0.0.jarが作成されます(バージョン番号は関連付けを行う度増加します)。このjarファイルはOptim管理サーバーにデプロイされ、サービス実行時に使用されます。
3. ルール・ベース・ポリシーのカスタマイズ
ルール・ベース・ポリシーとは、マスク値をプログラム的に生成し、データをマスクする手法です。マスク値が一定のルールに従って生成される場合に利用されます。チェック・ディジットが存在する数値や、並びに規則性のある文字列を生成する場合などに有効です。
カスタム・ルール・ベース・ポリシーを作成するには、以下の手順を実行する必要があります。
- データ・プライバシー・モデル・スキーマを定義する
- データ・プライバシー・ポリシーを登録する
- データ・マスク・プロバイダーを実装する
- ポリシーjar ファイルを生成する
ここでは、例として「日本のパスポート番号」ルール・ベース・ポリシーを作成することを考えます。日本のパスポート番号は2文字の英大文字と7桁の数字から構成されます。最初の英文字はTかMの2種類で、パスポートの有効期限(5年または10年)を表します。「文字のスクランブル」ルール・ベース・ポリシーを使用してマスクすることも可能ですが、最初の英文字で有効期限を判別するようなアプリケーションのテストをする場合は使用できません。正しいパスポート番号を生成することのできる「日本のパスポート番号」ルール・ベース・ポリシーを作成してみましょう。
3.1. データ・プライバシー・モデル・スキーマを定義する
ルックアップ・ポリシー同様、ルール・ベース・ポリシーもデータ・プライバシー・モデル・スキーマを定義する必要があります。今回作成する「日本のパスポート番号」ポリシーのスキーマはリスト3の通りです。
リスト3. 「日本のパスポート番号」ルール・ベース・ポリシーのプライバシー・モデル・スキーマ
1)<complexType name="jpPassportNumber">
2) <annotation>
3) <appinfo source="optim-dp:PrivacyEntity">
4) <PrivacyEntity name="JP Passport Number">
5) <ReplacementType>Category Rule</ReplacementType>
6) <MaskProvider name="JP Passport Number Mask Provider"
7) supportedMethods="RANDOM">
8) <providerClass>
9) com.mycompany.datamask.passport.JPPassportNumberMaskProvider
10) </providerClass>
11) <providerArtifact>MyPassportNumber.jar</providerArtifact>
12) <property name="OUTPUT_VALUE_PATH"
13) displayName="Column to be masked"
14) propertyType="OUTPUT_VALUE_PATH" javaType="String">
15) </property>
16) <property name="randomSeed" displayName="Random seed"
17) propertyType="LITERAL" javaType="Integer" mandatory="false">
18) </property>
19) </MaskProvider>
20) </PrivacyEntity>
21) </appinfo>
22) </annotation>
23)</complexType> |
- 1行目: jpPassportNumberという名のタイプを宣言しています。
- 3行目: このアノテーションがプライバシー・ポリシー用であることを宣言しています。
- 4行目: ポリシーの名前がJP Passport Numberであることを指定しています。このname属性値もしくはdisplayName属性値がポリシーの名前として表示されます。
- 5行目: ポリシーがルール・ベース・ポリシーであることを指定しています。
- 7行目: supportedMethods属性で、「RANDOM(マスク値をランダムに生成する)」を指定しています。supportedMethods属性値には、他に「MASK(ソース値に基づいてマスク値を生成する)」や「MASK_WITH_DATA(ソース値に基づきマスク値を生成し、ソース値及び別カラムに出現するソース値全てをマスクする)」を指定することができます。
- 9行目: データ・マスク・プロバイダー(3.3節で作成)のクラス名を指定しています。
- 12-15行目: ソース列とターゲット列を指定するためのプロパティを定義しています。RANDOMメソッドの場合、ソース列とターゲット列はpropertyType属性値がOUTPUT_VALUE_PATHの同一プロパティで指定されます。
- 16-18行目: JP Passport Numberポリシー固有のrandomSeedプロパティの定義です。randomSeedプロパティは、整数型でその入力は必須ではないことを意味しています。ポリシー・プロパティ・エディターには「Ramdom Seed」と表示されます。
実際に「日本のパスポート番号」ルール・ベース・ポリシーのポリシー・モデル・スキーマを作成してみましょう。
- ウィンドウ -> ビューの表示 -> その他 メニューを選択します。
- 「ビューの表示」パネルで、一般 -> ナビゲーターを選択し、OKボタンをクリックします。
- ナビゲーターにて、Optim Default -> Optim Models -> Data Privacyを展開し、表示された「My Data Privacy.xsd」ファイルをダブルクリックして、ファイルを開きます。
- 表示されたXMLスキーマ・エディタの「ソース」タブをクリックし、リスト3の内容を追加します。
- ファイル -> 保管 メニューを選択し、ファイルを保存します。
3.2. データ・プライバシー・ポリシーを登録する
プライバシー・ポリシーの登録方法は、ルックアップ・ポリシー同様、My Privacy Modelプライバシー・モデルを右クリックし、プライバシー・ポリシーの作成コンテキスト・メニューを選択します。「ポリシーを上書きしますか」パネルが表示された場合は、はいボタンをクリックします。スキーマが正しく解釈されプライバシー・ポリシーが作成されると、JP Passport Numberポリシー・フォルダの下にJP Passport Number Ruleアイコンが表示されます(図6)。なお、プライバシー・ポリシーを再作成すると、ルックアップ表との関連付けがなくなります。2.4節の作業を実行し、再度ポリシーとルックアップ表を関連付けてください。
図6. JP Passport Numberプライバシー・ポリシーの作成
3.3. データ・マスク・プロバイダーを実装する
ルール・ベース・ポリシーの実体は、com.ibm.nex.datamask.DataMaskContextとcom.ibm.nex.datamask.DataMaskProviderの2つのインターフェースを実装したJavaのプログラムです。これらのインターフェースの詳しいAPIについては、Optim Studioオンライン・ヘルプのOptim Data Pricacy APIを参照してください。
com.ibm.nex.datamask.DataMaskContext
com.ibm.nex.datamask.DataMaskContextは、プライバシー・ポリシーのコンテキスト情報を操作するためのインターフェースです。主として、プライバシー・ポリシー適用時に設定されたプロパティの値を取得するのに用いられます。プロパティ値の取得は、インターフェースのsetMaskPropertiesメソッドに実装し、必要なゲッターとセッターを個々のプロパティに対し定義していきます。「日本のパスポート番号」ルール・ベース・ポリシーでは、com.ibm.nex.datamask.DataMaskContextインターフェースを実装したDefaultDataMaskContextクラスを継承するJPPassportNumberMaskContextクラスを作成します。リスト4に示すようにRAMDOM_SEEDプロパティ値を取得、パスポート番号を生成するために使用する乱数ジェネレータを作成します。全コードはこちらに含まれるJPPassportNumber/com/mycompany/datamask/passport/JPPassportNumberMaskContext.javaを参照してください。
リスト4. JPPassportNumberMaskContextクラス (抜粋)
1) @Override
2) public void setMaskProperties(Map>String, Object< properties)
3) throws DataMaskPropertyException, DataMaskException {
4) super.setMaskProperties(properties);
5) Map>String, Object< propertiesMap = getMaskProperties();
6) if(propertiesMap.size() > 1){
7) throw new DataMaskException("Empty mask properties list specified!!");
8) }
9) try {
10) Object value = propertiesMap.get(RAMDOM_SEED);
11) if (value != null)
12) {
13) if(!(value instanceof Integer))
14) {
15) throw new DataMaskPropertyException("Property is not Integer type");
16) }
17) else
18) {
19) int seed = Integer.valueOf(value.toString());
20) setSeed(seed);
21) setRandomSeed(seed);
22) }
23) }
24) } catch (DataMaskPropertyException e) {
25) e.setPropertyName(RAMDOM_SEED);
26) throw e;
27) }
28) }
29) public void setRandomSeed(int randomSeed) {
30) this.mRandomSeed = randomSeed;
31) }
32) public int getRandomSeed() {
33) return mRandomSeed;
34) }
|
- 5行目: 親クラスのメソッドを呼び、プロパティ・マップを取得しています。
- 10-23行目: RAMDOM_SEEDプロパティ値が設定されていた場合は、値を整数に変換し、Contextクラスの乱数ジェネレータのシードに設定します。
- 29-34行目: RAMDOM_SEEDプロパティのセッターとゲッターです。今回ゲッターは使用していませんが、Providerクラスでプロパティ値を参照したい場合は、このようなゲッターを用意する必要があります。
com.ibm.nex.datamask.DataMaskProvider
com.ibm.nex.datamask.DataMaskProviderはデータのマスク操作を実装するためのインターフェースです。「日本のパスポート番号」ルール・ベース・ポリシーでは、DataMaskProviderインターフェースを実装したAbstractDataMaskProviderクラスを継承して、JPPassportNumberMaskProviderクラスを作成し、マスクするデータを生成するロジックを記述します。ロジックを記述するメソッドは、supportedMethods属性値(RANDOM、MASK、MASK_VALUE)に応じ、3種類(random(DataMaskContext)、mask(String, DataMaskContext)、mask(String, String, DataMaskContext))用意されています。「日本のパスポート番号」ルール・ベース・ポリシーでは、リスト3の通りRANDOMだけサポートしますので、randomメソッドのみにロジックを記述することになります。JPPassportNumberMaskProviderクラスのrandomメソッドはリスト5の通りです。全コードはこちらに含まれるJPPassportNumber/com/mycompany/datamask/passport/JPPassportNumberMaskProvider.javaを参照してください。
リスト5. JPPassportNumberMaskProviderクラスのrandomメソッド
1) @Override
2) public String random(DataMaskContext context) throws DataMaskException{
3) setJPPassportNumberMaskContext(context);
4) Random r = jpPassportNumberMaskContext.getRandomGenerator();
5) StringBuffer sb = new StringBuffer();
6) sb.append(EXPIRATION_PREFIX[r.nextInt(2)]);
7) sb.append((char) (0x41 + r.nextInt(26)));
8) DecimalFormat dfm = new DecimalFormat("0000000");
9) sb.append(dfm.format(r.nextInt(9999999)));
10) return sb.toString();
11) }
12) private void setJPPassportNumberMaskContext(DataMaskContext context)
13) throws DataMaskPropertyException, DataMaskException {
14) if (jpPassportNumberMaskContext == null) {
15) jpPassportNumberMaskContext = new JPPassportNumberMaskContext();
16) Map>String, Object< maskProperties = context.getMaskProperties();
17) jpPassportNumberMaskContext.setMaskProperties(maskProperties);
18) }
19) }
|
- 3行目: 12-19行目に定義されているsetJPPassportNumberMaskContextを呼び出し、JPPassportNumberMaskContextクラスのオブジェクトを取得しています。
- 4行目: JPPassportNumberMaskContextクラスの乱数ジェネレータを取得しています。
- 5-9行目: 取得した乱数ジェネレータを用いて、MもしくはTで始まる9桁のパスポート番号を生成しています。
- 10行目: 生成したマスク値を戻します。
- 12-19行目: setJPPassportNumberMaskContextメソッドの定義です。JPPassportNumberMaskContextクラスのオブジェクトを未取得の場合は、新たに作成してプロパティ値を設定します。
3.4. ポリシーjar ファイルを生成する
最後に、実装したデータ・マスク・プロバイダーをコンパイルして、そのclassファイルからポリシーjarファイルを生成し、プライバシー・ポリシーとして使用できるようにします。今回は、既に作成されているMy Data Privacyのポリシーjarに、プロバイダーを追加する形になります。ポリシーjarファイルの追加・作成方法は以下の通りです。
- 以下の4つのjarファイルをCLASSPATHに含めて、JPPassportNumberMaskContext.javaとJPPassportNumberMaskProvider.javaをコンパイルします。
- agent/executor/optim/com.ibm.nex.common.component.jar
- agent/executor/optim/com.ibm.nex.core.jar
- agent/executor/optim/com.ibm.nex.datamask.component.jar
- agent/executor/3rdparty/commons-logging.jar
注: 実際のこれらのファイル名にはバージョン番号が含まれています。ご使用の環境に応じて読み替えてください。
- データ・マスク・プロバイダーの2つのclassファイルからjarファイルを作成します。パッケージ階層が、データ・プライバシー・モデル・スキーマのproviderClassエレメントで設定した値と一致する必要があります(リスト3の9行目参照)。
> jar cf MyPassportNumber.jar \
com/mycompany/datamask/passport/JPPassportNumberMaskContext.class \
com/mycompany/datamask/passport/JPPassportNumberMaskProvider.class
- Optim Studioにて、My Privacy Modelプライバシー・モデルを右クリックし、新規ポリシーJarコンテキスト・メニューを選択します。
- 「最新バージョンのポリシーjar」パネルが表示された場合は、次へボタンをクリックします。
- 「追加のjar内容」パネル(図7)で、参照ボタンをクリックし、ステップ2で作成したMyPassportNumber.jarファイルを開き、次へボタンをクリックします。
図7. classファイルの追加
- 「jar作成オプション」パネルは、デフォルトの設定のまま、終了ボタンをクリックします。
正常に終了した場合、My Data Privacy-1.1.1.jarが作成されます。2.4節で作成したjarより、バージョン番号が増えたファイル名になります。
なお、ルックアップ表と関連付けられていないルックアップ・ポリシーが存在する場合、ポリシーjarの作成に失敗します。プライバシー・ポリシー・モデルが、ルックアップ・ポリシーとルール・ベース・ポリシーの双方を含む場合は、必ずルックアップ表を関連付けた後に、ポリシーjarファイルを作成してください。
4. カスタム・プライバシー・ポリシーの利用
作成したプライバシー・ポリシーは、製品が提供しているプライバシー・ポリシーと全く同様の方法で使用することができます。こちらに含まれるサンプル表(TestTable/create_demo_table.txt)を使用して、実際にポリシーを適用し、サービスを実行してみましょう。
- DEMO.CUSTOMERS表とDEMOTARGET.CUSTOMERS表に対するデータ・アクセス・モデルを作成します。
- データ・アクセス・モデルのDEMO.CUSTOMERS表を右クリックし、プライバシー・ポリシーの適用コンテキスト・メニューを選択します。
- My Data PrivacyモデルのLast Name Kanaポリシー・グループを選択し、次へボタンをクリックします。
- Last Name Kana Lookupポリシーを選択し、次へボタンをクリックします。
- ハッシュ値を計算してキーとして使用を選択し、次へボタンをクリックします。
- ハッシュ値としてCUSTOMER_ID列を選択し、次へボタンをクリックします。
- LAST_NAME列とlastNameKanaType.lastName、LAST_NAME_KANA列とlastNameKanaType.lastNameKanaをマップし、終了ボタンをクリックします。
- 再度データ・アクセス・モデルのDEMO.CUSTOMERS表を右クリックし、プライバシー・ポリシーの適用コンテキスト・メニューを選択します。
- My Data PrivacyモデルのJP Passport Numberポリシー・グループを選択し、次へボタンをクリックします。
- データ・マスク・メソッドとしてランダムを選択し(他は選択できません)、次へボタンをクリックします。
- 「Column to be masked」プロパティにPASSPORT_NUM列を、「Random seed」プロパティに適当な整数値(例: 12345)を入力して、終了ボタンをクリックします。
- DEMO.CUSTOMERS表からDEMOTARGET.CUSTOMERS表にデータをコピーするサービスを作成し、実行します。プライバシー・ポリシーを作成後初めてサービスを実行する場合は、作成したポリシーをOptim管理サーバーにデプロイするか確認するダイアログ(図8)が表示されますので、はいボタンをクリックします。
図8. 作成したポリシーのデプロイ
実行に成功した場合、表2のように姓と姓の振り仮名、パスポート番号がマスクされるはずです。
表 2. データのマスク例
| カラム名 | ソース値 | マスク値 |
|---|
| CUSTOMER_ID | 00030 | 00030 | | LAST_NAME | 浜口 | 小森 | | LAST_NAME_KANA | はまぐち | こもり | | GIVEN_NAME | 義啓 | 義啓 | | GIVEN_NAME_KANA | よしあき | よしあき | | PASSPORT_NUM | MB5635897 | MM5094519 |
5. おわりに
このように、IBM Optim Data Privacy Solution バージョン1.2は、製品に同梱されている多様なデータ・プライバシー・ポリシーに加え、ユーザー独自のデータ・プライバシー・ポリシーを作成することができます。既存のポリシーと組み合わせて使用することで、複雑なマスキングの要求に対しても柔軟に対応することが可能になります。
ダウンロード | 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|
| サンプルコード | MyDataPrivacy.zip | 17KB | HTTP |
|---|
参考文献
著者について  | |  | 難波かおりはソフトウェア開発研究所のIM&Lotus開発に所属し、データベース関連製品の開発に携わってきました。現在はIBM Optim製品群の品質保証および支援業務を担当しています。 |
記事の評価
|