背景
データマスキングとは、氏名、身分証番号、携帯電話番号、固定電話番号、銀行カード番号、メールアドレスなどの個人情報について、マスキングアルゴリズムを用いてデータを変換し、機密性の高いプライバシーデータを保護することを指します。
概念の紹介
データマスキング:データ処理およびデータ保存の過程において、特定のアルゴリズムや技術を用いて機密情報を加工・曖昧化または置き換えることで、データを識別不能または復元が困難な状態にし、データセキュリティの保護とデータ漏洩の防止を実現する手法です。
動的データマスキング:機密情報に対してリアルタイムでマスキング処理を行い、ユーザーがデータベースをクエリする際にのみデータをマスキングします。データベース内のソースデータは変更しません。動的データマスキングは通常、本番環境で使用され、元のデータの完全性と正確性を維持しつつ、データ漏洩のリスクを回避できます。欠点として、処理速度が遅くなる可能性があり、データベースのクエリ効率に影響を与える可能性があります。
静的データマスキング:機密情報に対して事前処理を行い、処理後のデータを元のデータに置き換えてデータベースなどのストレージ媒体に保存します。静的データマスキングは通常、テスト、開発、デモ環境で使用され、機密情報が許可されていない人物によって閲覧されるのを防ぎ、機密情報の漏洩による法的責任を回避することができます。利点として、処理速度が速く、クエリ効率を向上させることができますが、元のデータを復元できないため、データの正確性に影響を与える可能性があります。
マスキングアルゴリズム:機密情報に対してマスキング処理を行うためのアルゴリズムです。マスキングアルゴリズムは、機密情報のセキュリティを効果的に保護し、情報漏洩を防ぐと同時に、クエリや利用を容易にするためにデータの形式と構造を保持します。
認識ルール:データマスキング機能では、ルールを使用してデータベース内の機密情報を自動的に識別します。機密列を追加する際、追加された認識ルールによって、一致する機密列が自動的に識別されます。
機密列:データベーステーブル内に含まれる機密情報を格納する列です。
原理の概要

実行プロセス

プロジェクト管理者は、セキュリティ仕様 > マスキングアルゴリズム で組み込みのマスキングアルゴリズムを確認し、マスキング効果をテストします。
プロジェクト管理者はODCの対象プロジェクト > 機密データ にて機密列を手動で追加します。自動スキャンにより機密列を追加する場合は、事前に識別ルールを作成する必要があります。
ユーザーがテーブルデータの表示、SQLウィンドウでのクエリ実行、結果セットのエクスポート、チケットのエクスポート、データベース変更チケットの操作を実行する際、含まれる機密列はマスキングされたデータとして出力されます。
前提条件
プロジェクト管理者またはDBAが機密列と識別ルールの管理をサポートします。
すべてのユーザーはマスキング効果を確認およびテストできますが、新規作成、編集、削除はできません。
注意事項
データマスキングは、現在コマンドラインウィンドウのシナリオには対応していません。
データマスキングは、現在PL実行シナリオには対応していません。
識別ルールスクリプトを設定する際、GroovyではJavaのObjectsクラスとStringクラスのみの使用が許可されています。
識別ルールスクリプトを設定する際、Groovyのクロージャーや組み込みのクロージャー関数はサポートされていません。
機密列の管理
機密列の追加
例:データベース odc_test のテーブル student の列 email と mobile_phone のデータをマスキングします。
プロジェクト協働ウィンドウで、プロジェクト > 機密列 > 機密列の追加 > 手動で追加 /スキャンして追加 をクリックします。

手動で追加 または スキャンして追加 で機密列を追加した後、送信 をクリックします。
方法1:機密列を手動で追加します。

方法2:機密列を自動スキャンします。
説明
機密列を自動スキャンする前に、識別ルールを新規作成する必要があります。具体的な操作については、このドキュメントの 識別ルールの管理 をご参照ください。

機密データ リストで、追加された機密列を表示および有効化できます。

機密列の編集
上図のように、機密データ リストで、操作項目の下にある 編集 ボタンをクリックすると、機密列のマスキングアルゴリズムを変更できます。
機密列の削除
機密データ リストで、操作項目の下にある 削除 ボタンをクリックすると、機密列を削除できます。
識別ルールの管理
識別ルールは、機密データ管理機能の拡張です。機密列を手動で追加する基盤の上に、カスタムの識別ルールを設定することで、機密列の自動スキャン検出を実現します。識別ルールはマッチング条件を定義し、ODCはその条件に合致するデータ列を機密列と判定します。ODCの識別ルールは、パス、正規表現、スクリプトの3種類を提供し、ユーザーが柔軟に選択できます。
パス:機密列が属するデータベース名、テーブル名、列名を識別対象とし、パス識別式を識別ルールとして入力します。ピリオド(.)でデータベース・テーブル・列名を区切り、アスタリスク(*)をワイルドカードとして使用し、カンマ(,)で複数のマッチングルールを指定します。
構成パラメータ必須説明ルール名 はい 識別ルールの名前(長さは64文字以内)。 ルール状態 はい 識別ルールの状態:有効/無効。 マッチングルール はい データ列を機密列とマッチングするルール。
例:*.*.mobile_phone は、任意のデータベースおよびテーブル内の mobile_phone という名前の列にマッチします。除外ルール いいえ データ列を機密列から除外するルール。 注意
データ列が機密列かどうかを判定する際、まず除外ルールが優先的に適用され、次にマッチングルールが適用されます。
マスキングアルゴリズム はい 識別された機密列にデフォルトで使用されるマスキングアルゴリズム。 ルール説明 いいえ 識別ルールの説明。 正規表現:機密列が属するデータベース名、テーブル名、列名、列コメントを識別対象とし、正規表現式を識別ルールとして入力します。
構成パラメータ必須説明ルール名 はい 識別ルールの名前(長さは64文字以内)。 ルール状態 はい 識別ルールの状態:有効/無効。 識別対象-データベース名 いいえ データベース名に一致する正規表現式。
例:*は、任意の名前のデータベースを表します。識別対象-テーブル名 いいえ データテーブル名に一致する正規表現式。
例:e[a-z]?.*は、英字 e で始まる任意の小文字の英語テーブル名を表します。識別対象-列名 いいえ 列名に一致する正規表現式。 識別対象-列コメント いいえ 列コメントに一致する正規表現式。 マスキングアルゴリズム はい 識別された機密列にデフォルトで使用されるマスキングアルゴリズム。 ルール説明 いいえ 識別ルールの説明。 スクリプト:機密列が属するデータベース名、テーブル名、列名、列コメント、データ型を識別対象とし、Groovy スクリプトを識別ルールとして入力します。
注意
スクリプトの出力はブール値でなければならず、
TrueまたはFalseである必要があります。構成パラメータ必須説明ルール名 はい 識別ルールの名前(長さは64文字以内)。 ルール状態 はい 識別ルールの状態:有効/無効。 Groovy スクリプト はい 機密列かどうかを判断する Groovy 構文に準拠したスクリプト。 マスキングアルゴリズム いいえ 識別された機密列にデフォルトで使用されるマスキングアルゴリズム。 ルール説明 いいえ 識別ルールの説明。 ODC には、Groovy スクリプト内で参照できる column という名前のオブジェクトが組み込まれています。このオブジェクトのプロパティと説明は以下のとおりです:
プロパティ型説明schema String 列が属するデータベース名。 table String 列が属するテーブル名。 name String 列の名前。 comment String 列の備考。 type String 列のデータ型。
よく使われるスクリプトによる識別ルールの例:
- アドレス
if (("varchar".equals(column.type) || "char".equals(column.type))) {
if (column.name.indexOf("address") >= 0) {
return true;
}
if (column.comment != null &&
(column.comment.toLowerCase().indexOf("address") >= 0
|| column.comment.indexOf("住所") >= 0
|| column.comment.indexOf("住址") >= 0
|| column.comment.indexOf("位置") >= 0)) {
return true;
}
}
return false;
- 携帯電話番号
if (column.name.length() == 11 && ("varchar".equals(column.type) || "char".equals(column.type))) {
if (column.name.indexOf("phone") >= 0 || column.name.indexOf("mobile") >= 0) {
return true;
}
if (column.comment != null &&
(column.comment.toLowerCase().indexOf("phone") >= 0
|| column.comment.indexOf("電話") >= 0
|| column.comment.indexOf("mobile") >= 0
|| column.comment.indexOf("携帯") >= 0)) {
return true;
}
}
return false;
- 身分証番号
if (column.name.length() >= 15 && ("varchar".equals(column.type) || "char".equals(column.type))) {
if (column.name.indexOf("id_number") >= 0 || column.name.indexOf("identity_card") >= 0) {
return true;
}
if (column.comment != null &&
(column.comment.toLowerCase().indexOf("identity card") >= 0
|| column.comment.indexOf("身分証") >= 0)) {
return true;
}
}
return false;
識別ルールの追加
例:管理者がデータベースodc_testのテーブルstudentの列mobile_phoneに対する識別ルールを追加します。
プロジェクト協働ウィンドウで、プロジェクト > 機密列 > 機密列の追加 > スキャンして追加 をクリックします。

機密列のスキャンと追加 ページで、識別ルール > 管理識別ルール を選択します。
管理識別ルール ページで、新規識別ルール をクリックします。
新規識別ルール ページで、ルール名、ルール状態、識別方式、マスキングアルゴリズムを入力または選択し、新規作成 をクリックします。
パスの例:
odc_test*.student.*a,*.*.mobile_phoneは、データベースodc_testのテーブルstudentの列mobile_phoneに一致することを示します。識別ルール リストで、追加された識別ルールを確認および有効化できます。
識別ルールの管理
上記の図のように、操作項目の下にある 表示/編集/削除 ボタンをクリックすると、識別ルールを表示/変更/削除できます。
デマスキングアルゴリズムの確認
プロジェクト協働ウィンドウの セキュリティ規範 > デマスキングアルゴリズム で、ODCがサポートするデマスキングアルゴリズムを確認できます。
ODCがサポートするデマスキングアルゴリズムは以下のとおりです:
アルゴリズム名 |
テストデータ |
結果プレビュー |
|---|---|---|
| 全部マスク(システムデフォルト) | test value | ***** |
| 個人情報(漢字) | 個人情報 | **名 |
| 個人情報(英字) | Personal Name | P** |
| ニックネーム | Nickname | N***e |
| メールアドレス | odc@test.com | o**@test.com |
| 住所 | Hangzhou, Zhejiang Province, China | Hangzhou, Z*** |
| 携帯電話番号 | 12300000000 | 135******00 |
| 固定電話 | 010-12345678 | **********78 |
| 身分証番号 | 123456789 | 1*******9 |
| 銀行カード番号 | 1234 5678 5678 1234 | ***************1234 |
| 車両ナンバー | 浙AB1234 | 浙A**234 |
| デバイス一意識別子 | AB123456789CD | ****89CD |
| IPアドレス | 10.123.456.789 | 10...* |
| MACアドレス | ab:cd:ef:gh:hi:jk | ab:*:*:*:*:* |
| MD5 | default | c21f969b5f03d33d43e04f8f136e7682 |
| SHA256 | default | 37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f |
| SHA512 | default | 1625cdb75d25d9f699fd2779f44095b6e320767f606f095eb7edab5581e9e3441adbb0d628832f7dc4574a77a382973ce22911b7e4df2a9d2c693826bbd125bc |
| SM3 | default | 40c357923156504f734717d8b4f5623e75209e9572701f4b51ef2a03d9ced863 |
| 数値切り捨て | 123.456 | 123 |
| NULL設定 | default | - |
| デフォルトルール | abcd1234 | abc**234 |
適用シナリオ
追加された機密列は、エクスポート、データベース変更、およびSQLウィンドウでの実行においてすべて有効になります。
シナリオ1:データエクスポート時のデータマスキングの有効化
例:データベースodc_testのstudentテーブルをエクスポートする際、データマスキングが自動的に有効になります。
SQL開発ウィンドウの左側のナビゲーションペインで、チケット エクスポート を選択し、studentテーブルを選択します。その後、エクスポートリストの操作から 表示 をクリックします。

エクスポートタスクの詳細ページの右下で、ダウンロード をクリックします。

ローカルディスクでダウンロードしたstudentテーブルを確認します。

シナリオ2:データベース変更
例:studentテーブルにデータを挿入する際、データマスキングが自動的に有効になります。
SQL開発ウィンドウの左側のナビゲーションペインで、チケット 新規データベース変更 を選択し、studentテーブルにデータを挿入します。
SQL開発ウィンドウの左側のナビゲーションバーの
で、データベース odc_test のstudentテーブルのマスキング後のデータを確認します。
シナリオ3:SQLウィンドウでのステートメント実行
例:studentテーブルにデータを挿入する際、データマスキングが自動的に有効になります。
SQLウィンドウで SQLステートメントの編集 を行い、studentテーブルにデータを挿入します。

結果タブで、studentテーブルのマスキング後のデータを確認できます。