c# - 開け - ユーザー iis apppool defaultapppool は ログイン できません で した




ユーザー 'IIS APPPOOL \ ASP.NET v4.0'のログインに失敗しました (20)

私は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プロジェクトとしてのプールターゲットフレームワーク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を使用する場合は、手動でアクセス許可を設定する必要はありません。


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

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

それが成功した解決策。

IISで

アプリケーションプール 'DefaultAppPool'をクリックSet Identify = 'ApplicationPoolIdentity' .NET Framework = v4.0を設定する(私のアプリケーションは4.5だったが)

SQL Server Management Studioで

SQL Serverエンジンの下にあるセキュリティフォルダを右クリックして、すべてのテーブルに適用します。ユーザーを右クリックし、 'IIS APPPOOL \ DefaultAppPool'を追加します。 '権限'列のセキュリティターゲットで、指定するオプションを確認します。 あなたはおそらくDBAであれば、これらのオプションが何であるかを制御したいと思うでしょう。 あなたが私のような人であれば、開発者はただWEB APIサービスをテストしたいと思っていましたが、MVCスタイルのEF 6を使ってSQL Serverにアクセスし、すべてをチェックします。 :)はい私は知っているが、それは働いた。


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

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

編集:この提案を適用する前に、セキュリティの意味を書き留めて理解する必要があります。


DefaultAppPoolで、NetworkServiceをIdentityプロパティに設定し、Sql ServerでUser Network Serviceを追加し、データベースに適切なアクセス許可を与えてください。これは私にとってはうまく機能しますが、ローカルでテストしましたが、ネットワーク内の他のコンピュータ。 IISのIdentityでLocalSystemをうまく動作させるとSql Serverに他のユーザーを作成する必要はありませんが、ネットワーク環境では動作しません。


SQL Server Profiler(SSMS => Toolsメニュー)を使用して、IISがデータベースに接続しようとしたときにNTのAUTHORITY \ IUSRという何らかの理由でIISユーザーがこの質問の回答で推奨されているすべての手順。 だから私はSQL Serverにそのユーザーを追加し、それは働いた...


SSMSの更新後に作成された特定のデータベースでこの問題に直面する可能性があります。 SSMSを開き、データベースを選択して必要なデータベースを開き、[ セキュリティ ] - > [ユーザー ] - > [ユーザー]を右クリックし、[新規ユーザー]を再度クリックして[ NT AUTHORITY \ Authenticated Users]を追加し、ウェブ/デスクトップ上のあなたのフォームは何でも構いません。 楽しい....


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

IISはセキュリティを強化するためにApp Pool Identityを導入しました。 既定のApp Pool IdentityでWebサイトを実行したり、独自の名前で新しいApp Poolを作成したり、ユーザーアカウント(通常はDomain Account)で実行される独自の名前で新しいApp Poolを作成することができます。

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

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

Visual Studioの組み込みDB(例:LocalDB)や組み込みのWebサーバーから運用環境に展開する際の課題の1つは、開発者のユーザーSIDとそのACLを安全な運用環境で使用しないことに由来します。 マイクロソフトは展開用のツールを提供しています しかし、これらのツールは、特にSysAdminやDBAdminのサポートが不足している開発者には使いにくいため、localDBとlocalWebServerの新しい簡単なVS IDEの箱の中で作業しているすべてのものに慣れている貧しい開発者には哀れみを感じる彼らの専門知識。 それにもかかわらず、Azureへの展開は、上記の企業ネットワークの状況よりも簡単です。


iis - >アプリケーションプール - >アプリケーションで使用されるアプリケーションプールを検索する

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

アプリケーションプールIDの選択

ローカルシステムとして組み込みを選択し、[OK]をクリックします。


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

User ID=xxx;Password=yyy

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

Trusted_Connection=true;

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

接続文字列に次のものがある場合も同様です。

 Integrated Security = true;

または

 Integrated Security = SSPI;

Windows認証を使用してデータベースサーバーに接続するためです。 詳細はこちら


あなたは@Teddy推奨したことを@Teddyことがありますか?あなたはまだ同じエラーを受け取りますか?

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


この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

それは質問に関連しており、場合によっては答えることができるので、これを回答として掲示すると思った。

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

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


まずウィンドウ認証を使用していて、接続文字列にユーザー名のパスワードを記述していない場合は、クリアする必要があります。

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

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

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

•IISを開きます(Windows + R(実行)した後、inetmgrと入力し、[OK]をクリックします)。•接続でPC名をダブルクリックします。•アプリケーションプールをクリックします。•アプリケーションプールを選択します(DefaultAppPool)。右側のアクションで[詳細設定]をクリックします。•[プロセスモデル]セクションに移動し、[ID]をクリックします。 •LocalSystemを選択します。

ここで、SQL Server管理スタジオを開きます:open run-> ssmsと入力し、ssmsでokを押し、Windows認証アカウントを使用してログインします。 開いているセキュリティタブの[ログインを展開]タブをクリックすると、アカウントを表示できます。

あなたのアカウントのプロパティを開き、userMappingに行き、接続するデータベースを選択して、選択したデータベースに使用するロールメンバーシップサービスを確認します。「OK」をクリックします。 (ネットワークサービス、つまりイントラネットユーザーの場合は、上記のNT AUTHORITY \ SYSTEMユーザーの設定も必要です)

add Trusted_Connection = True; 接続文字列のプロパティ。 保存してWebサービスを展開します。 アプリケーションプールを再起動します。

今すぐデータベースに接続することができます。


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


ユーザーIIS APPPOOL\ASP.NET v4.0のデータベースへのアクセス許可を与える別の方法は次のとおりです。


  1. 既定のスキーマを使用して、ユーザー名とログイン名を持つ新しいユーザーをIIS APPPOOL\ASP.NET v4.0として追加します。
  2. 所有者スキーマとメンバシップに移動し、db_datareader、db_datawriterを確認します。

指摘したように、 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"/>

エラーを修正するはずです。


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


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

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


私はIISでアプリケーションをホストしているときに同様の問題に直面しています

溶液

私はプールアイデンティティとその仕事を変えます

ApplicationPoolIdentity -> NetworkService

私は次のようなイメージをsqlを使ってこの問題を解決しました。

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


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

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