トップ回答者
セキュリティ例外の解決、アセンブリへのアクセス許可の設定の仕方について

質問
-
いつもお世話になっております。初歩的な質問かと思われ大変恐縮ですが、何卒よろしくお願いいたします。レンタルサーバー(ウィンサーバーの共有サーバープラン)で発生するセキュリティ例外の解決策として、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 改行
回答
すべての返信
-
SurferOnWww様
早速のご返信ありがとうございました。
やはり、使用したいアセンブリ自体にサーバー側で対応できないという可能性の方が高いでしょうか・・・
質問を投稿後にレンタルサーバーのサポートへ、
同じプランの利用者で、ReflectionPermissionのアクセス許可を必要とするEntityFramework.dllの他に
Site.Mastarで使用しているMicrosoft.AspNet.Identity.Core.dllと
Microsoft.AspNet.Identity.EntityFramework.dllを
同じセキュリティ例外が発生せず使用できている人はいるか、問い合わせのメールを送ってみました。
ご指摘いただいてトラストレベルの詳細を確認してきましたところ、
Mediumに「ネットワークまたは Web サービスの呼び出し」の制限が含まれていたので
仮にMedium設定だった場合は上記dllやOwin、OAuthとかも制限対象っぽいですね。
同じプランで上記dllを使ってる人がいないとなると、
現在使用しているプランのレンタルサーバーでは作りたいものが作れないので
大人しく提案されたプランを検討しようかと思います・・・
明日サポートの返答が着次第、ご報告させていただきます。