2017-09-29 13 views
0

私のシナリオは次のとおりです。ドメインコントローラ(Windows 2008)、SQL Server 2008およびIIS(Windows 7)用に3つの別々のマシンがあります。ASP.NET、IIS、SQL Server 2008

私はデフォルト値の例として suser_name()を設定することで、SQL Serverのトリガー(削除、更新、挿入)、 を使用してテーブルのログを維持しています

  • 表1:TRNO BIGINT、trdateは日時、CDate関数として日時
  • Table1_Log:TRNO BIGINT、trdateは日時、CDate関数日時など、AuditUser VARCHAR(100)デフォルトのSUSER_NAME()

ユーザーが任意のレコードを更新するたびに、それはそのログテーブルを維持します。私の問題は、IISが設定されているログテーブルに常に同じComputerNameが表示されることです。

私はIISでやった:私は、アプリケーションを実行すると

Application - 
       Anonymous Authentication - Disabled 
       ASP.Net Impersonation  - Disabled 
       Basic Authentication  - Disabled 
       Form Authentication  - Disabled  
       Windows Authentication - Enabled 
Application Pools - 
       Default Application Pool 
           Identity - Network Services 

-------------------------------------------------------------- 

は、今では彼のDomain\UserNameと私はすべてのレコードを編集するとき、それはAuditUser欄に自分のコンピュータ名を保存する(ユーザーが入力されたウィンドウのダイアログボックスを表示すなわち:suser_name())。

Windowsのダイアログボックスで入力した実際のユーザー名を保存します。 suser_name()

は、あなたのアプリケーションがIISアプリケーションプールで指定されたIDとして実行されている

答えて

0

ありがとうございます。個々のIDとしてSQL Serverに接続するには、偽装を有効にする必要があります。

これは次に、あなたのコード内であなたがあなたの中に、例えばあなたのケースでは(そのユーザーを偽装したいコードの部分をラップするWindowsImpersonationContextを使用して、あなたのweb.configファイルに

<system.web> 
    ... 
    <authentication mode="Windows"/> 
    <identity impersonate="true"/> 
    ... 
</system.web> 

を偽装を有効にする必要データベース呼び出し)。

var identity = User.Identity as WindowsIdentity; 

using (var context = identity.Impersonate()) 
{ 
    // Do stuff 
} 

これらのすべてのユーザーは、データベースのアクセス権が必要です。

+0

あなたのクイック返信をありがとう 'NT AUTHORITY \ ANONYMOUS LOGON' on Connection.open() –