SQL Server および Azure SQL Database のセキュリティ全体像
Microsoft Japan Data Platform Tech Sales Team
川野 純
セキュリティ脅威への対応は単に情報漏洩を防ぐだけの目的ではなく、企業の事業継続性にも影響を及ぼす重大な懸案事項です。
特に重要なデータを大量に保存しているデータベースおよびデータベース アプリケーションにおけるセキュリティ対策において、 外部からの不正アクセスによる侵入を防ぐだけは不十分です。
これは昨今、データベース管理者や必要以上の権限を持った内部ユーザーによる犯行も増えてきているためで、システムに対する直接攻撃や情報漏洩を避けるためには多層防御を行い、システムの堅牢性・信頼性を増加させる必要があります。
具体的には以下のような防御策です。
- ユーザーがアプリケーション経由でアクセスできるデータを権限に応じて制限
- データベースの管理権限(メンテナンスタスク、チューニングタスク、ユーザー管理タスクなど)を複数の管理者に分離(権限の一極集中を回避)
- ユーザーのアクティビティだけでなく、管理者のアクティビティに関する監査証跡を記録し、さらに改ざんできないように保全
- 万が一データが盗聴・盗難されてしまった場合に備えた暗号化
など
SQL Server ではセキュリティ対策を行うための様々な機能を提供しており、大きく4つの防御階層に分けて構成することができます。
データの暗号化 (Data Encryption)
ネットワーク上のパケット盗聴、メモリに対する不正アクセス、データベース ファイルの盗難などが発生した場合の対策です。
- ネットワーク上のデータの暗号化
データベース サーバーとクライアント アプリケーション間の通信を暗号化することで脅威から防御します。
SSL 3.0 プロトコルは脆弱性の存在により非推奨となっており、現在は TLS 1.2 プロトコルが推奨です。
SQL Server と Azure SQL Database も、もちろん対応しています (SQL Server 2008 以降のリリース、および Azure SQL Database V12)。 - ディスク上のデータの暗号化 (TDE : **T**ransparent **D**ata **E**ncryption)
物理ストレージ上のデータベース ファイル自体を暗号化し、オフラインでのメディア攻撃・盗難から保護します。- 関連リンク
- Always Encrypted (SQL Server 2016 で強化されたセキュリティ機能)
機密データは、データベース エンジン(SQL Server または Azure SQL Database)に暗号化キーを開示することなく、クライアント アプリケーション側で暗号化されてからデータベースに格納されます。
従って、機密データはネットワーク上でもメモリ上でもストレージ上でも常に暗号化されたままです。
クライアント アプリケーションはデータベース サーバーとは別の場所にあるキーストアから復号キーを取得し、処理します。
本記事執筆時点で Always Encrypted に対応しているドライバーは .Net Framework 4.6 以上の ADO.NET ドライバー および Microsoft JDBC Driver 6.0 for SQL Server (Preview) 、Microsoft ODBC Driver 13 (Preview) for SQL Server です。
データベース アクセス制御 (Database Access Control)
データベース サーバーに対するアクセスおよびデータベース オブジェクトに対する操作を必要最小限に制限することで、情報漏洩のリスクを未然に極小化します。
- Windows 認証と SQL Server 認証
Windows 認証は Windows が提供する資格情報を信頼し接続を行います。(推奨)
SQL Server 認証では Windows ユーザー アカウントに基づかない SQL Server ログイン(ユーザー名とパスワード)を用いてユーザーは接続を行います。
どちらかの方式でユーザーからの接続が認証されると、次にログインがどのデータベース ユーザーに紐づけられているかがチェックされます。- 関連リンク
- SQL Server 権限
SQL Server のロール(ユーザーのグループ)に対し、権限(データへの問い合わせや変更など)を付与・はく奪することでデータベースに対する操作を管理・制御します。
ロールにはデータベース サーバーに対する権限管理を行うためのサーバー ロールとデータベース オブジェクトに対する権限管理を行うためのデータベース ロールなどがあります。- 関連リンク
- SQL Database ファイアウォール (サーバーレベル および データベースレベル) 【★Azure SQL Database のみ】
Azure SQL Database サーバーのクライアントとして指定された IP アドレスでない限り、サーバーまたはデータベースへのアクセスは阻止されます。
※ SQL Server のエンドポイントに対するファイアウォールについては Windows Server のファイアウォールにて対応できます。 - Azure Active Directory 認証 【★Azure SQL Database のみ】
Azure Active Directory により ID が一元管理できるため ID の拡散防止に効果的です。
プロアクティブ監視(Proactive Monitoring)
ユーザーの不穏なアクティビティの検出や被害が発生した際の調査に必要な情報を取得します。
- 監査 - Auditing
データベース アクティビティを追跡し、監査ログやAzure ストレージアカウントに直接ログを書き込みます。
SQL Server 監査は、サーバー レベルのイベント用のサーバー監査仕様とデータベース レベルのイベント用のデータベース監査仕様(Enterprise Edition のみ)を含めることができます。
Azure SQL Database の監査についての詳細は以下の関連リンクをご覧ください。- 関連リンク
- SQL Database 脅威の検出 【★Azure SQL Database のみ】
一般的なデータベースの脅威による特異なデータベースアクティビティ(SQL インジェクションや通常と異なる IP アドレスからのアクセスなど)が実行されると管理者はアラートを受け取ります。- 関連リンク
アプリケーション アクセス制御(Application Access Control)
アプリケーション ユーザーのID、パスワードが万が一漏洩してしまった場合や内部ユーザーによるデータ抜き取りが発生した場合でも、被害を最小限に留めるための対策です。
- 動的なデータ マスキング - Dynamic Data Masking
特権の無いユーザーに対して、機密データ(ID、クレジットカード番号、E メールアドレスなど)をマスキングすることでデータの露出を制限します。 - 行レベルのセキュリティ - Row-level Security
クエリーを実行するユーザーの特性に応じて、データベースのテーブル内の行に対するアクセスを制御できます。
これにより、マルチテナントデータベース環境などにおいて同じテーブルを共有するユーザーは、許可された行へのみアクセスが制限されます。- 関連リンク
今回は、データベースおよびデータベース アプリケーションで講じることのできるセキュリティ対策について簡単にご紹介しましたが、さらに Active Directory や Azure Active Directory、Azure Key Vault などの Microsoft の製品・サービスを組み合わせることで、より柔軟かつ強固なセキュリティ対策を講じることができます。ぜひ活用してみてください。
-
- 関連リンク