ユーザー「IIS APPPOOL \ ASP.NET v4.0」のログインに失敗しました


432

Webプロジェクト(C#Asp.Net、EF 4、MS SQL 2008、およびIIS 7)があり、それをローカルでIIS 7に移行する必要があります(現時点ではCASSINIで正常に動作します)。

IISのローカルでは、Default Web Site自分の展開を使用しています。私のデプロイとDefault Web SiteプールASP.NET v4.0(設定の画像を参照)の両方に、私のWebプロジェクトとしてプールターゲットFramework 4を使用しています。 プール設定 サイトにアクセスすると、ブラウザはページを表示せず、代わりにブラウザがページをダウンロードできるようにします。

IISでローカルに実行している他のプロジェクトがありますが、問題なく動作します(ただし、Entity Frameworkは使用していません)。

イベントロガーを使用すると、次のようなエラーが表示されます。

Exception information: 
    Exception type: EntityException 
    Exception message: The underlying provider failed on Open.
   at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)


    Login failed for user 'IIS APPPOOL\ASP.NET v4.0'.
       at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
       at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       at System.Data.SqlClient.SqlConnection.Open()
       at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)

関連する質問

更新:この質問に関するリソースを読むと、MS SQL 2008で権限を手動で付与する必要があることを、回答で説明しています。IIS 7.5とMS SQL 2008 R2を使用すると、手動で権限を設定する必要はありません。


2
Webサイトフォルダーに対するアプリプールID権限を許可しましたか?
クリスチャン

よくわかりませんが、方法を教えてください。
GibboK、2011年


実際、ドリフトが言うように、これはSQLのセキュリティ問題である可能性があります。AppPoolにNTユーザーアカウントを設定し、そのアクセス許可をWebサイトフォルダーとSQLの適切なテーブルに付与することをお勧めします
Christian

1
@GibboK:承認された回答をここで確認し、より適切な回答を選択することをお勧めします。受け入れられた答えは、多くの人々をセキュリティのブラックホールに導きます。はい、動作します。いいえ、それは本当に良い考えではありません。以下の私のコメントを参照してください。
消費者、2014

回答:


596

SQL Serverへの接続を開こうとして失敗しているようです。

SQL Serverへのログインを追加IIS APPPOOL\ASP.NET v4.0し、データベースへのアクセス許可を付与する必要があります。

SSMSで、サーバーの下の[セキュリティ]を展開し、[ログイン]を右クリックして[新しいログイン...]を選択します。

[新しいログイン]ダイアログで、ログイン名としてアプリプールを入力し、[OK]をクリックします。

ここに画像の説明を入力してください

次に、アプリプールのログインを右クリックして、[プロパティ]を選択し、[ユーザーマッピング]を選択します。適切なデータベースと適切な役割を確認してください。db_datareaderand だけを選択することもできると思いますがdb_datawriter、EFを使用して実行する場合は、ストアドプロシージャを実行するためのアクセス許可を付与する必要があります。ここで役割の詳細を確認できます


8
おかげで、私はあなたが悲しいことをしました、今私はこのエラーを受け取ります:ログインによって要求されたデータベース「SiteNameExtension」を開くことができません。ログインに失敗しました。ユーザー 'IIS APPPOOL \ DefaultAppPool'のログインに失敗しました。
GibboK、2011年

76
非常に重要:ログインを確認するために検索をクリックしないでください!認識できませんが、機能します。IIS APPPOOL \ SimonsAppPoolNameと入力するだけです。このstackoverflow.com/questions/1933134を
Simon_Weaver

6
代わりに、次の回答で説明するように、「Identity」をIISから「LocalSystem」に変更することをお勧めします。
Altaf Patel 2014年

SQLサーバーインスタンスがIISホストマシンとは別のホストマシンにある場合、これは機能しますか?同じ問題を修正する必要があるが、SQLとIISが同じマシン上にないため。そのため、その新しいユーザーにWindows認証を使用しても機能しません
Segers-Ian

5
私にとって追加するユーザーは「IIS APPPOOL \ DefaultAppPool」でした。その後、うまくいきました。
マルセル

343

ApplicationPoolIdentityは、IIS7->アプリケーションプール->詳細設定から変更できます。 高度な設定

ApplicationPoolIdentityの下にローカルシステムがあります。これにより、アプリケーションはで実行NT AUTHORITY\SYSTEMされます。これは、デフォルトではデータベースへの既存のログインです。

編集:この提案を適用する前に、セキュリティへの影響に注意して理解する必要があります。


51
@GibboK、セキュリティが心配な場合は、これを行わないでください。technet.microsoft.com/en-us/library/dd378907(v=WS.10).aspxを
Jeff Ogata

4
LocalSystem IDとしてアプリプールを実行することに加えて、 "NT AUTHORITY \ SYSTEM"ユーザーをデータベースロールにマップする必要もありました
Phil

31
これは臭い。SYSTEM権限をWebアプリに付与することは災害のレシピであり、悪意のあるユーザーがあらゆる種類の機会を利用して、Webアプリだけでなくホスティングサーバー全体に悪意を及ぼすことを可能にします。DBがSYSTEMからのログインを受け入れるからといって、WebアプリをSYSTEMとして実行する必要があるとは限りません。Windowsデスクトップでは、システムとして実行することさえできません(フープをジャンプすることなく)。この権限でWebアプリケーションを実行することは、本当に、本当に愚かな考えです。DBに現在のアプリプールIDを受け入れさせる必要があります。できれば-100にします。-1。
14年

8
SYSTEMには、Administratorよりも高い特権があります。あなたは必要があります決してそのレベルに近づいて何もしてWebサーバーを実行していません。
slugster 14

1
Guestアカウントを管理者グループのメンバーにするだけです。シンプルでクリーン、セキュリティのでたらめに問題はありません。

29

あなたが持っていることを確認してください...

Trusted_Connection=false;

接続文字列内


7
接続文字列にTrusted_Connection = trueを指定すると、SQL認証値がIIS Identityユーザープロファイルで上書きされます。
ジェフ・ザ・ベア

2
私の場合は削除:接続文字列からIntegrated Security = Trueを修正しました。
Carlos R Balebona 2015年

私のために働いた。保存日@JefftheBear
D_Edet

26

次の画像のようにsqlを使用してこの問題を解決しました。

db->プロパティ->権限->サーバー権限の表示->を右クリックし、権限を選択IIS APPPOOL\ASP.NET v4.0して付与します。

db


上記のプロセス(および画像)は、そのアプリケーションプールIDへのサーバーレベルのアクセス許可の付与について説明したものですか?良い考えのように聞こえません。
Chris Walsh

2
このユーザーはメダルに値します!これ以外には何も役に立たなかった!
Khateeb321

2
@ Khateeb321絶対に、DevTにご回答いただきありがとうございます。
Azxdreuwa 2018

22

このSQLスクリプトを実行する

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
      FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
      DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [WebDatabaseUser] 
  FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'WebDatabaseUser'
GO

ありがとう、最も簡単な方法;)+1
ゾルファガリ

11

指定した接続文字列の場合:

User ID=xxx;Password=yyy

しかし、接続文字列には次のものがあります。

Trusted_Connection=true;

SQL ServerはWindows認証を使用するため、接続値は無視されて上書きされます(IISはIdentityユーザープロファイルで指定されたWindowsアカウントを使用します)。 詳細はこちら

接続文字列に以下が存在する場合も同様です。

 Integrated Security = true;

または

 Integrated Security = SSPI;

Windows認証がデータベースサーバーへの接続に使用されるためです。 詳細はこちら


10

iis->アプリケーションプール->アプリケーションで使用されているアプリケーションプールを見つけます。

ここに画像の説明を入力してください

アプリケーションに使用するアプリケーションプールを選択し、右クリックして詳細設定を選択します。

ここに画像の説明を入力してください

アプリケーションプールIDを選択します ここに画像の説明を入力してください

ローカルシステムとしてビルトインを選択し、[OK]をクリックします


7

ApplicationPoolIdentityは嫌いです。私は常にWindowsユーザーアカウントをAppPoolsのアカウントとして設定しました。

ドリフトが言うように、それはデータベースのセキュリティ問題のように聞こえます。したがって、NTユーザーアカウントを作成し、それをASP.NET v4.0 AppPoolに割り当ててから、WebサイトフォルダーおよびSQLの関連するテーブルへのアクセス許可を付与します。


申し訳ありませんが、それを行う方法がわかりません。チュートリアルを教えていただけませんか?これについてのご協力に感謝します
GibboK、2011年

2
これを行わないでください。IISが
Julien Lebot

LeSnip3R壊れたリンク@
Adaptabi

6

統合セキュリティを使用しないでください。使用するUser Id=yourUser; pwd=yourPwd;

これは問題を解決します。


4

私はこの問題を抱えていましたが、実際には別の原因が原因でした-データベースに「IIS APPPOOL \ ASP.NET v4.0」ユーザーがいましたが、それでも機能しませんでした。

私は最近SQL Serverインストールをアップグレードし、その過程でユーザーがログインから切断されました-そのため、[データベース]-> [セキュリティ]-> [ユーザー]の下に「IIS APPPOOL \ ASP.NET v4.0」がありましたが、セキュリティの下にユーザーがいません->ログイン。

ログイン 'IIS APPPOOL \ ASP.NET v4.0'を[セキュリティ]-> [ログイン]に追加しました。SQLServerはそれをデータベース内のユーザーに自動的にマップし(これは以前は手動で行う必要がありました)、問題が修正されました。


1
追加するために...左側の[権限]の下で、db_writerとdb_readerにチェックマークを付けます。これらの権限を利用するデータベースを選択します。
benjieb 2013年

4

Windows認証を使用していて、接続文字列でユーザー名のパスワードを言及していない場合は、最初に消去する必要があります。

localhostを介してコードを実行するとどうなりますか。ローカルホストからwcfテストクライアントを実行すると、ローカルデバッグモードのアプリケーションがアカウントのサービスによってデータベースを呼び出しているため、データベースと通信できます。devenv.exeがユーザーアカウントで実行されているため、データベースにアクセスできます。

ただし、IISでWebサービスを展開する場合。このサービスがアカウントではなくIISで実行されることを理解してください。したがって、Windows認証のためにSQLサーバーにアクセスするには、IISサービスにアクセス権を割り当てる必要があります。ここでは、ユーザー_______のアクセス権の問題とログイン失敗のため、WebサービスはSQLサーバーと通信できません(ここにユーザーが来ます)

したがって、Windows認証を使用してデータベースに接続している場合は、IISアプリケーションプールの設定を変更するだけで済みます。IISアプリケーションプールのIDをローカルシステムに変更する必要があります。

以下は、Windows認証WCFの手順です。

1)IISを開きます(windows + R(実行)と入力し、inetmgrと入力して[ok]をクリックします)

2)接続の下のPC名をダブルクリックします

3)[アプリケーションプール]をクリックします

4)アプリプールを選択します(DefaultAppPool)

5)次に、右側のアクションの下で[詳細設定]をクリックします。

6)プロセスモデルセクションに移動し、

7)[ID]をクリックします。

8)LocalSystemを選択します。

次に、SQLサーバー管理スタジオを開きます。run->を開き、次にssmsと入力してから、okを押します。ssmsで、Windows認証アカウントを使用してログインします。[セキュリティ]タブを開き、[ログイン]タブを展開すると、アカウントを表示できます。

アカウントのプロパティを開いてuserMappingに移動し、接続するデータベースを選択して、選択したデータベースに使用するロールメンバーシップサービスを確認します。[OK]をクリックします。

(ネットワークサービス、つまりイントラネットユーザーの場合、上記のNT AUTHORITY \ SYSTEMユーザーの設定も構成する必要があります)

Trusted_Connection = True;を追加します。接続文字列のプロパティ。保存してWebサービスをデプロイします。アプリプールを再起動します。

これでデータベースに接続できるようになります。


パーフェクト!LocalSystemが私のためにこの問題を修正しました:)
全体主義者

3

このメッセージが表示され、WebサーバーでWindows認証を使用しています。

アプリケーションプールで指定されたIIS APPPOOL \ ASP.NET v4ユーザーを使用するのではなく、現在認証されているWebユーザーがデータベースに対して認証されることを望みました。

web.configに次のように入力すると、これが修正されました。

<system.web>
  <identity impersonate="true" />
</system.web>

https://msdn.microsoft.com/en-us/library/bsz5788z.aspx

SQL DBでのAppPoolユーザー名の作成、またはSQL Authの使用に関する他の回答が表示されます。SQL内で個々のWindowsユーザーをキャプチャまたは保護したくない場合は、どちらも正しいでしょう。

トム


これで解決しましたが、その理由はわかりません。IIS / AppPoolは、 "Integrated Security = true"を明示的に示す接続文字列をハイジャックするだけですか?なぜ??
ガイ

3

1_in SqlServer Security => Login => NT AUTHORITY \ SYSTEM => RightClick => Property => UserMaping => Select YourDatabse => Public && Owner Select => OK 2_In IIs Application Pools DefaultAppPool => Advance Setting => Identity => LocalSystem => Ok



2

Cassiniは、Visual Studioアプリケーションの起動時に、独自のユーザーIDとしてWebサイトを実行します。IISはWebサイトをアプリプールIDとして実行します。アプリプールIDにデータベースへのアクセスが許可されていない場合、エラーが発生します。

IISは、セキュリティを向上させるためにApp Pool Identityを導入しました。既定のアプリプールIDでWebサイトを実行するか、独自の名前で新しいアプリプールを作成するか、ユーザーアカウント(通常はドメインアカウント)で実行する独自の名前で新しいアプリプールを作成できます。

ネットワーク環境(Azure以外)では、Active Directoryドメインユーザーアカウントで新しいアプリプールを実行できます。これはマシンアカウントよりも優先されます。これにより、きめ細かなセキュリティと、データベースを含むネットワークリソースへのきめ細かいアクセスが可能になります。各Webサイトは異なるアプリケーションプールで実行されます(それらの各Webサイトは独自のドメインユーザーアカウントで実行されます)。

すべての接続文字列で引き続きWindows統合セキュリティを使用します。SQL Serverで、ドメインユーザーをログインとして追加し、Webサイトごとにデータベース、テーブル、SPなどへの権限を付与します。たとえば、Website1はApp1でUser1として実行されるため、Website1が使用するDB1にはUser1のログインがあります。

Visual Studioの組み込みDB(LocalDBなど)と組み込みのWebサーバーを運用環境に展開する際の1つの課題は、開発者のユーザーSIDとそのACLが安全な運用環境で使用されないことです。マイクロソフトは、展開用のツールを提供しています。しかし、localDBとlocalWebServerを備えた新しい簡単なVS IDEですぐに使えるすべてに慣れている貧しい開発者に同情してください。これらのツールは、特にSysAdminとDBAdminのサポートが不足している開発者にとって使いにくいためです。彼らの専門知識。それでも、Azureへのデプロイは、上記のエンタープライズネットワークの状況よりも簡単です。


2

web.configに接続文字列が追加されている場合は、「Integrated Security = false;」になっていることを確認してください。そのため、web.configで指定されたIDとパスワードを使用します。

<connectionStrings>
    <add providerName="System.Data.SqlClient" name="MyDbContext" connectionString="Data Source=localhost,1433;Initial Catalog=MyDatabase;user id=MyUserName;Password=MyPassword;Trusted_Connection=true;Integrated Security=false;" />
</connectionStrings>

2

指摘したように、Windows認証を使用せず、SQL Server認証を使用する

また、[サーバー接続]ダイアログを使用して接続を作成した場合は、web.configで接続を確認してください。接続を作成または変更し、web.configに信頼できる接続として保存された可能性があります。この認証を使用するだけです

<add name="MyDBConnectionString" connectionString="Data Source=localhost;Initial Catalog=Finantial;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient"/>

エラーを修正する必要があります。


2

ユーザーにデータベースへの権限を付与する別の方法はIIS APPPOOL\ASP.NET v4.0次のとおりです。
ここに画像の説明を入力してください


  1. IIS APPPOOL\ASP.NET v4.0デフォルトのスキーマと同様に、ユーザー名とログイン名で新しいユーザーを追加します。
  2. 所有者スキーマとメンバーシップに移動し、db_datareader、db_datawriterを確認します

1

これは質問に関連していて、場合によっては答えることができるので、私は答えとしてこれを投稿すると思いました。

データベースが存在しない場合にも同じメッセージが表示されます!

接続文字列にスペルミスがないこと、正しいサーバーインスタンスを指していることなどを確認してください。


1

同じ問題Integrated Security=Trueがありますが、 今はfalseに変更して解決しました


1

同様のことが私に起こったのですが、私にとっては、Webサイトのweb.configでIntegrated Security = TrueプロパティをIntegrated Security = falseに変更していました。


これは機能します!統合セキュリティを削除しました
Charles Xavier

0

あなたが何を行っている@Teddyお勧めしSTILL同じエラーを取得しますか?

親サーバーではなく仮想ディレクトリに対応するアプリプールの設定を変更していることを確認してください。各仮想ディレクトリには独自のAppPoolがあり、継承しません。


0

DefaultAppPoolで、IdentityプロパティにNetworkServiceを設定し、SQL ServerにUser Network Serviceを追加し、それに適切な権限をデータベースに付与します。これは私にとっては非常にうまく機能します。ローカルでテストしましたが、これはどの接続からでも最適な構成だと思いますネットワーク内の他のコンピュータ。IISのIdentityでLocalSystemを設定するとうまく機能し、SQL Serverで他のユーザーを作成する必要はありませんが、ネットワーク環境では機能しないと思います。


0

ASP.NET Web APIのテストで同じ問題が発生しました

SQL Server 2012 Expressで作成されたVisual Studio 2013 ExpressデータベースでWeb.Hostを開発しました。組み込みのIIS Expressを使用して実行されたテスト(機能)IISローカルを使用するように変更されました(プロパティページから-Webオプション)Fiddlerでエラーが発生しました。プロバイダー用.... 'APPPOOL \ DefaultAppPool'を引用

機能したソリューション。

IIS内

アプリケーションプール 'DefaultAppPool'をクリックしますSet Identify = 'ApplicationPoolIdentity' Set .NET framework = v4.0(私のアプリは4.5でしたが)

SQL Server Management Studio

Securityフォルダを右クリックします(SQL Serverエンジンの下にあるため、すべてのテーブルに適用されます)ユーザーを右クリックし、「IIS APPPOOL \ DefaultAppPool」を「Grant」列のセキュリティ保護可能なファイルに追加し、必要なオプションをオンにします。上記に関して、あなたがDBAである場合は、おそらく知っていて、それらのオプションを制御する必要があります。あなたが私のような場合、開発者はMVCスタイルでEF 6を介してSQL ServerにもアクセスするWEB APIサービスをテストしたいと思っているだけで、すべてをチェックするだけです。:)はい、わかっていますが、うまくいきました。


0

新しいログインを追加する場合は、サーバープロパティ(右クリック->プロパティ)/セキュリティで、認証モードがsqlserverとwindowsの両方に設定されていることを確認してください。


0

セキュリティの下で「全員」を追加します。サーバーとデータベースにログインしているユーザーを追加した場合、これは不足しているものです。お役に立てれば。


必要に応じて権限を設定します。認証部分が処理され、アクセスを許可するためにコードを介して承認を確認します。曖昧な点があると感じた場合は、遠慮なく訂正してください。ありがとう。
avinava basu 2016

0

記録として、からLocalDBに切り替えた後にこのエラーが発生した場合はSQLEXPRESS、データベースがすでにSQLEXPRESS。これはManagement Studioで確認できます。

Entity Framework切り替えて使用した場合も同様の問題がありましたSQLEXPRESS from LocalDBUpdate-Databaseコマンドを実行する必要がありました。その後、うまく接続できました。


0

私は@JeffOgataが言ったように正確に行いましたが、エラーが発生しました:

Windows NT user or group 'IIS APPPOOL\ASP.NET v4.0' not found. Check the name again. (Microsoft SQL Server, Error: 15401)

エラーメッセージをもう一度確認すると、 Login failed for user 'IIS APPPOOL\DefaultAppPool'.

という名前のユーザーを追加した後、IIS APPPOOL\DefaultAppPoolすべてが働いた。


0

SQL Serverプロファイラー(SSMS =>ツールメニューで利用可能)を使用して、IISユーザーが何らかの理由でNT AUTHORITY \ IUSRであることがわかりました(この質問の回答で推奨されているすべての手順に関係なく) 。そこで、そのユーザーをSQL Serverに追加しましたが、うまくいきました...


0

Asp.netウェブフォームでは、

このエラーは、次の場所からasp.netをインストールするときに修正されました。

サーバーマネージャー>管理>役割と機能の追加>サーバーの役割> Webサーバー(IIS)> Webサーバー>アプリケーション開発> ASP.NET 3.5 / 4.6がインストールされている。

私の問題は修正されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.