メモ > 技術 > データベース: MySQL > データのマスキング
データのマスキング
開発環境のデータベースでも本番環境相当のデータを使う - クックパッド開発者ブログ
https://techlife.cookpad.com/entry/2024/10/01/105503
開発環境のデータをできるだけ本番に近づける - クックパッド開発者ブログ
https://techlife.cookpad.com/entry/2014/10/03/110806
開発/Stg環境のための本番DBマスキングと継続的リストアの仕組みを作りました | ランサーズ(Lancers)エンジニアブログ
https://engineer.blog.lancers.jp/sre/auto-masking/
本番DBを開発用にマスキング - 技術情報のメモ書
https://gijutsu.com/2022/07/02/data-masking/
本番環境のデータをマスクしてステージング環境に同期する - 食べチョク開発者ブログ
https://tech.tabechoku.com/entry/2018/11/29/113244
本番環境のデータをマスキング加工して安全にアクセスできる調査環境を作った - HRBrain Blog
https://times.hrbrain.co.jp/entry/go-aws-masking-production-data
本番環境のデータをマスクしてステージング環境に自動同期する仕組みを作りました【AWS CDK/SDK】1 ~CDK編~
https://zenn.dev/chycara344/articles/7529bd5539de03
データマスキングとは何か? - 静的データマスキングと動的データマスキングの説明 - AWS
https://aws.amazon.com/jp/what-is/data-masking/
やり方は色々考えられるが、マスキング処理自体は「UPDATE分を作成してデータを置換する」という作業を行うことになりそう
以下、マスキングの検証を行ったもの
CREATE TABLE customers(
id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
name_sei VARCHAR(80) NOT NULL COMMENT '姓',
name_mei VARCHAR(80) NOT NULL COMMENT '名',
email VARCHAR(255) COMMENT 'メールアドレス',
tel VARCHAR(80) COMMENT '電話番号',
PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '顧客情報';
INSERT INTO customers VALUES(NULL, '山田', '太郎', 'taro@refirio.net', '090-1234-5678');
INSERT INTO customers VALUES(NULL, '鈴木', '健次郎', 'kenjirou@refirio.org', '090-2345-6789');
INSERT INTO customers VALUES(NULL, '佐藤', '花子', 'hanako@refirio.net', '06-3456-7890');
上記データに対してマスキングを行う
具体的には
・名前は、最後の文字を残して「〇」にする。例えば「山田」は「〇田」にする
・メールアドレスは、ドメインはそのままに、アカウント名を「固定文字 + ID」にする。例えば「taro@refirio.net」は「test1@refirio.net」にする
・電話番号は、市外局番はそのままに、それ以降をIDにする。例えば「090-1234-5678」は「090-0000-0001」にする
という処理を行っている
UPDATE
customers
SET
name_sei = CONCAT(
REPEAT('〇', CHAR_LENGTH(name_sei) - 1),
SUBSTRING(name_sei, -1, 1)
)
;
UPDATE
customers
SET
name_mei = CONCAT(
REPEAT('〇', CHAR_LENGTH(name_mei) - 1),
SUBSTRING(name_mei, -1, 1)
)
;
UPDATE
customers
SET
email = CONCAT(
'test', id, '@', SUBSTRING_INDEX(email, '@', -1)
)
;
UPDATE
customers
SET
tel = CONCAT(
SUBSTRING_INDEX(tel, '-', 1),
'-',
LPAD(FLOOR(id / 10000), 4, '0'),
'-',
LPAD(MOD(id, 10000), 4, '0')
)
;