web-dev-qa-db-ja.com

ASP.NETおよびSQL Server 2008でのエラー「ユーザー 'NT AUTHORITY \ IUSR'のログインに失敗しました」

ASP.NET v3.5 WebアプリケーションがSQL Server 2008データベースへの接続を開こうとすると、次の例外がスローされます。

System.Data.SqlClient.SqlException:ログインによって要求されたデータベース「MyDbName」を開けません。ログインに失敗しました。ユーザー「NT AUTHORITY\IUSR」のログインに失敗しました。

問題は、サーバーのログインリストとデータベースのユーザーリストにNT AUTHORITY\IUSRを追加したことです。サーバーの場合はユーザーにパブリックロールを付与し、データベースの場合はdb_datareader権限を付与しました。

アプリケーションプールが実行されているIDであるNT AUTHORITY\NETWORK SERVICEにも同じことを許可しました。

Webアプリケーションは、IIS7によってホストされます(違いがある場合)。 DBとIISが同じ物理マシン上にある場合も同様です。

17
Justin R.

ここでのトリックは、NT AUTHORITY\NETWORK SERVICEが実際にはデータベースにDOMAINNAME\MACHINENAME$として表示されることです($記号に注意してください!)。つまり、WebサーバーからSQL Serverにマシンの境界を越えるときに、NETWORK SERVICEまたはLOCAL SYSTEMアカウントを使用すると、SQL Serverはマシンアカウントを認識します。他の非ドメインアカウントを使用すると、SQL Serverは資格情報を受け取りません。

エラーメッセージに少し戸惑いました。正直なところ、DBが別のボックスにあるときにLogin Failed for NT AUTHORITY\ANONYMOUS LOGON以外のものが表示されるとは思いません。

IUSRは匿名のWebサイトに使用され、SQL Serverにネットワーク経由で渡すことはできません。同じマシンですべてを実行している場合は、それが機能する方法を見つけることができるかもしれませんが、私はそのように実行することはないので、私にはわかりません... ;-)

8
Dave Markle

web.configでそれが誰かを助ける場合、このエラーが消えるように<identity impersonate="false" />を追加しました(<system.web>の下)

4
Smyrnian

別の(できればドメイン)アカウントを作成し、接続文字列(通常はweb.config)で指定することをお勧めします。その後、このアカウントで実行できることとできないことをWebサーバーのアクセス許可に制限できます。次に、SQLサーバーでこのアカウントに必要な権限を付与できます。

2
DmitryK

偽装を許可するようにIISが構成されていないが、web.configが偽装を試行している場合は、前と同じようにこのエラーが発生することに注意することが重要です。 。

私はこの正確なエラーに遭遇したばかりで、次のすべての手順が必要です(ただし、最初の手順がありませんでした:

1.)IIS Webサーバー: enter image description here

2.)偽装を使用するようにサイトを構成する(web.config)と組み合わせる:

   <system.web>
     <identity impersonate="true" userName="your_service_acct" password="***" />

3.)上記の手順では、MSSQLに 'your_service_acct'のSQLログイン設定があり、権限が付与されていることを前提としています。

Localhost、localdb、または個人的にアクセス権を持つリモートdbで実行すると、開発IISはまるでYOUであるかのように実行され、すべてが魔法のように機能します。したがって、デバッグではモードでは、特別なweb.config。を作成する必要はありません。

IISは次のことを試みますので、サイトをある種のサーバー(私の場合、私たちのTEST環境)に展開するとすぐに、上記の手順を実行した必要があるでしょう。アプリケーションプールユーザーとして接続します。これは通常、管理上必要なことではありません。つまり、 web.config変換 の使用を開始するときに、Visual Studioは適切なidentity impersonate="true"を挿入します「パブリッシュ...」のデプロイメントステップ中。

2
bkwdesign

私は同じ問題を抱えていましたが、アプリケーションプールを変更することでこれを解決しました。

1

接続文字列でIntegrated Security=True;を使用する代わりに、ユーザー名とパスワードによる認証user=sa; pwd=mypassword;を使用するだけです

1
user586399

この問題は、最後のデータベースに新しいデータベースを復元するときに表示されます。

これを解決するには、sqlserverに移動し、次にセキュリティに移動して、アプリケーションプールを再度設定する必要があります。

0
mahmoud