22

多くの人がこのエラーを受け取っているようですが、彼らの状況はすべて私のものとは少し異なっているように見えます。

Windows2003Server上のIIS6.0で実行されるASP.NET4.0Webアプリがあります。

Webサーバーボックスにリモートアクセスしてそこにログオンし、マシン名ではなくローカルホストとしてサイトにアクセスすると、Webアプリは正常に機能します。ただし、別のクライアントマシンからWebサイトにアクセスすると、次のエラーが発生します。

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

Webサイトで、匿名アクセスが有効になっている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サーバーは仮想サーバーで実行されています。これは関係がありますか?私はそうではないと思います。

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

4

3 に答える 3

40

サーバーがクライアントのクレデンシャルを別のボックスに渡すことを信頼されていない、いわゆる「ダブルホップ」の問題が発生しているようです(ホップ1はIISボックスへのクレデンシャル、ホップ2はIISボックスからSQLServerへ)。

サーバーに直接ログインしている場合は、クライアントマシン(このシナリオではIISサーバー)からSQL Serverに直接資格情報を渡すだけなので、2番目のホップを実行する必要はありません。同様に、SQL ServerがIISボックスに存在する場合、クライアントはIISとSQL Serverの両方と資格情報を共有できるボックスに対して1つの要求のみを行うため、このエラーも発生しません。

サーバーの委任の信頼化、SPNの作成、IISがWebサイトの実行に使用しているアカウントに他の適切なアクセス許可が付与されていることの確認など、委任を機能させるために必要な手順はかなりあります。ここに必要な手順の多くを実行するのに役立つtechnetの記事があります: https ://docs.microsoft.com/en-us/archive/blogs/taraj/checklist-for-double-hop-issues-iis -および-sql-server

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

2020年の更新:この問題のポップアップが再び表示され始め、Windows10ユーザーまたはWindows2016+ユーザーにのみ影響する場合は、ユーザーのマシンに「資格情報ガード」が適用されている可能性があります(https:/を参照)。 /docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-requirements)。壊れているものの1つは、Kerberosの制約なしの委任です。したがって、これが発生した場合は、制約なしの委任ではなく制約付きの委任を使用するように、中央のボックス(上記の例ではIISサーバー)を再構成する必要があります。

于 2012-06-15T17:28:58.967 に答える
6

ここでの問題は、使用していることです

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

これには、ブラウザがNTLMクレデンシャルを送信する必要があります。Firefoxはデフォルトではこれを送信しません。

サーバー上でローカルホストを使用している場合、ブラウザーはWindowsのログイン資格情報をサーバーに送信します。これは、ユーザーMyDomain\MyIDを認証してアクセスを許可します。

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

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

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

参照:方法:Windows統合セキュリティを使用してSQLServerにアクセスする

このWebサービスをWebで公開する予定がある場合、またはサーバーと同じドメインではないユーザーが利用できるようにする場合は、フォーム認証を確認することをお勧めします。

于 2012-06-11T04:14:04.980 に答える
2

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

IISでは、基本認証のみが、ネットワークを介してリモートSQLサーバーに流れるセキュリティトークンを使用してユーザーをログオンします。既定では、ID構成要素の設定と組み合わせて使用​​される他のIISセキュリティモードでは、リモートSQLServerに対して認証できるトークンは生成されません。

差出人:http ://msdn.microsoft.com/en-us/library/bsz5788z.aspx

于 2012-09-17T00:38:34.980 に答える