ここではData Safeのデータ・マスキングの機能を使って、Oracle Cloudに格納されている氏名や住所などの機微な情報をマスキングする手順を紹介します。実際に、Autonomous Databaseにテストデータを作成して、Data Safeのマスキング機能でデータをマスキングする一連の流れを紹介します。
事前準備
- Data Safeが、以下の手順で有効化済み
- Data Safeと同じリージョンのAutonomous Transaction Processing
- Compute Instance
- 必須ではありません。OCIのVMインスタンスだとほぼCopy&Pasteで実行可能です。既にSQLPlusでの実行環境がある方は、そちらで実行して下さい
テストデータの生成
※以降 Wallet_ATP名 = Wallet_demoatpとして記述
$ pwd
/home/opc
$ unzip Wallet_demoatp.zip -d Wallet_demoatp
Oracle Clientのインストール&設定
$ wget https://download.oracle.com/otn_software/linux/instantclient/193000/oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
$ sudo rpm -ivh oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
$ wget https://download.oracle.com/otn_software/linux/instantclient/193000/oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm
$ sudo rpm -ivh oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm
$ export TNS_ADMIN=/home/opc/Wallet_demoatp
$ vi Wallet_demoatp/sqlnet.ora
※Wallet_locationのDIRECTORYパスを変更
DIRECTORY="/home/opc/Wallet_demoatp"
Githubからテスト・データ作成スクリプトをダウンロード
$ wget https://raw.githubusercontent.com/westan24/datasafedemo/master/create_verification_data.sql
ATPへの接続 &テスト・データ作成スクリプト実行
$ sqlplus ADMIN/パスワード@demoatp_high
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
SQL> @create_verification_data
作成されたデータの確認
SQL> select * from DEMO.DEPARTMENTS;
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
10 Administration 200 1700
20 Marketing 201 1800
30 Purchasing 114 1700
Data SafeにターゲットDBとして登録
-
言語をEnglishに変更し、Data SafeのRegisterをクリック ※日本語だとRegisterが表示されません
-
SQL権限スクリプトをComputeインスタンスにアップロードして、以下を実行
このスクリプトはATPのADMINユーザーで実行する必要があります
SQL> @dscs_privileges.sql DS$ADMIN GRANT ALL
Done.
ユーザ独自のマスキング定義を作成
EMPLOYEES表に格納されている列を下記のマスキング形式に従ってマスキングを実行する
列名 | マスキング形式 | マスキング結果 |
---|---|---|
FIRST_NAME | Random Name | Urgejkhyrytmn |
LAST_NAME | Random Name | Rtjtnszncxa |
Email Address | CLHJEw@pxhxcxee.gov | |
HIRE_DATE | Date-Past | 1987-06-17T00:00:00Z |
CARD_NO | Credit Card Number | 6212345678900016 |
DEPARTMENT_ID | Format Preserving Randomization | 90 |
PHONE_NUMBER | ユーザー定義 | 080-9542-3091 |
ここでは、Build-inで用意されていない日本の携帯番号のマスキング形式をユーザー定義として作成する
-
以下のように作成する
検証用のデータを確認する
-
確認用スクリプトをコピーする
- スクリプト実行。EMPLOYEE_IDでソートし、マスク後の結果と見比べるために現在のデータを確認しておく
Sensitive Data Discoveryでマスキング対象列の検出
データ・マスキング列とフォーマットの指定
-
Sensitive TypeにCard Numberを選択。DEMOスキーマのEMPLOYEESテーブルのCARD_NO列をチェックしてAdd to Resultをクリック
-
Sensitive TypeにWork Permit Numberを選択。DEMOスキーマのDEPARTMENTSテーブルのDEPARTMENT_ID列をチェックしてAdd to Resultをクリック
-
それぞれの列には、対応するマスキング・フォーマットが自動設定されている
PHONE_NUMBER列だけをデフォルトから作成済みの独自のマスキングフォーマットに変更する。PHONE_NUMBER列の編集アイコンをクリック
データ・マスキングの実行
データ・マスキングの応用編として、ハッシュのように毎回同じ値にマスキング、日本語を含んだマルチバイトデータを含むマスキングをしたい場合など、ビルトインのマスキング形式だけではもの足りない場合は、User Defined Function(ユーザー定義関数)を使います。
例えば、以下のような独自の関数を作成しておき、それをマスキング形式で選択しておくことで実行することができます。
/* 文字列をハッシュ値に変換する関数
CREATE OR REPLACE FUNCTION Hash_SHA1(rid varchar2,column_name varchar2,orig_val VARCHAR2) RETURN VARCHAR2
IS
stext varchar2(50);
vHashed RAW(20);
vText VARCHAR2(2000);
BEGIN
vText := orig_val;
vHashed := DBMS_CRYPTO.HASH(
src => UTL_I18N.STRING_TO_RAW (vText, 'AL32UTF8'),
typ => DBMS_CRYPTO.HASH_SH1
);
RETURN TO_CHAR (vHashed);
END;
今回は、対象のデータベースにAutonomous DBを使用しました。Autonomous DB以外のDatabase Cloudサービスのインスタンスを対象にする場合は、登録手順が若干異なります。
従来通りのTCPによるアクセス、またはOracle Walletを利用したTLSアクセスのいずれかの方式で登録設定を行います。詳しくをドキュメントを参照下さい。
次はアクテビティ監査の設定を追加する手順をご紹介します。
Oracle Data Safeの関連情報はこちら