none
セキュリティ例外の解決、アセンブリへのアクセス許可の設定の仕方について RRS feed

  • 質問

  • いつもお世話になっております。
    初歩的な質問かと思われ大変恐縮ですが、何卒よろしくお願いいたします。
    レンタルサーバー(ウィンサーバーの共有サーバープラン)で発生するセキュリティ例外の解決策として、
    EntityFrameworkのアクセス許可の設定をしたいと考えておりますが

    私の調べる先の見当外れや勉強不足のため自力で解決できそうになく、お伺いさせていただきます。

    エラー内容:「System.Security.SecurityException: 型 'System.Security.Permissions.ReflectionPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' のアクセス許可の要求に失敗しました。

    発生しているエラーがReflectionPermissionについてで、

    MSDN公式のEntityFrameworkのセキュリティに関する注意事項のページ内で

    最小限のアクセス許可の1つとして

    ReflectionPermissionのRestrictedMemberAccessが挙げられていることから、
    Web.config内で信頼レベルを変更せずエラーを解消するには
    このアクセス許可を設定すれば良いのではないか、と見当をつけてみたはいいものの
    System.Security.Permissions名前空間のクラス周辺をあれこれ調べていろいろ試しても

    どれをどう使用すればアセンブリへアクセス許可を設定可能か理解できるに至りませんでした。

    なお、VisualStudio Express 2013 for Web、 .NET Framewrok 4.5を使用しており、
    解決したいセキュリティ例外のスタックトレースを以下に記載させていただきますので、
    「そもそもEntityFrameworkが関係ないよ!」などなど

    全く異なる例外解決方法に心当たりなどございましたら、是非ご教示いただけましたら幸いです。

    スタック トレース:
    [SecurityException: 型 'System.Security.Permissions.ReflectionPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' のアクセス許可の要求に失敗しました。]
       System.Delegate.DelegateConstruct(Object target, IntPtr slot) +0
       Owin.Loader.DefaultLoader..ctor(Func`3 next, Func`2 activator, IEnumerable`1 referencedAssemblies) +69
       Microsoft.Owin.Host.SystemWeb.OwinBuilder.GetAppStartup() +65
       Microsoft.Owin.Host.SystemWeb.OwinHttpModule.InitializeBlueprint() +28
       System.Threading.LazyInitializer.EnsureInitializedCore(T& target, Boolean& initialized, Object& syncLock, Func`1 valueFactory) +115
       Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init(HttpApplication context) +106
       System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +418
       System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172
       System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336
       System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296
    
    バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.0.30319.18447

    また、レンタルサーバー側のMachine.config内にて<location allowOverride="false">と設定されているようで

    Web.config内のsystem.web要素にてtrust系要素を設定しても以下のエラーが発生します。

    念のためサーバ側のサポートに問い合わせてみたのですが、共有サーバーはMachine.configの内容は変更できないため
    trustレベルを自由に変更できるVPSプランをお勧めされました・・・
    お勧めされた通りにするのが一番手っ取り早いのは確かですが、

    アセンブリのアクセス許可設定を試してからにしてみたいです。

    説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下のエラーの詳細を確認し、構成ファイルに変更を加えてください。

    パーサー エラー メッセージ: この構成セクションはこのパスでは使用できません。これはサイト管理者が、継承された構成ファイルから <location allowOverride="false"> を使用して、このセクションへのアクセスをロックしたときに発生します。

    ソース エラー:

    行 15:   <location allowOverride="true" />
    行 16:   <system.web>
    行 17:     <fullTrustAssemblies>
    行 18:       <add assemblyName="entityFramework" version="6.0.0.0"
    行 19:         publicKey="b77a5c561934e089" />

    • 編集済み yufia 2014年5月26日 12:44 改行
    2014年5月26日 12:42

回答

  • レンタルサーバーのトラストレベルが何だか分かりませんが・・・

    例えば、もし、質問者さんがトラストレベル FULL でなければ実行できないことをやろうとしていて、レンタルサーバーのトラストレベルが MEDIUM とかですと、どうしようもないと言うことは理解されているでしょうか?

    • 回答としてマーク yufia 2014年5月27日 11:44
    2014年5月26日 13:32
  • 開発環境で試してないのでしょうか? たとえば MEDIUM の場合、web.config に以下のような設定をすれば試せるはずです。

    <system.web>
        <trust level="Medium"/>
    </system.web>

    • 回答としてマーク yufia 2014年5月27日 11:44
    2014年5月26日 14:37

すべての返信

  • レンタルサーバーのトラストレベルが何だか分かりませんが・・・

    例えば、もし、質問者さんがトラストレベル FULL でなければ実行できないことをやろうとしていて、レンタルサーバーのトラストレベルが MEDIUM とかですと、どうしようもないと言うことは理解されているでしょうか?

    • 回答としてマーク yufia 2014年5月27日 11:44
    2014年5月26日 13:32
  • SurferOnWww様

    早速のご返信ありがとうございました。

    やはり、使用したいアセンブリ自体にサーバー側で対応できないという可能性の方が高いでしょうか・・・

    質問を投稿後にレンタルサーバーのサポートへ、

    同じプランの利用者で、ReflectionPermissionのアクセス許可を必要とするEntityFramework.dllの他に

    Site.Mastarで使用しているMicrosoft.AspNet.Identity.Core.dllと

    Microsoft.AspNet.Identity.EntityFramework.dllを

    同じセキュリティ例外が発生せず使用できている人はいるか、問い合わせのメールを送ってみました。

    ご指摘いただいてトラストレベルの詳細を確認してきましたところ、

    Mediumに「ネットワークまたは Web サービスの呼び出し」の制限が含まれていたので

    仮にMedium設定だった場合は上記dllやOwin、OAuthとかも制限対象っぽいですね。

    同じプランで上記dllを使ってる人がいないとなると、

    現在使用しているプランのレンタルサーバーでは作りたいものが作れないので

    大人しく提案されたプランを検討しようかと思います・・・

    明日サポートの返答が着次第、ご報告させていただきます。

    2014年5月26日 14:30
  • 開発環境で試してないのでしょうか? たとえば MEDIUM の場合、web.config に以下のような設定をすれば試せるはずです。

    <system.web>
        <trust level="Medium"/>
    </system.web>

    • 回答としてマーク yufia 2014年5月27日 11:44
    2014年5月26日 14:37
  • SurferOnWww様

    仰っていただいたとおり、自分で設定して試した方が早かったですね(´・ω・`)

    トラストレベルを設定してビルドしたところ、全く同じエラーが発生いたしました・・・レンタルサーバーのサポートからも返答があり、私の使いたい認証周りのアセンブリは現在使用中のプランでは一切使用事例がないとのことでした。まず間違いなく、使用不可ってことですね。

    この度は迅速、丁寧にご返答いただきありがとうございました。またお世話になる機会がございました際には、どうぞよろしくお願いいたします。

    2014年5月27日 11:43