17

作業中のASP.NETMVCアプリケーションがあります。私はIIS6とSQL2008Expressを搭載したWindowsServer2003で開発してきましたが、すべてがうまく機能していました。最近、Windows 7ベータ版を試してみることにしました。そのため、現在IIS7を使用していますが、データベースへの接続に問題があり、理解できないようです。

アプリを正常に実行/デバッグできますが、データベースにアクセスする必要のあるページにアクセスしようとすると、次のエラーが発生します。

ログインによって要求されたデータベース「MyDatabaseName」を開くことができません。ログインに失敗しました。ユーザー「IISAPPPOOL\MyApplicationName」のログインに失敗しました。」

明らかにセキュリティ構成の設定が間違っていますが、正しく設定する方法についての適切なドキュメントが見つからないようです。データベースにNETWORKSERVICE権限を付与しようとしましたが、うまくいかなかったようです。このデータベースに「IISAPPPOOL\MyApplicationName」アクセス許可を与えるために私が何をする必要があるか知っている人はいますか?明らかな何かが欠けていますか?

ありがとう...

4

16 に答える 16

31

Active Directory を使用していない場合は、ここに記載されている他の解決策をすべて無視してください。混乱はApplicationPoolIdentity、IIS 7.5+ の新しい設定のデフォルトに起因します (MS は ID メカニズムを変更し続けています)。

  1. SQL Management Studioを開き、管理者としてローカル マシンに接続します。
  2. セキュリティブランチを展開します。
  3. [ログイン] を右クリックし、[新しいログイン]を選択します
  4. [ログイン名]フィールドに「IIS APPPOOL\MyApplicationName」と入力します。検索ボタンをクリックしないでください。ユーザー プロファイルは実際にはローカル マシンには存在せず、オンデマンドで動的に作成されます。

それを見ている間、ユーザーをデータベースまたはサーバーの役割に追加することを忘れないでください。

于 2009-10-19T16:17:08.303 に答える
6

このエラーは、Web アプリケーションがデータベースにアクセスできないことを意味します。Windows 7 / IIS 7 では、既定で各アプリケーション プールに独自のユーザーがいます。そのWebアプリケーションができることを制限することでセキュリティを向上させるという考えのようです(外部から侵害され制御された場合に備えて)。アプリケーション プールを実行しているユーザーを変更することはできますが、それでは本来の目的が果たせなくなります。より良い方法は、プールのユーザーに必要なアクセス許可を与えることです (それ以上ではありません)。

SQL Management Studio で、Web アプリを接続するサーバーに接続します (SQL サーバー 2008 でテスト済み)。に行く

Security -> Log ins

右クリックして、新規ログインします。表示されるフォームで、ユーザー名以外はすべてデフォルトのままにします。ここでは、Web アプリが使用しようとしているユーザー名を入力する必要があります。この場合は「IIS APPPOOL\MyApplicationName」です。そのダイアログの検索機能は、そのユーザーを見つけたり、有効であるかどうかを確認したりできませんが、それでも機能することに注意してください。

サーバーに接続された SQL Management Studio で、次の場所に移動します。

Databases -> *YOUR-DATABASE* -> Security -> Users

右クリックして新しいユーザー。そこにあるユーザー名フィールドが効果があるかどうかはわかりません。MyApplicationName のように、ユーザー名の最後の部分に設定しただけです。次に、ログイン名を IIS APPPOOL\MyApplicationName に設定しました。... ボタンをクリックして、チェックと検索を使用できます。今回は機能します。前の手順を実行しない場合、ユーザーはここに表示されません。次に、db_datareader など、このユーザーに必要な権限を付与します。

それだけです。あなたは許可を与えました。権限の欠如が問題である場合は、解決する必要があります (少なくとも、私はその方法で解決しました)。

私は、IIS で合計 2 時間、SQL Server で約 3 週間、Microsoft テクノロジで 2 か月未満の経験を持っているので、私のアドバイスを鵜呑みにしないでください。私は完全に間違っている可能性があります。(別の人がこれらの手順が正しいことを確認できる場合は、最後の警告を自由に削除してください)。

于 2009-06-23T10:34:17.313 に答える
2

Erick Falsken は正しいですが、ユーザー マッピングがありません。新しい IIS APPPOOL/DefaultAppPool を右クリックし、[プロパティ] をクリックして、次のチェックボックスをオンにします。1) データベース master と yourdatabase 2) db_owner と public

于 2012-11-27T00:41:44.057 に答える
1

このエラーは通常、サイトを実行しているユーザー(または、より多くの場合、アプリケーションプール)にDBを使用するためのアクセス許可がないことを意味します。プールが実行されているユーザーをIISでチェックインしてアクセス許可を与えるか、SQL接続文字列を変更して信頼できる認証を使用しないようにし、接続文字列にアクセス許可を持つユーザーの資格情報を指定することができます。

編集:プールIDセクションを右クリックしてプロパティに移動すると、3つの組み込みシステムアカウントから選択するか、独自のアカウントを指定できるボックスが表示されます。組み込みアカウントの1つにDBのアクセス許可を与えるか、アクセス許可のあるアカウントを使用してください。または、そのままにして接続文字列を変更します。

于 2009-01-18T02:24:41.597 に答える
1

最初のステップは、Web サイトがどのアカウントで実行されているかを確認することです。以下を使用して簡単な aspx ページを作成します。

<%@ Page Language="C#" %>
<% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>

Windows 認証を使用している場合、WindowsIdentity アカウントは SQL Server にログインする必要があります。[セキュリティ] -> [ログイン] -> [新規ログイン] の下で、WindowsIdentity によって表示された名前を追加し、Windows 認証が選択されていることを確認します。

データベースを別のマシンに移動する場合は、ドメイン アカウントを作成し、web.config で偽装を使用する必要があります。<identity impersonate="true">詳細については、Google 。

于 2009-01-18T17:17:07.513 に答える
1

さて... ApplicationPoolIdentity プロパティを変更して NETWORK SERVICE に設定すると、問題が解決したようです。それが「正しい」方法であるかどうかはわかりませんが(IIS7でそれが推奨される方法であるかどうかはわかりません)、少なくとも機能しているようで、私を乗り越えました今のところこのハングアップ。ありがとう。

于 2009-01-18T04:51:08.947 に答える
1

難しい問題は他の人に任せてください -

SQL ユーザーを作成し、SQL Auth を使用します。:D

于 2009-01-19T08:41:19.987 に答える
1

フェルナンデス氏のアドバイスに従えば、すべてうまくいくでしょう。これは、サイトに最小限の権限を与える新しい方法です。

したがって、簡単で安全性の低いこと (NETWORK SERVICE) は行わないでください。正しいことをします。スクロールアップする。;)

于 2009-10-02T03:04:13.613 に答える
1

Windows 認証モードでの信頼できる接続の使用: OS: Windows 7 32 ビット IIS 7、Sql Server 2008 R2 Express 接続文字列: cn.open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test ;データ ソース = mycomputername\sqlexpress;" (インスタンス名が sqlexpress または使用したインスタンス名の場合)

Windows モードの認証済み接続を使用して SQL Server 2008 に接続できない場合。

NT AUTHORITY\IUSR アカウントには、SQL Server でデータベースとの接続を承認する権限がない可能性があります。

Windows 認証モードを使用して SQL サーバーに接続します。セキュリティ ノードを展開します。NT AUTHORITY\IUSR を選択します (存在しない場合は、新しいログインを追加します)。[ログイン プロパティ] ウィンドウの [ページの選択] の下にある [ユーザー マッピング] をクリックします。接続しようとしているデータベースを選択します。「次のデータベース ロール メンバーシップの権限」から次のアクセス許可を選択します: 1. db_datareader 'これにより、接続を開くことができます

于 2011-09-27T13:48:46.993 に答える
1

アプリケーションが実行されているユーザーにアクセス許可を与えるという考えに精通しています...私の問題は、IIS7では、「ユーザー」が仮想またはそのような奇妙なものであるように見えることです。アプリケーション プール プロパティの "Identity" プロパティを NETWORK SERVICE に変更する前は、"ApplicationPoolIdentity" に設定されていましたが、"IIS APPPOOL\MyApplicationName" がデータベースにアクセスできないというエラーが表示されました。「IIS APPPOOL\MyApplicationName」ユーザーをデータベースに追加しようとしたところ、存在しないように見えました... とにかく見つけられませんでした。

したがって、私の最終的な問題は、IIS7 セキュリティ モデルがどのように機能するかについての適切なドキュメントを理解していないか、見つけることができないことです。アプリケーションを作成すると、このアプリケーションのためだけに同じ名前の AppPool が作成されたようです。AppPool を実行するユーザーが実際には存在しないように見えるという事実を考えると、アプリケーションやアプリケーションが実行するユーザーにデータベースへの特権を与えるためにどのような変更を加える必要があるか正確にはわかりません。

前述したように、AppPool の ID を NETWORK SERVICE に変更することは今のところうまくいっているようですが、IIS7 でこの種のことを行う場合のベスト プラクティスを見つけようとしています。ありがとう。

于 2009-01-18T20:26:00.643 に答える
0

私はまったく同じ問題を抱えています。私はWindows7RCを実行しています。.mdfファイル(App_Dataにあります)を使用しようとしているとき、それを機能させる方法があります。LocalSystemのAppPoolのIDを変更しようとしましたが、機能しません。

「標準」データベースを使用する場合、LocalSystemを使用していれば機能しますが、有名な「IIS APPPOOL\DefaultAppPool」では機能しません。

その件に関する情報が見つからないのは少し気がかりです。あらゆる種類のデータベースを使用している場合、「IIS APPPOOL\DefaultAppPool」ユーザーはまったく役に立たないようです...

私はそれを実行していますが、ryexleyが述べているように、セキュリティモデルを理解していないことにも少し不満を感じています。

于 2009-05-25T18:02:51.570 に答える
0

はい、アプリプールのIDメソッドは、彼らが言うように機能しません(とにかくIIS7ではそうではありません)。MS には、このセキュリティを意図的に複雑にするハッカーがいると思います。そのため、抵抗が最も少なく、システムの安全性が低くなります (後でハッキングされる可能性があります)。-冗談ですが、実際には、彼らのセキュリティモデルは純粋な狂気であり、MSDNのどこにも簡単な(段階的な)指示はありません-nada、zip!

于 2012-06-14T02:52:48.753 に答える
0

フィールドの説明を見ると、「Network Services」アカウントで実行することが推奨されるアカウントであることが示されています。Win7 で ApplicationPoolIdentity 設定がデフォルトになっている理由がわかりません。

于 2009-01-31T23:28:05.090 に答える
0

(スタンドアロンのWin-server2003サーバーにインストールされたSQL2008)と(スタンドアロンのWin-server2003サーバーにインストールされたASP.NET3.5を備えたIIS6)の間で同じ問題に直面しました。

ここで、IIS はドメイン「ドメイン\ユーザー名」のユーザーを使用して SQL2008 にアクセスしようとします。

接続文字列から次のオプションを削除しましたが、すべてが正常に機能するようになりました。

Integrated Security=True;
于 2010-12-07T07:07:41.807 に答える