1

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 を呼び出すと失敗します。

4

1 に答える 1

0

偽装するときにKerberosを使用するため、サーバーのSPNをDBに設定する必要があります。ただし、表示されるエラーメッセージによって異なります。このリソースはあなたを助けるはずですが、私はまだ同様のプロセスの問題に直面していますが、あなたのプロセスはこれでうまくいくはずです:

http://blogs.msdn.com/b/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx

于 2013-02-25T17:36:30.473 に答える