【Oracle】データをマスキングしてみよう!(REGEXP_REPLACE)

Oracle

前回作った顧客データで、今回はREGEXP_REPLACE関数を使ってデータをマスキングしてみたいと思います!この記事を読むことで、REGEXP_REPLACE関数の使い方がわかるようになります。※データマスキングとは、元の文字や数字を別の文字や数字に置換してデータを隠すことです

データ準備

REGEXP_LIKE関数を試すために、データを用意しました!

顧客IDメールアドレス電話番号
1TaroItotaro.ito@gmail.com08023398165
2HanakoKobayashihanako.kobayashi@gmail.com08089612966
3IchiroKatoichiro.kato@gmail.com08064353174
4TaroNakamurataro.nakamura@gmail.com08014860647
5IchiroKatoichiro.kato@gmail.com08044267467
6JiroKatojiro.kato@gmail.com08036158106
7KenichiTanakakenichi.tanaka@gmail.com08035587214
8JiroSuzukijiro.suzuki@gmail.com08032635925
9YoshiKobayashiyoshi.kobayashi@gmail.com08047434156
10YoshiKatoyoshi.kato@gmail.com08056531654
顧客データ(データマスキング前)

前回の記事を確認して、テストデータを作ってみてください。

上記のデータをマスキングしてみました。

顧客IDメールアドレス電話番号
1◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
2◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
3◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
4◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
5◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
6◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
7◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
8◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
9◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
10◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
顧客データ(データマスキング後)

では、REGEXP_REPLACEの使い方をみていきましょう!

REGEXP_REPLACEを使う方法

REGEXP_REPLACE関数は、正規表現を使って特定のパターンに一致する文字列を別の文字列に置換することができます。

REGEXP_REPLACE(対象の文字列, 正規表現, 置換後の文字列)

では、顧客データをマスキングした状態で取得したいと思います。

CUSTOMER_IDFIRST_NAMELAST_NAMEEMAILPHONE
1TaroItotaro.ito@gmail.com08023398165
顧客データ(マスキング前)

SELECT
  customer_id AS "顧客ID",
  REGEXP_REPLACE(first_name, '.', '◼︎') AS "名",
  REGEXP_REPLACE(last_name, '.', '◼︎') AS "性",
  REGEXP_REPLACE(
    email,
    '([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)',
    'dummy@yahoo.co.jp'
  ) AS "メールアドレス",
  REGEXP_REPLACE(
    phone,
    '(\d{2,4})(\d{2,4})(\d{4})',
    '000-0000-0000'
  ) AS "電話番号"
FROM
  customers
WHERE
  customer_id = 1

顧客IDメールアドレス電話番号
1◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
顧客データ(マスキング前後)

マスキングすることができていたので、UPDATE文でデータを更新します。

UPDATE
  customers
SET
  first_name = REGEXP_REPLACE(first_name, '.', '◼︎'),
  last_name = REGEXP_REPLACE(last_name, '.', '◼︎'),
  email = REGEXP_REPLACE(
    email,
    '([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)',
    'dummy@yahoo.co.jp'
  ),
  phone = REGEXP_REPLACE(
    phone,
    '(\d{2,4})(\d{2,4})(\d{4})',
    '000-0000-0000'
  )
WHERE
  customer_id = 1;

データがマスキングされたか確認してみます。

SELECT
  customer_id,
  first_name,
  last_name,
  email,
  phone
FROM
  customers
WHERE
  ROWNUM <= 3;
CUSTOMER_IDFIRST_NAMELAST_NAMEEMAILPHONE
1◼︎◼︎◼︎◼︎◼︎◼︎◼︎dummy@yahoo.co.jp000-0000-0000
2HanakoKobayashihanako.kobayashi@gmail.com08089612966
3IchiroKatoichiro.kato@gmail.com08064353174
顧客データ(一部レコードのマスキング)

3レコードだけ取得してみましたが、顧客ID1のレコードがちゃんと更新されていることが確認できました!

まとめ

REGEXP_REPLACEは正規表現とマッチした文字列を置換してくれるものだと覚えておきましょう!

コメント

タイトルとURLをコピーしました