2012-06-09 16 views
16

多くの人がこのエラーを受けていますが、状況はすべて私のものとは少し異なります。Web Appのログインに失敗しました 'NT AUTHORITY ANONYMOUS LOGON'

Windows 2003 Server上でIIS 6.0で動作するASP.NET 4.0 Webアプリケーションがあります。

Webサーバーボックスにリモートアクセスしてログオンし、マシン名ではなくlocalhostというようにサイトにアクセスすると、Webアプリケーションは正常に動作します。私は別のクライアントマシンからウェブサイトにアクセスするときしかし、私は次のエラーを取得する:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON' 

ウェブサイトは匿名アクセスはWindows認証がオンになっています。 Webアプリケーションには次のものが含まれています:

<authentication mode="Windows"> </authentication> 
    <identity impersonate="true"/> 

    <connectionStrings> 
     <add name="MyConnection" connectionString="Data Source=MyDbServer;Initial Catalog=MyDatabase;Integrated Security=True" 
</connectionStrings> 

私のWebサーバーはVirtual Serverで動作しています。これは意味がありますか?私はそうではないと思う。

偽装= TRUEの後にWeb設定でドメイン\ログインとパスワードを追加すると、サイトが機能することに注意してください。

+0

匿名アクセスが確認されたが、選択したユーザーが適切な権限を持っていない有効にしてきたように、それは本当に聞こえます。また、Server 2008でタグ付けされていますが、あなたが2003年を使用しているということを体の中で言うとします。 –

+0

私はMyDomain \ MyIDとしてWebサーバーにログオンし、http:// localhost/mysite、ウェブサイトが動作します。私のPCにログオンし、http:// webservername/mysite /を使用してサイトにアクセスすると、匿名ログオンのLogonFailedエラーが発生します。しかし、私はWebサーバーに遠隔で、データベースにアクセスできないIDを持つWebサーバーにログオンすると、ログインで要求されたデータベース "MyDatabase"を開くことができません。ログインに失敗しました。 ユーザー 'MyDomain \ MyID'(匿名ではありません)のログインに失敗しました。さらに、SSMSとWindows Authを使用してdbに接続できます。 – ChadD

+0

好奇心が強い、あなたはどのブラウザを使ってテストしていますか? – nunespascal

答えて

26

サーバーがクライアントの資格情報を別のボックスに渡すことを信頼されていない場所である「ダブルホップ」問題に遭遇しているようです(ホップ1はIISボックスの資格情報です、ホップ2はIISボックスからSQL Serverへの接続です)。

サーバーに直接ログオンすると、クライアントマシン(このシナリオではIISサーバー)からSQL Serverに直接資格情報を渡すだけなので、セカンドホップは必要ありません。同様に、SQL ServerがIISボックスにある場合、クライアントはIISとSQL Serverの両方で資格情報を共有できるボックスに1つの要求を作成するだけなので、このエラーも発生しません。

委任のためにサーバーを信頼し、SPNを作成し、IISがWebサイトを実行するために使用しているアカウントに他の適切なアクセス許可が与えられていることを確認するなど、ここで必要な手順の多くを通してあなたを取ることができますTechNetの記事があります:http://blogs.technet.com/b/taraj/archive/2009/01/29/checklist-for-double-hop-issues-iis-and-sql-server.aspx

注:あなたがNTLMなくケルベロス(または別の委任可能プロトコル)を使用している場合、それは動作しません、と中間サーバー(IISサーバー)には渡すことができるトークンが必要です。 NTLMはネゴシエーションに基づいているため、動作しません。

+1

ああ!ダブルホップの問題!ありがとう、たくさんの男!私は忘れた – Alex

+0

ニースの答え。シナリオが異なるが、症状と根本的な原因が同じである、最近の質問からここに戻っています。https://stackoverflow.com/questions/47871816/how-to-run-an-r -script-which-have-database-connection-integrated-windows-a/47877987#47877987 –

5

ここでの問題は、あなたがこれはNTLM資格情報を送信するには、ブラウザを必要と

<authentication mode="Windows"> </authentication> 

を使用しています。 Firefoxはデフォルトでこれを送信しません。

サーバーに接続してlocalhostを使用すると、ブラウザはWindowsログイン資格情報をサーバーに送信します。これは、ユーザーMyDomain \ MyIDを認証してアクセス権を付与しています。

ASP.NETは、認証されたユーザーまたは匿名インターネットユーザーアカウント(IUSR_machinename)のいずれかであるIISによって渡されたトークンを偽装します。

そのドメインに属していないマシンから発生したすべてのWeb要求は、匿名アカウントで実行されます。あなたの場合、NT AUTHORITY\ANONYMOUS LOGON

あなたの接続文字列はIntegrated Security=Trueです。つまり、asp.netスレッドが処理しているWindowsアカウントにもデータベースへのアクセス権が必要です。 IISにログインするために使用されたWindows資格情報を渡す場合は、Trusted_Connection=Yesを設定する必要があります。

は参照してください:How to: Access SQL Server Using Windows Integrated Security

を、私はあなたがウェブ上でこのWebサービスを公開する予定がある場合は、フォーム認証を見てみましょうことを示唆している、またはあなたが同じではありませんユーザーが利用できるようにしたい場合ドメインをサーバーとして使用します。

+0

ところで、あなたのポストの最初の2つの文章をチェックしてください。 :-)注:私は別のPCにリモート接続し、自分のWebサイトと同じドメインにあるIDでサインインしても同じエラーが発生していることに注意してください。統合セキュリティが使用されている場合、ASPNETが実行されているWindowsアカウントがdbにアクセスする必要がありますか?私はIMPERSONATION = TRUEを設定することは、現在のユーザーになりすますべきだと考えていました。 – ChadD

+0

が修正されました。いくつかの説明を追加しました。 – nunespascal

+0

私はこれまで忘れてしまった記事に気付きました.SQL Serverがリモートサーバー上にある場合は、IISでWindows認証をクリアして[基本]を選択します。私がこれを行うと、ユーザーは元々自分のPCにログオンしていたのと同じWindows LAN資格情報を入力するように求められます。これは不便で、なぜそれが必要ですか?さらに、ユーザーコード\ pwdを入力すると、安全でないことが通知されます。 – ChadD

0

私の問題は、IISでは基本認証の代わりにWindows認証が有効になっていることでした。基本認証に切り替えると、ログインしたアカウントでSQL Serverにアクセスできました。

In IIS, only Basic Authentication logs users on with a security token that flows across the network to a remote SQL server. By default, other IIS security modes used in conjunction with the identity configuration element settings will not result in a token that can authenticate to a remote SQL Server.

から:http://msdn.microsoft.com/en-us/library/bsz5788z.aspx