Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
本番データを安全に利用する
Search
sasaki nobuya
September 04, 2017
Technology
0
2.9k
本番データを安全に利用する
本番データをdumpし、個人情報を含むカラムを指定のマスク方式でマスクしたdumpファイルを吐き出すgemを作った。
sasaki nobuya
September 04, 2017
Tweet
Share
More Decks by sasaki nobuya
See All by sasaki nobuya
エンジニアがプロダクトに向き合える組織づくり / Improve Product Development
mnc
6
4.4k
エンジニアがプロダクトに向き合うための意思決定カイゼン
mnc
4
2.3k
はじめてのB2B SaaSデータモデリング in Builderscon 2019
mnc
9
4.4k
はじめてのB2B SaaSデータモデリング in 吉祥寺.pm#18
mnc
6
11k
AWSインフラ設計とDB設計からわかるB2B SaaSのおもしろさ
mnc
2
1.3k
B2B SaaS開発 Configurabilityとマルチテナントをがんばる α版編
mnc
2
690
Other Decks in Technology
See All in Technology
SREのキャリアから経営に近づく - Enterprise Risk Managementを基に -
shonansurvivors
1
770
Sansan BIが実践する AI on BI とセマンティックレイヤー / data_summit_findy
sansan_randd
0
110
なぜ新機能リリース翌日にモニタリング可能なのか? 〜リードタイム短縮とリソース問題を「自走」で改善した話〜 / data_summit_findy_Session_2
sansan_randd
1
140
Kotlinで型安全にバイテンポラルデータを扱いたい! ReladomoラッパーをAIと実装してみた話
itohiro73
3
300
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
0
470
Playwrightで始めるUI自動テスト入門
devops_vtj
0
230
戦えるAIエージェントの作り方
iwiwi
24
12k
品質保証の取り組みを広げる仕組みづくり〜スキルの移譲と自律を支える実践知〜
tarappo
2
620
AI時代に必要なデータプラットフォームの要件とは by @Kazaneya_PR / 20251107
kazaneya
PRO
4
870
Data Engineering Guide 2025 #data_summit_findy by @Kazaneya_PR / 20251106
kazaneya
PRO
10
1.9k
AIエージェントは「使う」だけじゃなくて「作る」時代! 〜最新フレームワークで楽しく開発入門しよう〜
minorun365
9
1.4k
Data & AIの未来とLakeHouse
ishikawa_satoru
0
620
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
Site-Speed That Sticks
csswizardry
13
950
Done Done
chrislema
186
16k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
650
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
Writing Fast Ruby
sferik
630
62k
Transcript
2017 SpeeeKaigi #3 本番デー タを安全, 簡単に利用する 株式会社 Speee 佐々 木
延也 SpeeeKaigi 1
Pro le 佐々 木 延也 三重県出身 中日/HipHop/ ビシエド が好き 今年の8
月1 日 Speee 入社 前職はグルメ系Web サー ビスのWeb エンジニア/Android エンジニア SpeeeKaigi 2
みなさん 本番デー タでテストしてますか? SpeeeKaigi 3
本番デー タでテストするメリット SpeeeKaigi 4
本番デー タでテストするメリット 1. ユー ザー 目線にたってテストができる ( 失敗例) ユー ザー
は写真の順番にこだわりを持っていることが多い。 しかし開発環境の画像デー タが適当だったため、 そのことに 気づかずデー タ修正時に順番がバラバラになってしまった。 SpeeeKaigi 5
本番デー タでテストするメリット 2. 色々 なパター ンのデー タでテストがで きる ( 失敗例)
特定の条件下でインポー トしたデー タには通常のライフサイ クルでは存在するはずのデー タがなく、 それが原因で EXCEPTION が発生した。 SpeeeKaigi 6
本番デー タでテストするメリット 3. パフォー マンスの検証ができる ( 失敗例) 開発DB と本番DB で統計情報が異なっていたため開発環境で
はindex が使われていたが本番では使われていなかった。 そ れが原因でSlow クエリが頻発し一部のAP サー バー がダウン してしまった。 SpeeeKaigi 7
なぜ本番デー タのテストが活発で なかったのか? SpeeeKaigi 8
個人情報を保護してデー タを持っ てくるのが大変だから SpeeeKaigi 9
大変な理由① 1. 本番環境への影響を避ける必要性 mysqldump のオプションでテー ブルlock してしまったり するオペミスが起きうる。 レプリケー ションで持ってくる場合は本番DB
の設定を変 える必要がある。 SpeeeKaigi 10
大変な理由② 2. 元の形式を維持する必要性 理由 アプリのバリデー ションにかからないようにするため ( 例) 電話番号 元デー
タ ✕ ◯ 03-3333-4444 0000000000 03-1000-0000 SpeeeKaigi 11
大変な理由③ 3. DB のUnique 制約を回避する必要性 「 全て同じ文字列で埋める」 などの方法ではDB のUnique 制
約にかかってしまうことがある。 SpeeeKaigi 12
これらの要件を満たす、 いい解決 策がなかったので SpeeeKaigi 13
mozaic SpeeeKaigi 14
Gem を作った( まだprivate...) SpeeeKaigi 15
実現したい機能要件 1. 大規模なデー タのdump のパフォー マンスが問題ないこと 2. コマンド1つで実現できること 3. カラムごとにData
Masking 方式を切り替えられること 4. 適切なData Masking 方式がなかったら、 ユー ザー が自分 でRuby のマスク処理を行えること 5. MySQL, PostgreSQL に対応 SpeeeKaigi 16
実現したい機能要件 1. 大規模なデー タのdump のパフォー マンスが問題ないこと 2. コマンド1つで実現できること 3. カラムごとにData
Masking 方式を切り替えられること 4. 適切なData Masking 方式がなかったら、 ユー ザー が自分 でRuby のマスク処理を行えること 5. MySQL, PostgreSQL に対応 SpeeeKaigi 17
実現方法 SpeeeKaigi 18
3. カラムごとにData Masking 方式を切り替えられること --- user: root host: localhost port:
3306 db: name: sample_development rdbms: mysql tables: - name: owners columns: - name: phone_number method: tel # Data Masking 方式 - name: users columns: - name: mail method: email # Data Masking 方式 SpeeeKaigi 19
3. カラムごとにData Masking 方式を切り替えられること 組み込みのData Masking 方式 方式 マスク方法 tel
電話番号の体裁を保ったままマスクする email メー ルアドレスの体裁を保ったままマスクする shuf e 各レコー ドの順番を入れ替える blackout 任意の文字、 数字で埋める SpeeeKaigi 20
4. 適切なData Masking 方式がなかったら、 ユー ザー が自分 でRuby のマスク処理を行えること mask
メソッドとコンストラクタを持つRuby のクラスを指定 ディレクトリに格納し、YAML の設定ファイルにクラス名を 小文字で記載すると独自のマスク処理を行える。 module Mozaic::MaskMethod::Plugin class SampleMask def initialize(records, column_name); ;end def mask; ;end end end SpeeeKaigi 21
今後追加する予定の機能 Data Masking 方式のブラッシュアップ Plugin 機構の導入 差分更新できるようにする 環境変数からクレデンシャルを取得できるようにする PostgreSQL 対応
SpeeeKaigi 22
ご清聴ありがとうございました SpeeeKaigi 23