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

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

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

現象

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

  • メッセージ 1

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

  • メッセージ 2

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

原因

System.Web名前空間には、AllowPartiallyTrustedCallersAttributeが適用されていません。 詳細については、 パターンとプラクティスを参照してください。

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

解決方法

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

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

  2. Runtime セキュリティ ポリシーを展開し、Machine を展開し、Code Groups を展開します。

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

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

  5. [ このコード グループの条件の種類を選択します 一覧で、 URL を選択します。

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

    Note

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

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

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

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

Microsoft .NET Framework 構成Administrative Tools に表示されない場合は、.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. Machine.config ファイルの<processmodel> タグで、リモート共有に対するリスト、読み取り、実行のアクセス許可を持つドメイン ユーザーにユーザーを変更します。
  4. インライン .aspx ファイルを作成し、そのファイルをリモート共有に配置します。
  5. ページに対して要求を行います。

関連情報

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