随笔 - 172  文章 - 1  评论 - 1569  阅读 - 166万

[备忘]LINQ to Entities在Trust Level = Medium中的尴尬及解决办法

    很多国外的服务器为了安全都限制了Trust Level(通常为trust="Medium"),这时候,将限制很多第三方的DLL及程序运行,和LINQ to SQL不同的是,LINQ to Entities(说到底是 Entity Framework)在查询过程中使用了 ReflectionPermission以及RestrictedMemberAccess ,这就限制了程序在trust="Medium"安全级别的应用。

    此时如果运行程序,会抛出这样的异常:SecurityException: Request for the permission of type 'System.Security.Permissions.ReflectionPermission failed

 

    解决的办法是有的(虽然有的很可笑),在这里我把所收集的确实可以“解决”这个问题的过程和方法罗列一下:

   

    1、这是我致信Godaddy.com之后得到的回复:

Unfortunately there is not a way for your hosting account to allow Full Trust while running ASP.NET 2.0/3.0/3.5. You can downgrade the ASP.NET version to 1.1 in order to use Full Trust, however this may cause problems on your site if you have scripted it to use a higher ASP.NET version. I apologize for any inconvenience this may cause.

 

     的确,把程序降到ASP.NET 1.1就不会出现这样的安全问题了(这个限制是在.NEt 2.0 Framework之后才有的)。但是降到1.1之后还怎么用Entity Framework呢?

    于是折中一下得出几个方法:

    (1)如果是SQL Server数据库,就改用LINQ to SQL;

    (2)如果是别的开源数据库(如SQLite),不妨修改源代码取消限制(有时候有点难度);

    (3)最后一招——换服务器或服务商吧(像godaddy.com不会因为一个主机而修改设置的)。

 

    2、国外有人已经写了一个扩展的方法,可以解决LINQ to Entities的这个问题:http://mosesofegypt.net/post/Entity-Framework-minimum-permission-considerations.aspx

    不过经本人测试,似乎不是很稳定可靠(我看了下他的做法按理说是可以的,也许是我配置问题,有兴趣的朋友不妨试试)。这个方法没有太大限度上改变LINQ to Entities的开发体验,只不过需要每次调用上下文的时候,很“罗嗦”地多打几行代码。

 

    3、如果你自己可以控制服务器,那么这个问题其实没有这么麻烦了,直接修改全局配置,或者允许对location allowOverride,然后在Web.config的system.web节点下加入<trust level="Full"/>就可以了。

posted on   SZW  阅读(860)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
< 2009年11月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12

点击右上角即可分享
微信分享提示