SQL Server へのアクセス許可も持つドメイン アカウントで実行されている IIS でホストされている Web サービスがあります。下記のすべてのユーザーは、この SQL Server にアクセスできます。
サービス構成の一部を次に示します。
<basicHttpBinding>
<binding name="SecureWebBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
...など
特定のサービス メソッドの実行中に、サービス アカウントとしてデータベースを 1 回呼び出し、サービスを呼び出したユーザーとして別の呼び出しを行いたいと考えています (呼び出し元のユーザーによって作成された FILESTREAM トランザクション コンテキストを返します - これらはユーザー固有です)。最初の呼び出しは完了しますが、2 番目の呼び出しは次のようにラップされます。
using (ServiceSecurityContext.Current.Impersonate())
{
using (var connection = new SqlConnection(...Integrated Security = true...)
{
connection.Open(); //<---Exception
の呼び出し後、を使用したサービス アカウントではなく、呼び出し元のユーザーを正しく返しImpersonate
ます。WindowsIdentity.GetCurrent()
ImpersonationLevel == Identification
最初の 2 行を削除すると、操作はサービス アカウントの ID として完了します。もちろん、後で FILESTREAM を呼び出すと失敗します。