仮想ディレクトリが ASP.NET のリモート共有を指している場合の System.Security.SecurityException

この記事は、リモート共有を指す System.Security.SecurityException 仮想ディレクトリを使用して Microsoft ASP をホストするときにスローされる可能性のある問題を解決するのに役立ちます。NET ベースのアプリケーション。

元の製品バージョン: ASP.NET
元の KB 番号: 320268

現象

ASP をホストするためにリモート共有を指す仮想ディレクトリを使用する場合。NET ベースのアプリケーションでは、次のいずれかの例のようなエラー メッセージが表示される場合があります。

  • メッセージ 1

    セキュリティ例外の説明: アプリケーションは、セキュリティ ポリシーで許可されていない操作を実行しようとしました。 このアプリケーションに必要なアクセス許可を付与するには、システム管理者に問い合わせるか、構成ファイルでアプリケーションの信頼レベルを変更してください。
    例外の詳細: System.Security.SecurityException: セキュリティ エラー。
    ソース エラー:
    行 30: プライベート静的 bool __intialized = false;行 31: 行 32: public Global_asax() { Line 33: if ((ASP.Global_asax.__intialized == false)) { Line 34: ASP.Global_asax.__intialized = true;

  • メッセージ 2

    /ApplicationName アプリケーションのサーバー エラー。
    パーサー エラーの説明: この要求を処理するために必要なリソースの解析中にエラーが発生しました。 次の特定の解析エラーの詳細を確認し、ソース ファイルを適切に変更してください。
    パーサー エラー メッセージ: ApplicationName.Global 型を読み込めませんでした。
    ソース エラー: 行 1: <%@ Application Codebehind="Global.asax.cs" Inherits="ApplicationName.Global" %> Source File: Path of Application\global.asax Line: 1

原因

名前空間には System.WebAllowPartiallyTrustedCallersAttribute 適用されていません。 詳細については、 パターン & プラクティスに関するページを参照してください

この属性を持たない My_Computer_Zone コード グループに含まれていないコードには、 FullTrust ユーザー権限が必要です。 そのため、Web アプリケーションのコンテンツを保持するリモート共有には FullTrust が必要です。

解決方法

この動作を解決するには、 FullTrust 権限をリモート共有に付与します。

  1. Web サーバーで [管理ツール] を開き、[Microsoft .NET Framework構成] をダブルクリックします。

  2. [ ランタイム セキュリティ ポリシー] を展開し、[ コンピューター] を展開し、[ コード グループ] を展開します。

  3. All_Codeを右クリックし、[新規] を選択します。

  4. [ 新しいコード グループを作成する] を選択します。 コード グループに関連する名前 (アプリケーション共有の名前など) を指定します。 [次へ] を選択します。

  5. [ このコード グループの条件の種類を選択する ] ボックスの一覧で、[URL] を選択 します

  6. [ URL ] ボックスに、共有のパスを次の形式で入力します。
    file:////\\computername\\sharename\*

    注:

    computername を、リモート共有をホストしているコンピューターの名前に置き換えます。 sharename を共有の名前に置き換えます。

  7. [次へ] を選択します。 次のページで、[ 既存のアクセス許可セットを使用する] を選択し、[ FullTrust] を選択します。

  8. [ 次へ] を選択し、[完了] を選択 します

  9. インターネット インフォメーション サービス (IIS) を再起動して、ASP.NET ワーカー プロセスを再起動します。

[管理ツール] に Microsoft .NET Framework構成が表示されない場合は、.NET Framework ソフトウェア開発キット (SDK) をインストールして、Microsoft .NET Framework 構成を追加できます。 代わりに、次のコマンドを実行して変更を行うことができます。

Drive :\WINDOWS\Microsoft.NET\Framework\v2.0.50727\caspol.exe -m -ag 1 -url "file:////\\computername\sharename\*" FullTrust -exclusive on

これらの引数の動作の詳細については、次のコマンドを実行します。

caspol.exe -?

状態

この動作は仕様です。

詳細

この構成では、ASP.NET ワーカー プロセスを実行するアカウントに、リモート共有に対する十分な権限が必要です。 Machine.config ファイルの タグを使用して、ワーカー プロセスを<processmodel>実行するアカウントを設定できます。

動作の再現手順

  1. リモート共有を指す新しい仮想ディレクトリを作成します。
  2. 仮想ディレクトリのアプリケーションを作成します。 共有に接続するユーザーがリモート コンテンツへの読み取りアクセス権を持っていることを確認します。
  3. <processmodel>Machine.config ファイルのタグで、リモート共有に対するリスト、読み取り、実行のアクセス許可を持つドメイン ユーザーにユーザーを変更します。
  4. インライン .aspx ファイルを作成し、そのファイルをリモート共有に配置します。
  5. ページの要求を行います。

関連情報

ASPNET アカウントがアプリケーションを実行するために必要なアクセス許可 ASP.NET 詳細については、「 ASP.NET ID の概要」を参照してください。 ASP.NET セキュリティの詳細については、「 INFO: ASP.NET セキュリティの概要」を参照してください。