Instiq
第2章 · セキュアな環境の実装·v2.0.0·更新 2026/6/16·読了目安 約9分

変更要約: DP-300 第2章を深掘り(図ja化・比較表/シナリオ/FAQ/ひっかけ/深掘り段落を全節に追加)

2.2データ暗号化と監査

この節の要点

Azure SQL の保存時暗号化 TDE、機密列をクライアント側で守る Always Encrypted、機密データを隠す 動的データマスク、操作を記録する 監査Microsoft Defender for SQL を理解します。

データそのものを守るには暗号化、機密の露出を抑えるにはマスク、不正の検知には監査と脅威検知を組み合わせます。

2.2.1暗号化・マスク・監査

Azure SQL のデータ保護を並べた図。TDE(保存時にデータベースを暗号化・既定で有効)、Always Encrypted(機密列をクライアント側で暗号化しサーバーにも平文を見せない)、動的データマスク(クエリ結果で機密値を伏せる・保存値は変えない)、監査(操作をログに記録)、Microsoft Defender for SQL(脆弱性評価・異常アクセスの脅威検知)。
暗号化・マスク・監査
  • 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 に対して有効にしたい。何を使いますか?

理解度を確認第2章「セキュアな環境の実装」の問題を解く