SQL Server 2008

セキュリティ

Rick Byham

 

概要:

  • 暗号化の強化点
  • 認証の強化点
  • セキュリティ監査
  • ポリシー ベースの管理

SQL Server 2008 には、データベース環境全体のセキュリティを強化するようにデザインされた、多くの機能強化と新機能が用意されています。SQL Server 2008 では、キー暗号化機能と認証機能が追加され、新しい監査システムが導入されています。

これは、ユーザー操作を把握したり、法的要件を遵守したりするうえで役立ちます。

この記事では、SQL Server® 2008 のセキュリティに関する最も重要な変更点の概要について説明します。システム管理者が最初に気付く変更点の 1 つに、SQL Server 2005 セキュリティ構成ツールの廃止があります。SQL Server 2008 では、セキュリティ構成ツールで提供されていたプロトコル オプションは、構成マネージャ ツールで提供されていますが、機能の有効化と無効化には、SQL Server 2008 で新しく導入されたポリシー ベースの管理フレームワークを使用します。

暗号化の強化点

暗号化に関しては、主に 2 つの強化点があります。第 1 に、SQL Server 2008 では、外部のサードパーティ製ハードウェア セキュリティ モジュールに格納された暗号化キーを使用できます。第 2 に、SQL Server に格納されたデータを、データベースに接続するアプリケーションに透過的な方法で暗号化できます。つまり、データベース管理者は、既存のアプリケーション コードを変更する必要なく、データベース全体に格納されたすべてのデータを簡単に暗号化できます。

第 1 の強化点は、拡張キー管理 (EKM) という新機能により実現されました。この機能は、SQL Server 2008 Enterprise Edition、Developer Edition、および Evaluation Edition で使用できます。EKM により、エンタープライズのキー管理やハードウェア セキュリティ モジュール (HSM) ソリューションを提供しているサードパーティ ベンダは、SQL Server にそれぞれのデバイスを登録できます。デバイスが登録されると、ユーザーは、このようなモジュールに格納された暗号化キーを使用できるようになります。

これらのベンダは、それぞれのモジュールで高度暗号化機能 (キーの有効期間や回転など) を提供することもできます。一部の構成では、高度暗号化機能を使用することで、sysadmin グループのメンバではないデータベース管理者からデータを保護できます。また、T-SQL 暗号化ステートメントでは、外部 EKM デバイスに格納されたキーを使用して、データの暗号化と暗号化解除を実行できます。

第 2 の強化点である透過的なデータ暗号化により、アプリケーションを変更する必要なく、データベース ファイルを暗号化できます。この機能では、データ ファイルとログ ファイルのリアルタイム I/O の暗号化と暗号化解除が実行されます。暗号化では、データベース暗号化キー (DEK) が使用され、DEK は、復旧時に使用できるようにするためデータベースのブート レコードに格納されます。DEK は、サーバーの master データベースに格納された証明書で保護されています。図 1 は、透過的なデータ暗号化を可能にするアーキテクチャを示しています。

Figure 1 透過的なデータ暗号化のアーキテクチャ

Figure 1** 透過的なデータ暗号化のアーキテクチャ **(画像を拡大するには、ここをクリックします)

これは、非アクティブなデータの保護に役立ちます。機密資産の暗号化やデータベース サーバーの外側にファイアウォールを配置するなど、データベースのセキュリティ保護に役立ついくつかの予防措置を講じることができますが、データベースが格納されている物理メディアによって (バックアップ テープを含む)、異なる脆弱性がもたらされます。たとえば、悪意のあるユーザーが、このメディアを盗み、格納されているデータにアクセスする可能性があります。

ただし、透過的なデータ暗号化により、データベース内の機密データを暗号化し、データの暗号化に使用されるキーを証明書で保護することができます。これは、組織で、データの適切な保護に関する多数の法律、規制、および業界ガイドラインを遵守するのに役立ちます。

透過的なデータ暗号化により、ソフトウェア開発者は、高度暗号化標準 (AES) 暗号化アルゴリズムと Triple Data Encryption Standard (3DES) 暗号化アルゴリズムを使用してデータを暗号化できます。データベース ファイルの暗号化は、ページ レベルで実行されます。ページは、ディスクに書き込まれる前に暗号化され、メモリに読み込まれるときに暗号化解除されます。また、透過的なデータ暗号化が有効になっているデータベースのバックアップ ファイルも、データベース暗号化キーを使用して暗号化されます。

暗号化されたデータベースを復元するには、データベースの暗号化に使用された証明書または非対称キーにアクセスできる必要があります。証明書または非対称キーがないと、データベースを復元できないので、関連バックアップへのアクセスが必要となる可能性がある限り、すべてのキーを保持してください。

認証の強化点

おそらくご存知だと思いますが、Kerberos は、ネットワーク認証プロトコルです。Kerberos を使用すると、ネットワーク上のクライアントとサーバーのエンティティ (またはセキュリティ プリンシパル) を相互認証するための安全性の高い方法を提供できます。Kerberos により、ユーザーは、誘引や介入者攻撃などのセキュリティの脆弱性を軽減できます。Windows® NTLM 認証と比べて、Kerberos は、より安全かつ堅牢で、高いパフォーマンスを提供します。

Kerberos を使用して接続を相互認証するには、SQL Server インスタンスのサービス プリンシパル名 (SPN) が Active Directory® に登録され、接続時には、クライアント ドライバで登録された SPN が提供される必要があります。SQL Server 2008 では、Kerberos 認証は、TCP、名前付きパイプ、共有メモリ、仮想インターフェイス アダプタ (VIA) など、すべてのネットワーク プロトコルに対応するように拡張されています。既定では、クライアント ドライバによって、接続先の SQL Server インスタンスの適切な SPN が自動的に推測されます。セキュリティ、制御、およびトラブルシューティングの強化のため、接続文字列パラメータで SPN を明示的に指定することもできます。

インターネット インフォメーション サービス (IIS) では、ASP.NET、レポート マネージャ、またはレポート サーバー Web サービスへのアクセスが提供されなくなります。SQL Server 2008 の Reporting Services では、Windows ベースの認証とカスタム認証をサポートする新しい認証サブシステムで、すべての認証要求が処理されます。

Reporting Services では、SQL Server 共通言語ランタイム (CLR) に組み込まれた Microsoft® .NET Framework と ASP.NET のテクノロジがホストされ、OS の HTTP.SYS 機能も使用されます。レポート サーバーには、サーバーの構成時に定義した URL とポートに送信される要求を受け付ける HTTP リスナが備わっています。URL の予約と登録は、HTTP.SYS を介して、レポート サーバーによって直接管理されます。

セキュリティ監査

SQL Server Audit は、データベース エンジンのイベントに関する独自の監査を作成できる新機能です。この機能では、拡張イベントを使用して監査に関する情報が記録され、さまざまなサーバーとデータベース オブジェクトの監査を有効、保存、および表示するのに必要なツールとプロセスが提供されます。

また、SQL Server Audit は SQL Server トレースよりも高速で、SQL Server Management Studio を使用すると、監査ログを簡単に作成して監視できます。各ユーザーが実行した SELECT、INSERT、UPDATE、DELETE、REFERENCES、および EXECUTE ステートメントをキャプチャして、さらに詳細な監査を行うこともできます。さらに、SQL Server Audit は、T-SQL ステートメント CREATE SERVER AUDIT および CREATE SERVER AUDIT SPECIFICATION と、関連する ALTER ステートメントおよび DROP ステートメントを使用してスクリプトを作成できます。

監査を設定するには、監査を作成し、監査対象のイベントが記録される場所を指定します。監査は、Windows セキュリティ ログ、Windows アプリケーション ログ、または指定場所にあるファイルに保存できます。監査に名前を付け、監査ファイルへのパスやその最大サイズなどの特性を構成します。監査が失敗した場合に SQL Server をシャットダウンするように選択することもできます。また、監査対象のイベントを複数の場所に記録する必要がある場合は、複数の監査を作成するだけです。

次に、1 つまたは複数の監査仕様を作成します。サーバーの監査仕様により、SQL Server インスタンスに関する情報が収集され、ログインやサーバー ロール メンバシップなどのサーバー スコープのオブジェクトが含まれます。また、データベースへのアクセス権など、master データベースで管理されているデータベース情報も含まれます。監査仕様を定義する際には、監視対象のイベントを受信する監査を指定します。複数のサーバーの監査と複数のサーバーの監査仕様を定義することはできますが、各サーバーの監査に含められるサーバーの監査は、一度に 1 つだけです。

単一のデータベースのイベントを監視するデータベースの監査仕様を作成することもできます。監査には複数のデータベースの監査仕様を追加できますが、1 つのサーバー監査で、各データベースに対して有効にできるデータベースの監査仕様は一度に 1 つだけです。

サーバーの監査仕様に使用される SQL Server 監査アクションのイベントは、関連する監査アクションのイベントのコレクションにグループ化されます。このようなイベントは、監査アクションのグループとして公開されます。グループを監査仕様に追加すると、そのグループに含まれるすべてのイベントが監視されます。たとえば、DBCC コマンドを公開する DBCC_GROUP という監査アクションのグループがあります。ただし、DBCC コマンドを個別に監査することはできません。

サーバーに対して使用できる監査アクションのグループが 35 個ありますが、その一部は互いに密接に関連しています。たとえば、SUCCESSFUL_LOGIN_GROUP、FAILED_LOGIN_GROUP、LOGOUT_GROUP などがあります。また、監査プロセスの監査に使用できる AUDIT_ CHANGE_GROUP という監査アクションの種類もあります。

データベースの監査仕様では、データベース レベルの監査アクションのグループに収集された監査アクションのイベントのグループを指定することもできます。監査アクションのグループに加えて、データベースの監査仕様には、データ操作言語ステートメントを監査する個別の監査アクションのイベントを含めることもできます。これらのイベントは、データベース全体または特定のデータベース オブジェクトのみを監視するように構成できます。たとえば、SELECT 監査アクションは、単一のテーブルまたはスキーマ全体に対して実行された SELECT クエリの監査に使用できます。これらのイベントは、特定のユーザーまたはロール (db_writers など) によるアクションを監視するように構成することもできます。

たとえば、SELECT 監査アクションを使用して、ユーザー Mary、FINANCE_DEPT データベース ロール、またはパブリック データベース ロールにより、ある特定のテーブルに対して実行された SELECT クエリを監査できます。この監査アクションにより、必要な監査の作成の制御能力と柔軟性が向上するのは明らかです。

依存関係レポート

依存関係レポートは、新しいカタログ ビューと新しいシステム関数によって強化されています。sys.sql_expression_dependencies、sys.dm_sql_referencing_entities、および sys.dm_sql_referenced_entities を使用すると、スキーマ バインド オブジェクトと非スキーマ バインド オブジェクトの両方について、サーバー間依存関係、データベース間依存関係、およびデータベース SQL 依存関係を報告できます。

新しいデータベース ロール

msdb データベースのデータベース ロールには変更点があります。db_dtsadmin ロールは db_ssisadmin、db_dtsltduser ロールは db_ssisltduser、db_dtsoperator ロールは db_ssisoperator に、それぞれの名前が変更されています。旧バージョンとの互換性をサポートするため、サーバーのアップグレード時に、古いロールは新しいロールのメンバとして追加されます。

これらの変更に加えて、SQL Server 2008 の新機能をサポートするために、新しいデータベース ロールが追加されています。特に、msdb データベースには、サーバー グループ (ServerGroupAdministratorRole と ServerGroupReaderRole)、ポリシー ベースの管理 (PolicyAdministratorRole)、およびデータ コレクタ (dc_admin、dc_operator、および dc_proxy) の新しいロールが含まれています。また、管理データ ウェアハウス データベースにも、データ コレクタ (mdw_admin、mdw_writer、および mdw_reader) の新しいロールが含まれています。

FILESTREAM のセキュリティ

SQL Server では、FILESTREAM ストレージのサポートが導入されました。これにより、SQL Server アプリケーションで、構造化されていないデータ (ドキュメントや画像など) をファイル システムに格納できます。つまり、クライアント アプリケーションでは、構造化されていないデータと対応する構造化されたデータ間のトランザクションの一貫性を維持したまま、ストリーミング API とファイル システムのパフォーマンス向上というメリットを得ることができます。

FILESTREAM データは、FILESTREAM ファイル グループに格納する必要があります。このファイル グループは、実際のファイルではなくファイル システム ディレクトリを含む、特殊なファイル グループです。これらのディレクトリは、データ コンテナと呼ばれ、データベース エンジンのストレージとファイル システムのストレージの間にインターフェイスを提供します。

セキュリティに関しては、FILESTREAM データは他のすべてのデータと同じようにセキュリティで保護され、アクセス許可はテーブル レベルまたは列レベルで付与されます。FILESTREAM コンテナへの NTFS アクセス許可が付与されるアカウントは、SQL Server サービスの実行アカウントだけです。T-SQL トランザクションと OpenSqlFilestream API を使用してアクセスしている場合を除き、データベースが開かれると、SQL Server によって FILESTREAM データ コンテナへのアクセスが制限されます。

ポリシー ベースの管理

SQL Server 2008 のポリシー ベースの管理では、SQL Server を管理するための新しいシステムが提供されます。ポリシーを作成して、SQL Server のさまざまな要素についてテストしたり、報告したりすることができます。また、作成したポリシーは、単一データベース、SQL Server の単一インスタンス、または管理しているすべての SQL Server に適用できます。

ポリシー ベースの管理を使用することで、SQL Server の構成オプションと多くのセキュリティ設定をテストできます。また、一部のセキュリティ設定については、要件を満たしていないデータベース サーバーを検出して、要件に準拠させるための処理を実行するポリシーを作成できます。

SQL Server 2008 では、攻撃を受ける確率を最小限に抑えるため、必須ではない機能の多くが既定で無効になっています。ポリシー ベースの管理を使用して、必要な追加機能を選択して有効にできます。機能を有効にしたら、構成を定期的に評価して、構成設定がポリシーを満たしていない場合には警告が表示されるようにすることができます。

ポリシー ベースの管理では、関連プロパティがまとめてグループ化され、ファセットと呼ばれるコンポーネントとして公開されます。たとえば、セキュリティ構成のファセットには、アドホック リモート クエリ、CLR 統合、データベース メール、OLE オートメーション、リモート DAC、SQL Mail、Web Assistant、および xp_cmdshell のプロパティが含まれます。CLR 統合のみを有効にして、その他すべての機能を無効にするポリシーを作成できます。また、ポリシーには、複雑な条件ステートメントを含めることができます。たとえば、「Customer_Response という名前のインスタンスでない限り、すべての SQL Server インスタンスでデータベース メールを無効にする」という条件ステートメントを含めることが可能です。

ポリシーを作成したら、すべてのサーバーでポリシーを評価して、ポリシーに準拠していないサーバーを示すレポートを作成できます。[構成] ボタンをクリックすると、準拠していないすべてのインスタンスがポリシーで指定されている設定を使用して構成されます。また、定期的に実行されるようにポリシーのスケジュールを設定して、サーバーの状態を監視する必要があります。セキュリティ構成のファセットは、データベース エンジン、Analysis Services、および Reporting Services 向けに提供されているコンポーネントです。

ただし、このポリシー ベースの管理は、セキュリティ設定のメカニズムとして機能することを目的としたものではないことに注意してください。ほとんどの場合、ポリシーに違反する操作を実行するのに十分な特権を持つユーザーは、ポリシーに違反するステートメントを発行したり、ポリシーを使用せずに、セキュリティ ポリシーに違反する可能性のある再構成アクションを実行したりすることができます。SQL Server 2008 のポリシー ベースの管理は、SQL Server セキュリティ設定を監視するサポート機能として使用する必要があります。

ファセットは、関連する DDL ステートメントをオートコミット モード以外のモードで実行できるかどうかによって、設定を適用できるかどうかが異なります。ファセットで構成設定をデータベース エンジンのインスタンスに適用できる場合もありますが、管理者は適用された設定を再構成できます。一部のファセットは、サーバー トリガで適用できます。この方法を使用すると、低い特権しか持たないユーザーが設定を変更できないようにし、管理者が誤って設定を変更する可能性を軽減できます。この場合、管理者は、設定を変更する前にポリシーを一時的に無効にする必要があります。ただし、プロパティの状態の報告のみを実行でき、状態を変更することはできないファセットもあります。これは、対称キーまたは非対称キーの長さを確認するポリシーについても同様です (図 2 参照)。

Figure 2 非対称キーのファセット

Figure 2** 非対称キーのファセット **(画像を拡大するには、ここをクリックします)

ほとんどの種類のデータベース オブジェクトにはファセットがあり、その多くはセキュリティに使用されます。たとえば、ログインのファセットは、パスワード ポリシーがログインごとに適用されるかどうかを特定でき、ストアド プロシージャのファセットは、すべてのプロシージャが暗号化されているかどうかを検出できます。その他のファセットは、ユーザー、スキーマ、暗号化サービス プロバイダ、情報セキュリティ国際評価基準への準拠、および C2 監査のプロパティをテストします。

Windows Server 2008

SQL Server 2008 は、ファイアウォールが既定で有効になっている Windows Server® 2008 で完全にテストされています。ファイアウォール設定の構成方法を確認するには、今が最適な時期です。また、Windows Vista® でも使用されていますが、Windows Server 2008 では、ユーザー アクセス制御が提供されます。この機能により、管理ユーザーとして自動的に付与される特権が制限されます。これらの機能は、すべてのバージョンの SQL Server に影響します。

まとめ

セキュリティは、今もなお SQL Server において、入念に機能強化が行われている分野です。暗号化と認証の機能強化によって、新しい機能が提供され、新しい監査システムと SQL Server 2008 のポリシー ベースの管理によって、セキュリティ遵守の状態を監視するための新しいツールが提供されます。

Rick Byham は、1995 年にマイクロソフトに入社しました。Customer Support Services で SQL Server サポート エンジニアとして働いた後に、Microsoft Learning の SQL Server チームに加わりました。2003 年にはテクニカル ライターとして SQL Server オンライン ブック チームに異動し、現在はセキュリティに関するドキュメントを担当しています。Rick の連絡先は、rick.byham@microsoft.com (英語のみ) です。

© 2008 Microsoft Corporation and CMP Media, LLC. All rights reserved; 許可なしに一部または全体を複製することは禁止されています.