3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Oracle Data Safeのデータ・マスキングを試してみる

Last updated at Posted at 2020-01-16

ここではData Safeのデータ・マスキングの機能を使って、Oracle Cloudに格納されている氏名や住所などの機微な情報をマスキングする手順を紹介します。実際に、Autonomous Databaseにテストデータを作成して、Data Safeのマスキング機能でデータをマスキングする一連の流れを紹介します。

事前準備

  • Data Safeが、以下の手順で有効化済み
  • Data Safeと同じリージョンのAutonomous Transaction Processing
  • Compute Instance
    • 必須ではありません。OCIのVMインスタンスだとほぼCopy&Pasteで実行可能です。既にSQLPlusでの実行環境がある方は、そちらで実行して下さい

テストデータの生成

  • ATPのインスタンス詳細画面。DB接続をクリック
    image.png

  • クライアント資格証明書のダウンロードする
    image.png

  • ローカルにダウンロードしたWallet_ATP名.zipをコンピュート内にコピーして、ログイン

※以降 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が表示されません
    image.png

  • 登録完了後、View Consoleをクリック
    image.png

  • Targetsから登録するATP名をクリック
    image.png

  • Download Privilege Scriptリンクをクリックし、SQL権限スクリプトをダウンロード
    image.png

  • 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 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で用意されていない日本の携帯番号のマスキング形式をユーザー定義として作成する

  • Libraryタグを選択し、Masking Fromatsをクリック
    image.png

  • Addをクリック
    image.png

  • 以下のように作成する

    • Masking Format Name: Japanese Mobile Number
    • Add Formatをクリックして以下を追記
    • Random List: 070-, 080-, 090-
    • Random Digits: Start Length 4, End Length 4
    • Fixed String: -
    • Random Digits: Start Length 4, End Length 4
    • Resource Group: Default Resource Group
      image.png
  • 独自のマスキング定義(Japanese Mobile Number)が作成された
    image.png

検証用のデータを確認する

- スクリプト実行。EMPLOYEE_IDでソートし、マスク後の結果と見比べるために現在のデータを確認しておく
image.png

Sensitive Data Discoveryでマスキング対象列の検出

  • TargetDBを選択し、Continueをクリック
    image.png

  • 以下のように入力し、Continueをクリック

    • Masking Policy: Create
    • Sensitive Data Model: Create
    • Resource Group: Default Resource Group
      image.png
  • Continueをクリック
    image.png

  • Demoスキーマをチェックして、Continueをクリック
    image.png

  • Select Allをチェックして、Oracle定義済のSensitive Data Typeをすべて選択し、Continueをクリック
    image.png

  • Discoveryの完了。Continueをクリック
    image.png

データ・マスキング列とフォーマットの指定

  • Expand Allをスライド
    image.png

  • 1, 2を順に実行
    image.png

  • Sensitive TypeにCard Numberを選択。DEMOスキーマのEMPLOYEESテーブルのCARD_NO列をチェックしてAdd to Resultをクリック
    image.png

  • Sensitive TypeにWork Permit Numberを選択。DEMOスキーマのDEPARTMENTSテーブルのDEPARTMENT_ID列をチェックしてAdd to Resultをクリック
    image.png

  • チェックされているのが今回のマスキング対象列、Save and Continueをクリック
    image.png

  • それぞれの列には、対応するマスキング・フォーマットが自動設定されている
    PHONE_NUMBER列だけをデフォルトから作成済みの独自のマスキングフォーマットに変更する。PHONE_NUMBER列の編集アイコンをクリック
    image.png

  • PHONE_NUMBER列をJapanese Mobile Numberに変更
    image.png

  • Create Policyをクリック
    image.png

データ・マスキングの実行

  • Right Nowをチェックし、Reviewをクリック
    image.png

  • 本番の環境でないことの最終確認。データをマスキングすると元に戻すことはできない
    image.png

  • 1-2分程度でマスキングの完了。Reportをクリック
    image.png

  • データ・マスキング結果のレポート概要が表示される
    image.png

  • スクリプトを再実行。マスキング結果が定義通りに実行されているか確認する
    image.png

データ・マスキングの応用編として、ハッシュのように毎回同じ値にマスキング、日本語を含んだマルチバイトデータを含むマスキングをしたい場合など、ビルトインのマスキング形式だけではもの足りない場合は、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の関連情報はこちら

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?