193

ASP.NET アプリを Server 2003 (および IIS6) から Server 2008 (IIS7) に移植しようとしています。

ブラウザでページにアクセスしようとすると、次のようになります。

「/」アプリケーションでサーバー エラーが発生しました。

セキュリティ例外

説明: アプリケーションは、セキュリティ ポリシーで許可されていない操作を実行しようとしました。このアプリケーションに必要な権限を付与するには、システム管理者に連絡するか、構成ファイルでアプリケーションの信頼レベルを変更してください。

例外の詳細: System.Security.SecurityException: ソースが見つかりませんでしたが、一部またはすべてのイベント ログを検索できませんでした。アクセスできないログ: セキュリティ

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[SecurityException: ソースが見つかりませんでしたが、一部またはすべてのイベント ログを検索できませんでした。アクセスできないログ: セキュリティ]

System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly) +562 System.Diagnostics.EventLog.SourceExists(String source, String machineName) +251

[をちょきちょきと切る]

これらは、それを解決するために私が行ったことです:

  1. キーに「全員」のフル アクセス許可を付与しますHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security。これはうまくいきました。しかし、当然、本番環境ではこれを行うことはできません。そのため、アプリを数分間実行した後、「Everyone」権限を削除すると、エラーが再発しました。

  2. 昇格されたアクセス許可でのインストール中に、アプリケーション ログとセキュリティ ログにソースを作成しました (そして、regedit を介してソースが存在することを確認しました) が、エラーは残りました。

  3. web.config私はファイルで(そしてを使用して)アプリに完全な信頼レベルを与えましたappcmd.exeが、役に立ちませんでした。

ここで何ができるかについての洞察を持っている人はいますか?

PS: これはこの質問のフォローアップです。与えられた答えに従いましたが、役に立ちませんでした(上記の#2を参照)。

4

23 に答える 23

172

Network Serviceキーの読み取り許可を与えるにはEventLog/Security(Firenzi と royrules22 によって提案されているように)、http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx の指示に従います。

  1. レジストリ エディターを開きます。
    1. Start次に選択Run
    2. 入力regedt32またはregedit
  2. 次のキーに移動/展開します。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security

  3. このエントリを右クリックして、[アクセス許可] を選択します。

  4. Network Serviceユーザーを追加する

  5. 読み取り許可を与える

更新:上記の手順は、展開プロセスを使用してアプリケーションをインストールしない開発者のマシンでは問題ありません。
ただし、アプリケーションを他のマシンにデプロイする場合は、 SailAvidNicole Calinoiu の回答で提案されているように、インストール中にイベント ログ ソースを登録することを検討してください。

PowerShell 関数を使用しています (Octopus Deploy.ps1 で呼び出します)

function Create-EventSources() {
    $eventSources = @("MySource1","MySource2" )
    foreach ($source in $eventSources) {
            if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
                [System.Diagnostics.EventLog]::CreateEventSource($source, "Application")
            }
    }
}
于 2010-06-29T06:13:52.267 に答える
61

問題は、 が管理者のみに許可されているキーにEventLog.SourceExistsアクセスしようとすることです。EventLog\Security

C# プログラムがログインする一般的な例EventLogは次のとおりです。

string sSource;
string sLog;
string sEvent;

sSource = "dotNET Sample App";
sLog = "Application";
sEvent = "Sample Event";

if (!EventLog.SourceExists(sSource))
    EventLog.CreateEventSource(sSource, sLog);

EventLog.WriteEntry(sSource, sEvent);
EventLog.WriteEntry(sSource, sEvent, EventLogEntryType.Warning, 234);

EventLog\Applicationただし、プログラムに管理者権限がなく、 asの下にキーが見つからない場合、次の行は失敗し、EventLog.SourceExistsアクセスしようとしますEventLog\Security

if (!EventLog.SourceExists(sSource))
    EventLog.CreateEventSource(sSource, sLog);

したがって、推奨される方法は、対応するキーを作成するインストール スクリプトを作成することです。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\dotNET サンプル アプリ

次に、これらの 2 行を削除できます。

.regレジストリ キーを作成するファイルを作成することもできます。次のテキストをファイルに保存するだけですcreate.reg

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\dotNET Sample App]
于 2013-02-23T17:44:21.807 に答える
7

この例外は、スケジュールされたタスクとして実行されている.NETコンソールアプリから発生していました。基本的に同じことを実行しようとしていました。新しいイベントソースを作成し、イベントログに書き込みます。

結局、次のキーでタスクを実行しているユーザーに完全なアクセス許可を設定することで、私はうまくいきました。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Security
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog
于 2011-09-21T15:26:59.850 に答える
7

私にとっては、「NetworkService」の「読み取り」権限を「EventLog」ブランチ全体に付与するだけでうまくいきました。

于 2009-12-03T12:22:16.827 に答える
7

VS2010 で開発したコンソール プログラム (XP で VS2008 からアップグレード) で非常によく似た問題が発生しました。私のプログラムでは、EnLib を使用してログを記録しています。EntLib に新しいイベント ソースを登録する権限がなかったため、エラーが発生しました。

そのため、コンパイルしたプログラムを管理者として開始しました。イベントソースが登録されました。その後、問題なくVS内から開発とデバッグに戻りました。

( http://www.blackwasp.co.uk/EventLog_3.aspxも参照してください。

于 2011-10-18T17:02:08.127 に答える
7

この問題を解決するために、ここでほとんどすべてを試します...私に役立つ答えをここで共有します:

問題を解決する別の方法:

  • IIS コンソールで、サイトを管理しているアプリケーション プールに移動し、それを実行している ID (通常はネットワーク サービス) をメモします。
  • この ID が KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog を読み取れることを確認してください (右クリック、承認)
  • このアプリケーション プールの ID を Local System に変更し、適用して、Network Service に戻します。

資格情報が再ロードされ、EventLog に到達可能になります

http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspxで、Michael Freidgeim に感謝します

于 2012-01-30T16:41:54.740 に答える
5

System.Diagnostics.EventLog.WriteEntry("SourceName", "ErrorMessage", EventLogEntryType.Error);を使用する場合、regEdit の HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application の下に、使用されるソース名を持つ新しいキーを作成する必要があります。

したがって、基本的にユーザーにはキーを作成する権限がありません。アプリケーション プールの詳細設定の ID 値から、使用しているユーザーに応じて、次のことができます。

  1. RegEdit を実行し、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlogに移動します。
  2. EventLog キーを右クリックし、[Permissions...] オプションを選択します。 3. フル コントロール アクセス権を持つユーザーを追加します。

    - 「NetworkService」を使用している場合は、NETWORK SERVICE ユーザーを追加します

    - 「ApplicationPoolIdentity」を使用している場合は、IIS APPPOL{アプリ プールの名前} を追加します (ユーザーを検索するときにローカル マシンの場所を使用します)。

    - 「LocalSystem」を使用している場合は、ユーザーが管理者権限を持っていることを確認してください。脆弱性にはお勧めできません。

  3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Security に対して、手順 1 から 3 を繰り返します。

Visual Studio でのデバッグには "NetworkService" (ASP.NET ユーザー) を使用し、サイトの公開時には "AppicationPoolIdentity" を使用しました。

于 2016-03-28T18:25:19.143 に答える
4

私は同じ問題に遭遇しましたが、セキュリティに行くのではなく、1 レベル上に移動して、全員に HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\ キーへのフル アクセスを許可する必要がありました。

于 2011-05-25T21:14:35.220 に答える
4

Windows 7 64 ビットでも同じ問題が発生します。管理者として実行すると問題が解決しました。

于 2011-06-08T15:40:00.027 に答える
4

少なくとも、独自のイベント ソースを作成するために管理者権限を取得することが実際的でない場合、私はまだ大きな欠点を見ていないという、これに対する明白な解決策があるようです: 既に存在するものを使用します。

私が使い始めたのは「.Net ランタイム」と「アプリケーション エラー」の 2 つで、どちらもほとんどのマシンに存在するようです。

主な欠点は、そのイベントでグループ化できないことと、関連付けられたイベント ID がない可能性が高いことです。つまり、ログ エントリには、「ソース .Net からのイベント ID 0 の説明Runtime cannot be found....」と表示されますが、省略した場合でもログが記録され、出力は広く意味のあるものに見えます。

結果のコードは次のようになります。

EventLog.WriteEntry(
    ".Net Runtime", 
    "Some message text here, maybe an exception you want to log",
    EventLogEntryType.Error
    );

もちろん、何らかの理由でこれらのイベント ソースを持たないマシンを使用している可能性は常にあるため、try {} catch{}失敗して事態が悪化した場合に備えてラップすることをお勧めしますが、イベントは保存可能になりました。

于 2017-04-19T17:10:51.403 に答える
3

参考までに...私の問題は、「Local System」ではなく、ProcessInstallerのプロパティのアカウントとして誤って「Local Service」を選択したことでした。ローカル サービスの選択が最初に表示されるので、MSDN チュートリアルに従った他の誰かに言及するだけで、私は細心の注意を払っていませんでした....

于 2012-02-08T21:54:23.013 に答える
2

こんにちは私はアプリケーションを開発しているときに同じ問題に遭遇し、それをリモートPCにインストールしたかったので、次のようにして修正しました。

1)レジストリに移動し、HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application(??? YOUR_SERVICE_OR_APP_NAME ???)を見つけます。

「(??? YOUR_SERVICE_OR_APP_NAME ???)」は、.NETデプロイメントを作成したときに定義したアプリケーションサービス名であることに注意してください。たとえば、新しいアプリケーションに「My new App」という名前を付けた場合、キーは次のようになります。 HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application \ My New app

注2:書き込みを行うeventLogに応じて、DEVボックス、\ Application \(上記のとおり)、またはアプリケーションが書き込みを行っているイベントに応じて(\ System)または(\ Security)が表示される場合があります。 、(\ Application)は常に問題ないはずです。

2)メニューから、上のキーにいる; 「ファイル」→「エクスポート」を選択し、ファイルを保存します。(注:これにより、アプリケーションがイベントビューアに書き込むためにこのキーにアクセスする必要がある場合に、必要なレジストリ設定が作成されます)、新しいファイルは.REGファイルになります。議論のために、「MyNewApp.REG」と呼びます。 「」

3)PRODuctionにデプロイする場合は、サーバーのシステム管理者(SA)に相談し、アプリケーションと一緒に「My New App.REG」ファイルを渡し、SAにこのREGファイルをインストールするように依頼します。アプリケーションのキーを作成します。

4)アプリケーションを実行します。このキー以外にアクセスする必要はありません。

問題は今までに解決されているはずです。

原因:

EventLogに何かを書き込むアプリケーションを開発する場合、このキーが見つからない場合は、Eventlogレジストリの下にそのキーが必要になり、作成しようとしますが、そのための権限がないために失敗します。上記のプロセスは、アプリケーションを(手動で)デプロイするのと似ていますが、これは自分で作成します。本番サーバーのセキュリティリスクであるすべてのユーザーにアクセス許可を追加してレジストリを調整する必要がないため、頭痛の種はありません。

これが問題の解決に役立つことを願っています。

于 2011-10-04T05:59:39.230 に答える
2

インストーラーの答えは良い答えですが、あなたが書いたのではないソフトウェアを扱う場合、必ずしも実用的ではありません。簡単な答えは、PowerShell コマンドNew-EventLog ( http://technet.microsoft.com/en-us/library/hh849768.aspx )を使用して、ログとイベント ソースを作成することです。

PowerShell を管理者として実行し、必要なログ名とソースを変更して次のコマンドを実行します。

New-EventLog -LogName Application -Source TFSAggregator

Aggregator がcodeplex から問題を実行するときの Event Log Exceptionを解決するために使用しました。

于 2014-12-12T23:23:29.423 に答える
2

私は IIS で作業していませんが、2K8 ボックスで同じエラーをスローするアプリケーションがあります。2K3ボックスで問題なく動作します。

私の解決策は、「管理者として実行」してアプリケーションに昇格された権限を与えることで、すべてがうまく機能しました。これがあなたを正しい方向に導くのに役立つことを願っています。

Windows 2008 は、権利/アクセス許可/昇格が Windows 2003 とはまったく異なります。

于 2009-08-20T17:10:42.833 に答える
1

すべての2008サーバーで同様の問題が発生しました。グループAuthenticatedUsersを取得し、キーからアクセス許可を読み取るGPOが原因で、セキュリティログが完全に機能しなくなりましたHKLM\System\CurrentControlSet\Services\EventLog\security

これをMicrosoftの推奨に従って元に戻すと、問題が修正されました。認証されたすべてのユーザーに高いレベルで読み取らせることで、問題が修正されると思います。

于 2011-11-10T23:31:46.777 に答える
1

解決策は非常に簡単です - Visual Studio アプリケーションを管理者モードで実行してください!

于 2013-08-26T05:18:44.923 に答える
1

同様の問題が発生しました-私の場合、ソースには<>文字が含まれていました。64ビットマシンは新しい偶数ログを使用しています-xmlベースと言い、これらの文字(文字列から設定)は無効なxmlを作成し、例外を引き起こします。おそらく、これは Microsoft の問題と考えるべきです - ソース (名前/文字列) を正しく処理していません。

于 2011-04-19T14:51:48.600 に答える
-1

VS内でアプリを実行しているときにこの問題が発生しました。私がしなければならなかったのは、管理者としてプログラムを一度実行することだけでした。そうすれば、VS内から実行できました。

管理者として実行するには、Windowsエクスプローラーでデバッグフォルダーに移動するだけです。プログラムを右クリックし、[管理者として実行]を選択します。

于 2011-12-13T15:08:57.923 に答える
-3

ソリューションの再構築は私のために働いた

于 2011-12-09T11:24:39.707 に答える