個人情報を守る!SQL Serverの暗号化とマスキング機能を使ったデータ保護の基本
近年、個人情報や顧客データの漏えい防止は企業システムにおける最重要課題の1つです。
SQL Serverには、機密情報を守るための暗号化(Encryption)とマスキング(Masking)機能が標準搭載されています。
この記事では、Always Encrypted と 動的データマスキング(Dynamic Data Masking) の違い、設定方法、実務での活用ポイントをわかりやすく解説します。
目次
SQL Serverのデータ保護機能の全体像
データ保護の3つのレイヤー
SQL Serverでは、データ保護を以下の3層で行うことができます。
| 層 | 主な機能 | 説明 |
|---|---|---|
| 保存時(At Rest) | Transparent Data Encryption(TDE) | データベースファイル全体を暗号化 |
| 転送時(In Transit) | SSL/TLS通信 | ネットワーク経路上のデータ保護 |
| 利用時(In Use) | Always Encrypted / 動的マスキング | 実際のデータ利用時の情報露出を制限 |
特に業務アプリケーションと連携する場合、「利用時の保護」が重要です。
暗号化(Encryption)の仕組み
基本的な考え方
暗号化は、データを特定のアルゴリズムで変換し、 正しいキーを持つユーザーのみが復号できるようにする仕組みです。 SQL Serverでは主に以下の方式が利用できます。
- TDE(Transparent Data Encryption): データベース全体を透過的に暗号化
- Always Encrypted: 列単位で暗号化し、アプリケーション側で復号
暗号化アルゴリズム
- AES(Advanced Encryption Standard)
- Triple DES
- RSA(非対称鍵方式)
特にAESは高速かつ安全性が高く、SQL Serverでも推奨されています。
Always Encryptedの概要と設定方法
Always Encryptedとは?
Always Encryptedは、SQL Server 2016以降で利用できる機能で、 機密列(例:マイナンバー・クレジットカード番号など)をアプリケーション側で暗号化します。 SQL Server自体は復号キーを保持しないため、DBAでも平文データを閲覧できません。
仕組み
- アプリケーションのドライバ(例:.NET)側で暗号化・復号を実施
- SQL Serverには暗号化済みのデータが保存される
- 復号鍵はアプリ側にのみ保持
設定手順の例
- SSMSで「列の暗号化ウィザード」を開く
- 暗号化する列を選択(例:CreditCardNumber)
- 列暗号化キーとマスターキーを自動生成
- アプリケーション接続文字列に
Column Encryption Setting=Enabledを追加
クエリ例
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name NVARCHAR(100),
CreditCardNumber NVARCHAR(20) COLLATE Latin1_General_BIN2 ENCRYPTED WITH
(
COLUMN_ENCRYPTION_KEY = CEK_Customer,
ENCRYPTION_TYPE = DETERMINISTIC,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
)
);
暗号化後は、アプリケーション経由でのみ復号可能です。
動的データマスキング(DDM)の仕組みと設定例
DDMとは?
動的データマスキング(Dynamic Data Masking)は、 データを暗号化せずに、SQL Serverが返却時に一部を自動的にマスク(伏せ字)表示する仕組みです。
開発・運用担当者など、実際の値を閲覧する必要のないユーザーに対して有効です。
設定例
CREATE TABLE Employees (
EmployeeID INT IDENTITY PRIMARY KEY,
Name NVARCHAR(50),
Email NVARCHAR(100) MASKED WITH (FUNCTION = 'email()'),
Salary MONEY MASKED WITH (FUNCTION = 'default()')
);
マスクされた列は、権限のないユーザーからは伏せ字(例:xxxx@xxxx.com)として表示されます。
権限でマスクを解除
GRANT UNMASK TO SecurityAdmin;
この権限を持つユーザーは、マスクされた列の実データを閲覧できます。
暗号化とマスキングの違いと使い分け
比較表
| 項目 | Always Encrypted | 動的データマスキング |
|---|---|---|
| 対象データ | 列単位(暗号化データ) | 表示データ(結果セット) |
| 保護レベル | 高い(DB管理者でも復号不可) | 中程度(マスク除外権限で閲覧可) |
| 用途 | 顧客情報・カード情報などの厳重データ | 開発・運用環境での閲覧制限 |
| 実装の手軽さ | 中(キー管理・設定必要) | 高(DDLで簡単設定) |
常に暗号化が必要なわけではなく、要件に応じて組み合わせて使うのが理想です。
実務でのセキュリティ運用ポイント
- 暗号化キーはアプリ側またはKey Vaultで安全に管理
- マスキング設定は開発・テスト環境でも必ず導入
- 「UNMASK」権限の付与は最小限に抑える
- 監査(SQL Audit)と組み合わせて操作履歴を追跡
- TDEと組み合わせて多層防御を実現
-- マスキング解除権限の取り消し例
REVOKE UNMASK FROM DeveloperUser;
まとめと次のステップ
学んだ内容の整理
- SQL Serverは「暗号化」と「マスキング」で多層的にデータを保護できる。
- Always Encryptedは列単位の暗号化で高セキュリティ。
- 動的データマスキングは簡単に導入できる閲覧制限手段。
- 権限管理と監査を組み合わせることで安全性をさらに強化可能。
参考リンク

0 件のコメント:
コメントを投稿