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
データベースの秘密情報取扱いガイドラインに関する取り組みとSQL Serverでの実装例につい...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
p2sk
November 26, 2020
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
データベースの秘密情報取扱いガイドラインに関する取り組みとSQL Serverでの実装例についてのご紹介 / confidential-information-guidelines-and-sqlserver-implementation
p2sk
November 26, 2020
More Decks by p2sk
See All by p2sk
生成 AI アプリの本番導入を可能にした3 つの評価プロセス~DB 設計レビュー自動化の取り組み~ @Developers Summit 2025
masakihirose
4
7.1k
自社 200 記事を元に整理した読みやすいテックブログを書くための Tips 集
masakihirose
2
880
SQL ServerPerformance TuningEssentials
masakihirose
1
230
KINTO テクノロジーズでの DBRE 活動のご紹介
masakihirose
0
2k
トラブルの原因特定率を劇的に向上させるSQL Serverロギングの仕組み作り / sql-server-logging-for-troubleshooting
masakihirose
0
300
ZOZOTOWNで最大級のトラフィックを記録する福袋発売イベントで実施した負荷対策と、当日の監視体制について / sqlserver-luckybag
masakihirose
0
120
Other Decks in Programming
See All in Programming
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
270
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
560
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
170
A2UI という光を覗いてみる
satohjohn
1
140
CSC307 Lecture 17
javiergs
PRO
0
320
The NotImplementedError Problem in Ruby
koic
1
800
AI時代のUIはどこへ行く?その2!
yusukebe
21
7.2k
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
6.7k
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
160
dRuby over BLE
makicamel
2
340
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.4k
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
Utilizing Notion as your number one productivity tool
mfonobong
4
320
Thoughts on Productivity
jonyablonski
76
5.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
Scaling GitHub
holman
464
140k
Writing Fast Ruby
sferik
630
63k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
The untapped power of vector embeddings
frankvandijk
2
1.8k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
Building an army of robots
kneath
306
46k
Transcript
データベースの秘密情報取扱いガイドラインに 関する取り組みとSQL Serverでの実装例につい てのご紹介 株式会社ZOZOテクノロジーズ ECプラットフォーム部 テックリード Microsoft MVP for
Data Platform 廣瀬 真輝 Copyright © ZOZO Technologies, Inc.
© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ ECプラットフォーム部 テックリード 廣瀬 真輝 SQL
Serverスペシャリストとしてプロダクト横断で 課題解決に責任を負いつつ、DBに関する仕組みや ガイドライン作りに取り組んでいる。2020年8月にMicrosoft MVP for Data Platform 受賞。 2
© ZOZO Technologies, Inc. 3 #dbts2020 本セッションへのフィードバックはtwitterでお願いします
© ZOZO Technologies, Inc. 背景 • 弊社:3月末から原則リモートワーク • 社会情勢に応じてリモートワークの機会が増えた会社も 少なくないはず
• DBのSELECT時に秘密情報へのアクセスを制限し、 情報の流出リスクを最小限に抑える必要性が増加 4
© ZOZO Technologies, Inc. 目的 • 運用中の「DB秘密情報の取扱いガイドライン」をご紹介し 秘密情報保護の取り組みの参考となる内容を提供したい • 策定したガイドラインをSQL
Serverで実装する場合の 具体的な対応内容をご紹介したい 5
© ZOZO Technologies, Inc. DB秘密情報の取扱いガイドライン 6
© ZOZO Technologies, Inc. 秘密情報の明確化 • 「情報区分表」を作成して保護対象の情報を明確化 • 機密性のレベルが一定以上の情報を秘密情報とする 7
© ZOZO Technologies, Inc. 管理台帳の作成 • 弊社では、秘密情報に関連する台帳を2種類作成 ◦ 秘密情報管理台帳 ◦
閲覧者管理台帳 8
© ZOZO Technologies, Inc. 秘密情報管理台帳 • 秘密情報に該当するテーブル、カラムを管理する台帳 ◦ 秘密情報が増えるたびに追記 •
様々なDBに存在する秘密情報を集約するために作成 • メリット ◦ 別DBへのデータ連携時、台帳を確認するだけでマスク対象のカラムを 判断可能 ◦ 今後必要なセキュリティ関連の施策やルール変更時に該当箇所の 洗い出しを一からやらなくて済む 9
© ZOZO Technologies, Inc. 閲覧者管理台帳 • 秘密情報の閲覧可能者を管理する台帳 ◦ ここに記名のある人物だけが秘密情報を閲覧できる状態に •
「誰が」「どのデータストアの秘密情報を閲覧可能なのか」を集約 して管理するためにこの台帳を作成 • 気軽に記名できるわけではなくルールが存在 ◦ 責任者の許可が必要 ◦ DBごとに記名できる人数を制限 10
© ZOZO Technologies, Inc. 秘密情報取扱いルールを策定するためのフロー 1. 新しく追加されるデータの取扱い基準の設定 2. 既存データで秘密情報に該当する項目の洗い出し 3.
秘密情報にアクセスできるアカウントの制限 4. 権限のないアカウントからのアクセス制限 5. 権限保持者の大幅な削減による運用負荷増への対処 11
© ZOZO Technologies, Inc. 1.新しく追加されるデータの取扱い基準の設定 • DBに追加されるデータの種類が増える場合、秘密情報に 該当するかを判断する必要性 • 新たに取得する情報について、以下3点を明確化
◦ 「誰が」 ◦ 「どのような基準で判断するか」 ◦ 「秘密情報への該当時はどういうアクションが必要か」 12
© ZOZO Technologies, Inc. データの取り扱い基準の明確化 • 「誰が」 ◦ プロダクトまたはDBごとにアサインしたレビュー担当者 •
「どのような基準で判断するか」 ◦ 社内の情報区分における機密性が一定以上の情報 • 「秘密情報への該当時はどういうアクションが必要か」 ◦ 秘密情報管理台帳に記載 ◦ 秘密情報を閲覧可能となる人物が追加になる場合は閲覧者管理台帳に記載 ◦ 秘密情報をマスク化し、アクセスできるアカウントを制限 ◦ 情報の管理を行っている部署に報告 13
© ZOZO Technologies, Inc. 2.既存データで秘密情報に該当する項目の洗い出し • 秘密情報に該当するか未精査のカラムが大量に存在する場合 ◦ 全カラムの精査が理想 ◦
現実的でない場合は、効率的な既存データの精査方法を検討 14
© ZOZO Technologies, Inc. 効率的な既存データの精査方法 1. 文字列型のカラムは氏名や住所など、秘密情報が入っている可能性が高い a. 全ての文字列カラムの実データをカラムごとに上位100件ほどを目視で確認 b.
秘密情報が入っていそうなカラムリストを作成 2. 「address」など、秘密情報に該当する可能性が高いカラム名で 各DBのメタデータを検索し、秘密情報が入っていそうなカラムリストを作成 3. 作成した「秘密情報が入っていそうなカラムリスト」を人力で精査 4. 最後に責任者のチェックを通して、最終的な秘密情報カラムリストを作成 5. 秘密情報管理台帳に記載 15
© ZOZO Technologies, Inc. 3.秘密情報にアクセスできるアカウントの制限 • DBの秘密情報を閲覧できる人数を限定 ◦ 1DBあたり2名など、大きく絞り込むほうが望ましい ◦
閲覧可能者を9割以上削減することも可能 • 秘密情報が閲覧可能な人にも2種類のアカウントを発行 ◦ 秘密情報が閲覧不可能なアカウント(普段使い) ◦ 秘密情報が閲覧可能なアカウント(どうしても調査で必要な時) 16
© ZOZO Technologies, Inc. 17 4.権限のないアカウントからのアクセス制限 • 権限のない人は秘密情報カラムを閲覧できない状態に ◦ 権限のない=閲覧者管理台帳に記載のない人
◦ 秘密情報カラム=秘密情報管理台帳に記載のあるカラム • 秘密情報カラムのアクセス制御をどこまで行えるかは DB製品の機能次第 ◦ カラム単位でのアクセス制御が理想
© ZOZO Technologies, Inc. 18 5.権限保持者の大幅な削減による運用負荷増への対処 • 単純に秘密情報を閲覧する人数を限定するだけでは エンジニアの調査や運用の負荷が大幅に増加してしまう懸念 ◦
オンコール担当者のアラート調査で秘密情報を閲覧したい場合 ◦ 権限保持者に調査を依頼することで、権限保持者に負担が集中
© ZOZO Technologies, Inc. 19 懸念に対する解決策 • 一時的に有効な秘密情報閲覧権限を発行できる仕組みの整備 ◦ ワークフロー申請経由など
© ZOZO Technologies, Inc. 20 ここまでのまとめ • 秘密情報の取扱いフローを策定 ◦ 新しく追加されるデータの取扱い基準の設定
◦ 既存データで秘密情報に該当する項目の洗い出し ◦ 秘密情報にアクセスできるアカウントの制限 ◦ 権限のないアカウントからのアクセス制限 ◦ 権限保持者の大幅な削減による運用負荷増への対処 • エンジニアの運用負荷をできるだけ上げずに 秘密情報の閲覧可能者をできるだけ限定することが重要
© ZOZO Technologies, Inc. 策定したガイドラインの SQL Serverでの実装例 21 21
© ZOZO Technologies, Inc. 22 1. 秘密情報カラムへのアクセスの制限 • 以下2点をSQL Serverの機能で実現させる必要性
◦ 秘密情報カラムにアクセスできるアカウントの制限 ◦ 秘密情報カラムのマスク化
© ZOZO Technologies, Inc. 23 解決策:「動的なデータマスキング」機能 • SQL Server 2016から提供
◦ 権限を制限したアカウントが該当のデータにアクセスした場合に 自動的にデータをマスクした状態で返すことができる 上:権限があるアカウントでアクセス / 下:権限がないアカウントでアクセス
© ZOZO Technologies, Inc. 24 問題点:SQL Server 2014以下で使用できない • 弊社ではSQL
Server 2016以降の環境もあるが、 それより前のバージョンも利用 ◦ 全環境で「動的なデータマスキング」を使えない
© ZOZO Technologies, Inc. 25 動的なデータマスキングの代替案 1. ロールの活用 2. 秘密情報カラムに対するSELECT権限のはく奪(DENY)
a. カラム単位で秘密情報のSELECT権限をはく奪 b. 秘密情報をSELECTしているVIEWの参照権限をはく奪 3. 動的なデータマスキングを使用しないマスク化の実現
© ZOZO Technologies, Inc. 26 動的なデータマスキングの代替案 1. ロールの活用 2. 秘密情報カラムに対するSELECT権限のはく奪(DENY)
a. カラム単位で秘密情報のSELECT権限をはく奪 b. 秘密情報をSELECTしているVIEWの参照権限をはく奪 3. 動的なデータマスキングを使用しないマスク化の実現
© ZOZO Technologies, Inc. 27 1. ロールの活用 • 各ログイン/ユーザーへの個別設定ではなく、SQL Serverのユー
ザー定義ロールを活用した効率的なアクセス制限 ◦ 秘密情報へのアクセスを制限するロールを作成 ◦ 作成したロールに対して秘密情報カラムのSELECT権限をはく奪 ◦ 作成したロールにログイン/ユーザーを参加させる
© ZOZO Technologies, Inc. 28 動的なデータマスキングの代替案 1. ロールの活用 2. 秘密情報カラムに対するSELECT権限のはく奪(DENY)
a. カラム単位で秘密情報のSELECT権限をはく奪 b. 秘密情報をSELECTしているVIEWの参照権限をはく奪 3. 動的なデータマスキングを使用しないマスク化の実現
© ZOZO Technologies, Inc. 29 a. カラム単位で秘密情報のSELECT権限をはく奪 • SQL Serverのテーブルのアクセス権:カラム単位で制御可能
◦ DENY SELECT ON OBJECT::テーブル名(列名) TO ユーザー名 • 権限のはく奪後、アクセス権のないユーザーで該当カラムを取得 するSELECTを実行した際、エラーが発生
© ZOZO Technologies, Inc. 30 b. 秘密情報をSELECTしているVIEWの参照権限をはく奪 • VIEWの中ではく奪したカラムをSELECTしている場合 ◦
VIEWに対してSELECT権限を持っていると、ベーステーブルで権限が はく奪されていてもSELECTができてしまう • VIEW経由でもアクセスを制限したい ◦ 「SELECTをはく奪したカラムを参照しているVIEW」に対しても 権限をはく奪する必要性
© ZOZO Technologies, Inc. 31 VIEW経由でのアクセス制限を実現させるために • 以下の2つの情報を組み合わせて使用 ◦ SELECTをDENYしたカラムのリスト作成
▪ 権限の制御を行うロールに設定されているDENYの情報を取得 ▪ sys.database_permissionsを使用 ▪ 「どのカラムに対してアクセスが制限されているか」のリストを作成 ◦ VIEWが参照しているテーブルのカラムのリスト作成 ▪ VIEWが参照しているテーブルとカラムの情報を取得 ▪ sql_dependencies/sys.sql_expression_dependencies/sys.dm_sql_referenced_entitiesなどを使用 ▪ 「VIEWで参照しているテーブルとカラム」のリストを作成 • リストを使い「DENYしたカラムを参照するVIEW」を取得 ◦ 取得したVIEWに対してDENYを設定し、VIEW経由のアクセス制限を実現
© ZOZO Technologies, Inc. 32 ここまでの作業での問題点 • 気軽な「SELECT * FROM
テーブル名」ができない ◦ DENYしたカラムを含むテーブルだとエラーになる
© ZOZO Technologies, Inc. 33 動的なデータマスキングの代替案 1. ロールの活用 2. 秘密情報カラムに対するSELECT権限のはく奪(DENY)
a. カラム単位で秘密情報のSELECT権限をはく奪 b. 秘密情報をSELECTしているVIEWの参照権限をはく奪 3. 動的なデータマスキングを使用しないマスク化の実現
© ZOZO Technologies, Inc. 34 動的なデータマスキングを使用しないマスク化 • 「各テーブルに対応したVIEWを作成し、テーブルに 秘密情報カラムが存在する場合は該当のカラムをマスク」 というアプローチを採用
© ZOZO Technologies, Inc. • Emailカラムだけ秘密情報と仮定してDENY 35 サンプルテーブル
© ZOZO Technologies, Inc. 36 テーブルに対応したVIEWの作成
© ZOZO Technologies, Inc. 37 VIEWのSELECT結果(以降、「マスク用VIEW」と呼ぶ)
© ZOZO Technologies, Inc. • 全テーブルに作成 ◦ 秘密情報カラムが存在しないテーブルでも作成 • エンジニアのデータ確認時は「マスク用VIEW」を使用
◦ 「各テーブルに秘密情報カラムが存在しているか」を意識することなく クエリを書ける ◦ 動的なデータマスキング機能に近い体験をエンジニアへ提供 • アプリケーションでは使用しない ◦ 後述のメンテナンスにより再作成される場合があるため 38 「マスク用VIEW」に関するルール
© ZOZO Technologies, Inc. 39 2. 秘密情報のメンテナンス • サービスの成長に伴う秘密情報カラムの増減を考慮すべき •
マスクされたVIEWのメンテナンスを自動で実施 ◦ 秘密情報の設定状況が変化した場合、マスク化用VIEWにも変化内容を反映 ◦ 単純な実装:定期的な全VIEWの再作成 ◦ 今回ご紹介する実装:設定の変更が必要なVIEWのみ再作成 ▪ 変更が発生するVIEWを最小限に抑えるため • 秘密情報カラムの増減に伴うDENY/REVOKEを自動で実施
© ZOZO Technologies, Inc. 40 VIEWの再作成が必要となるケース • テーブルの定義変更(カラム追加) ◦ 最新の状態をVIEWに反映
• テーブルの作成/削除 ◦ 参照用のVIEWの作成/削除 • テーブル内の秘密情報カラム(カラムのDENY)の増減 ◦ 新しくDENYが設定されたカラムをマスク化 ◦ DENYが取り消し(REVOKE)されたカラムを実データ化
© ZOZO Technologies, Inc. 41 VIEWの再作成が必要となるケース • テーブルの定義変更(カラム追加) ◦ 最新の状態をVIEWに反映
• テーブルの作成/削除 ◦ 参照用のVIEWの作成/削除 • テーブル内の秘密情報カラム(カラムのDENY)の増減 ◦ 新しくDENYが設定されたカラムをマスク化 ◦ DENYが取り消し(REVOKE)されたカラムを実データ化
© ZOZO Technologies, Inc. 42 テーブルの定義変更 • sys.objectsの「modify_date」でテーブルへの変更を検知
© ZOZO Technologies, Inc. 43 VIEWの再作成が必要となるケース • テーブルの定義変更(カラム追加) ◦ 最新の状態をVIEWに反映
• テーブルの作成/削除 ◦ 参照用のVIEWの作成/削除 • テーブル内の秘密情報カラム(カラムのDENY)の増減 ◦ 新しくDENYが設定されたカラムをマスク化 ◦ DENYが取り消し(REVOKE)されたカラムを実データ化
© ZOZO Technologies, Inc. 44 テーブルの作成/削除 • 新規に作成されたテーブルがあれば、対応するVIEWを作成 • 既存のテーブルが削除された場合は、対応するVIEWを削除
• sys.objectsを使用 ◦ テーブルは存在するがVIEWは存在しない:VIEW作成 ◦ VIEWは存在するがテーブルは存在しない:VIEW削除
© ZOZO Technologies, Inc. 45 VIEWの再作成が必要となるケース • テーブルの定義変更(カラム追加) ◦ 最新の状態をVIEWに反映
• テーブルの作成/削除 ◦ 参照用のVIEWの作成/削除 • テーブル内の秘密情報カラム(カラムのDENY)の増減 ◦ 新しくDENYが設定されたカラムをマスク化 ◦ DENYが取り消し(REVOKE)されたカラムを実データ化
© ZOZO Technologies, Inc. 46 実現方法 • 2つのリストを作成し、比較してDENY設定の変化を検知 ◦ テーブルのカラムに対するDENY設定状況
◦ VIEWのカラムのマスク化の設定状況 • リスト作成に使用する情報 ◦ データベースのオブジェクトに設定している権限 ▪ sys.database_permissions ◦ VIEWが参照しているテーブルとカラム ▪ sql_dependencies ▪ sys.sql_expression_dependencies ▪ sys.dm_sql_referenced_entities
© ZOZO Technologies, Inc. 47 DB上の秘密情報カラムを管理するための仕組みづくり • 秘密情報の管理用テーブルを作成 ◦ 秘密情報カラムの追加
▪ アクセス制限に使用しているロールへ自動的にDENY設定 ▪ 連動してマスク化用のVIEWでも該当カラムがマスクされる ◦ 秘密情報カラムの削除 ▪ アクセス制限に使用しているロールへ自動的にREVOKE設定 ▪ 連動してマスク化用のVIEWでも該当カラムが実データ化される
© ZOZO Technologies, Inc. 48 まとめ • 運用中の「DB秘密情報の取扱いガイドライン」をご紹介 • 策定したガイドラインをSQL
Serverで実装する場合の 具体的な対応内容をご紹介 • 今回の内容はテックブログとしても公開中 ◦ 「ZOZOテクノロジーズ テックブログ」で検索 ◦ https://techblog.zozo.com/entry/confidential-information-guidelines ◦ https://techblog.zozo.com/entry/sensitive-data-sqlserver-implementation
None