2026年5月22日金曜日

SQL Server 暗号化とマスキングの仕組み|Always Encrypted・動的データマスキングの設定と活用

個人情報を守る!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には暗号化済みのデータが保存される
  • 復号鍵はアプリ側にのみ保持

設定手順の例

  1. SSMSで「列の暗号化ウィザード」を開く
  2. 暗号化する列を選択(例:CreditCardNumber)
  3. 列暗号化キーとマスターキーを自動生成
  4. アプリケーション接続文字列に 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は列単位の暗号化で高セキュリティ。
  • 動的データマスキングは簡単に導入できる閲覧制限手段。
  • 権限管理と監査を組み合わせることで安全性をさらに強化可能。

参考リンク

SQL Server 解説用イメージ

0 件のコメント:

コメントを投稿