ドメイン内の別のマシンにあるSQL Serverデータベースへの接続を開く小さなASP.NETテストスクリプトがあります。すべてのケースで機能しているわけではありません。
セットアップ:
W2K8R2の下のIIS 7.5がリモートSQL Server 2008 R2インスタンスに接続しようとしています。すべてのマシンが同じドメインにあります。
WebサイトのApplicationPoolIdentityを使用すると、次のようにしてSQL Serverに接続できません。
ユーザー「NT AUTHORITY\ANONYMOUS LOGON」のログインに失敗しました。説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーの詳細と、エラーがコードのどこで発生したかについては、スタックトレースを確認してください。
例外の詳細:System.Data.SqlClient.SqlException:ユーザー 'NT AUTHORITY\ANONYMOUS LOGON'のログインに失敗しました。
ただし、プロセスモデルIDをNETWORK SERVICEまたはドメインアカウントに切り替えると、データベース接続は成功します。
SQL Serverで\ $アクセスを許可しました。
私はWebサイトでなんらかの認証を行っていません。これは、データベースへの接続を開いて機能することを確認する単純なスクリプトです。
匿名認証を有効にし、アプリケーションプールIDを使用するように設定しました。
これを機能させるにはどうすればよいですか? ApplicationPoolIdentityがANONYMOUS LOGONを使用しようとしているのはなぜですか?さらに、匿名ログオンの使用を停止するにはどうすればよいですか?
私も同じ問題を抱えていました。 このページ のとおり、ApplicationPoolIdentityはマシンアカウント(DOMAIN\COMPUTERNAME $)としてネットワークリソースにアクセスすることになっていますが、代わりにNT AUTHORITY\ANONYMOUS LOGONを使用してSQLサーバーにアクセスしていました。
私は this hotfix を使用してApplicationPoolIdentityを動作させることができました。この修正プログラムは、NT AUTHORITY\ANONYMOUS LOGONとしてネットワークリソースにアクセスするためのソリューションを具体的に説明していませんが、コンピューターのパスワードの変更に関連しています。
このstackoverflowスレッド はこの解決策を見つけるのに役立ちました:
ASP.NET IDとSQL IDをデバッグするためのその他の役立つヒント
SQL統合認証はスレッドIDに関連しているため、ユーザーID、スレッドID(偽装によって変化)、およびSQLサーバーログインを表示できると便利です。このASPXスニペットは、3つすべてを表示します。
<%@ Import Namespace="System.Security.Principal" %>
<div>ASP.NET Request User identity: <%= User.Identity.Name %></div>
<div>Current thread/process WindowsIdentity: <%= WindowsIdentity.GetCurrent(false).Name %></div>
<asp:SqlDataSource ID="CurrentUserData" runat="server" ConnectionString="<%$ ConnectionStrings:ConnID %>"
SelectCommand="select SYSTEM_USER" />
<asp:DetailsView DataSourceID="CurrentUserData" runat="server" />
私はまったく同じ問題を抱えていました。数時間髪を抜いて、ようやくマシンを再起動しました。問題はなくなりました!再起動IIS via iisreset DIDは問題を解決しないことに注意してください。サーバーを再起動したときにのみ問題が解決しました。