[Windows XP] 暗号化された SQL Server Compact Edition データベースに対してアクセス遅延が発生することがある

.NET Framework 4.0 ベースのアプリケーションにおいて、暗号化された SQL Server Compact Edition データベースに対するデータアクセス処理を行った際、Windows XP 環境で処理が遅くなることがあります。

1. 問題発生要因

SQL Server Compact Edition プロバイダは、暗号化されたデータベースを参照する際に初回に CryptAcquireContext メソッドをコールします。暗号化されたデータの複合のためのキー コンテナーは、マシンコンテナに格納されているため(※)、下記フォルダ (以下 MachineKeys フォルダと呼称) を参照することになります。

C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys

MachineKeys フォルダにアクセス出来ない場合、後処理ロジックに分岐しますが、この後続処理に時間を要し処理が遅くなります。従って、対処方法としてはアプリケーションを実行するユーザーに MachineKeys フォルダに対する参照権限を付与していただくことで、後続の処理ロジックを実行させないということになります。

2. 対処方法

事前に MachineKeys フォルダに対し、SQL Server Compact Edition を参照するユーザーに対してアクセス権限を付与します。これにより後続の処理ロジックを実行させないことにより遅延が抑止されます。なお、既に SQL Server Compact Database をインストールしている環境には、既に MachineKeys フォ ルダ以下にキーコンテナが存在します。他のアプリケーションが、SQL Server Compact Database を使用している場合などは、キーコンテナの権限を手動で編集し、他のアプリケーションに対しての影響がないか十分に評価を行っていただくことを推奨いたします

また、その際は、対象の環境に対し、管理者権限を持つユーザー アカ ウントでの作業が必要です。編集時、[セキュリティ] タブにおいて、所有者の取得のメッセージが表示されることがありますが、その場合は取得を選択し、編集を実施します。
(※ 参考 : 技術情報 978973) 

(※) Error message when you try to install Forefront Security for Exchange or Antigen 9.0 for Exchange:
"Setup failed to create the Antigen resource and configuration in the EVS"

https://support.microsoft.com/kb/978973/ja

3. この動作について

本現象は製品の設計上想定される動作となります。

NoteNote : 鍵コンテナについて

ユーザープロファイル単位と、マシンコンテナと二種類あります。ユーザープロファイルに鍵コンテナが格納されている場合、対象ユーザーがログオンしていない場合、どのユーザーも鍵コンテナを参照することが出来ません。そのため、特定のユーザープロファイルに依存しないマシンコンテナ (MachineKeys) に格納することにより、サービスからも鍵コンテナを参照できるようになります。 

付記 : MachineKeys フォルダのアクセス権を変更することの安全性   まず、秘密鍵ファイルは、DPAPI (データ保護 API) によって、その秘密鍵を保持するアカウントのパスワードを使用して、暗号化されています。  つまり、MachineKeys フォルダ配下の秘密鍵ファイルから、鍵を取り出して利用できるのは、コンピューターアカウント (SYSTEM アカウント) であり、別のアカウントがその鍵の中身まで取り出すことはできません。 従いまして、MachineKeys フォルダに対して、"ユーザーのアクセス権" を追加した場合でも、(ユーザーは暗号化された鍵に触ることはできますが、鍵を取り出すことができないので)セキュリティ上の問題は発生しません。