メンテナンスを行っているレガシーアプリがあります。Visual Studio 2008、ASP.NET Web フォーム、SQL Server、および .NET 3.5 で構築されています。アプリケーションは、 によってサポートされるフォーム認証を使用しますActiveDirectoryMembershipProvider
。
コンピュータは 2 つのドメインに存在します。
ドメインは次のとおりです。
- 開発 PC: 会社ドメイン
- テスト サーバー: dev.companydomain
- 開発用 SQL Server: companydomain
アプリは開発用 PC で正常に動作し、Dev SQL Server に接続します。すべてが同じドメインにあります。
テストのためにテスト サーバーにデプロイすると、アプリケーションがデータベースに接続するときに例外がスローされます。ブラウザーは Dev PC で実行されます。アプリは自分の資格情報 (companydomain\myusername) を使用してログインします。テスト サーバーは、Dev SQL Server にも接続します。
エラーは次のとおりです。
Error: SqlException (18456): Procedure: Line: 65536 State: 1 Message: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
SQL Server プロファイラー トレースを実行したところ、次の結果が得られました。
Audit Login Failed Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. .Net SqlClient Data Provider ANONYMOUS LOGON NT AUTHORITY\ANONYMOUS LOGON 3208 90 2014-02-24 15:40:43.313
Web.config
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="Default.aspx" />
</authentication>
<identity impersonate="true">
</identity>
<Connection name="Connection Name" connectionString="Data Source=DatabaseServer;Initial Catalog=DatabaseName;Integrated Security=SSPI;"/>
IIS 認証設定
テストサーバーでの設定。
現在のユーザーをダンプするログ コードをいくつか追加しました。Thread.CurrentPrincipal.Identity
アプリケーションにログインした Windows ユーザーを返します。NT AUTHORITY\IUSRWindowsIdentity.GetCurrent()
を返します。
例外の原因は何ですか? 認証されたユーザーではなく、ID「匿名ログオン」がデータベース接続を通過するのはなぜですか?