変更要約: DP-300 第2章を深掘り(図ja化・比較表/シナリオ/FAQ/ひっかけ/深掘り段落を全節に追加)
2.2データ暗号化と監査
Azure SQL の保存時暗号化 TDE、機密列をクライアント側で守る Always Encrypted、機密データを隠す 動的データマスク、操作を記録する 監査 と Microsoft Defender for SQL を理解します。
データそのものを守るには暗号化、機密の露出を抑えるにはマスク、不正の検知には監査と脅威検知を組み合わせます。
2.2.1暗号化・マスク・監査
- TDE:保存時にデータベースを暗号化(既定で有効)。ディスク/バックアップの盗難に対抗。
- Always Encrypted:機密列をクライアント側で暗号化し、サーバーにも平文を見せない。
- 動的データマスク:クエリ結果で機密値を伏せる(保存値は変えない)。表示の最小化に有効。
- 監査 / Defender for SQL:操作を監査ログに記録、脆弱性評価や脅威検知で異常を検出する。
「保存時暗号化=TDE(既定)」「機密列をサーバーにも見せない=Always Encrypted」「結果で機密を伏せる=動的データマスク」「操作の記録=監査」「脆弱性評価/脅威検知=Defender for SQL」 は DP-300 で頻出です。TDE は保存時、Always Encrypted は利用時も保護という違いを押さえましょう。
動的データマスクは「表示の制限」であり暗号化ではありません。権限のあるユーザーや直接の値参照では実値が見える場合がある点に注意します。
保護は層で重ねます。TDE は保存時(データファイル・ログ・バックアップ)を暗号化し、既定で有効。保護キーはサービス管理キーから 顧客管理キー(CMK/BYOK) に切り替えられ、鍵は Key Vault で管理します。Always Encrypted は 列マスターキー(CMK) と 列暗号化キー(CEK) でクライアント側に暗号化し、サーバーは平文を扱えません(通常は等価検索に限られ、範囲演算には Secure Enclaves が必要)。動的データマスク は表示の制限であって暗号化ではなく、UNMASK 権限を持つユーザーや直接の値参照では実値が見えます。行レベルセキュリティ(RLS) は行を、列レベル権限は列を絞ります。検知・統制は SQL 監査(操作を Log Analytics/Storage/Event Hub に記録)と Microsoft Defender for SQL(脆弱性評価 の推奨事項、SQL インジェクションや異常ログインの 脅威アラート)で行い、機密分類は データ検出と分類(Information Protection)、転送時は TLS の強制。「保存時=TDE」「利用時も=Always Encrypted」「表示制限=マスク」「記録=監査」「検知=Defender」と役割を切り分けます。
| 機能 | 守るもの | サーバーは平文を見るか |
|---|---|---|
| TDE | 保存時(ファイル/バックアップ) | 見る(処理時は復号) |
| Always Encrypted | 機密列を端から端まで | 見ない(クライアント側で復号) |
| 動的データマスク | 結果の表示のみ(保存値は不変) | 見る(UNMASK で実値) |
| TLS | 転送時の通信 | 該当外(経路の暗号化) |
シナリオ: クレジットカード番号を DBA にも見せず、サポート画面では下4桁以外を伏せたい。→ 機密列は Always Encrypted(CMK/CEK)でクライアント側暗号化して DBA にも平文を見せず、表示用には動的データマスクで伏せます。全体は TDE で保存時暗号化、操作は監査、異常は Defender for SQL で検知します。
FAQ: Q. 動的データマスクは暗号化の代わりになりますか? → A. いいえ。表示を伏せるだけで保存値は平文のまま、UNMASK 権限では実値が見えます。機密を本当に隠すには Always Encrypted。Q. TDE と Always Encrypted は併用できる? → A. はい。TDE で保存時全体、Always Encrypted で特定機密列を二重に守れます。
ひっかけ: 「動的データマスクは機密データを暗号化して保護する」は誤りです。マスクは表示の制限で、保存値は平文・UNMASK で実値が見えます。暗号化は TDE(保存時)/Always Encrypted(列・利用時)。また「TDE があれば DBA からも機密列を隠せる」も誤り(DBA は平文を扱える=Always Encrypted が必要)。
2.2.2この節のまとめ
- 暗号化=TDE(保存時)/Always Encrypted(列・利用時も)
- マスク=動的データマスク、検知=監査+Defender for SQL
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. Azure SQL のデータベースを保存時に暗号化する、既定で有効な機能はどれですか?
Q2. クエリ結果でクレジットカード番号などの機密値を伏せたいが、保存値は変えたくない。何を使いますか?
Q3. 脆弱性評価や異常なアクセスの脅威検知を SQL に対して有効にしたい。何を使いますか?

