3.8 [Enterprise Library]部分信任应用程序的支持

版权所有(c) 2007Dorian Deng。署名 共享 非商用。
转载请注明出处:http://www.cnblogs.com/doriandeng/archive/2007/10/17/927878.html

使用 Enterprise Library 早期版本的应用程序需要足够的授权,所以它们能使用的安全级别只有完全信任。使用 Enterprise Library 3.1 - May 2007 ,将可以在部分信任下运行应用程序。一个普通的例子是运行在主机环境中的 ASP.NET 应用程序。典型的,这些种类的应用程序只需要运行在中等信任下的足够权限。这依赖于在应用程序中使用的 Enterprise Library 特性,可能需要授予比由默认部分信任授予的更多的权限。

概述

绝大多数通用安全机制赋予用户的权限基于他们登录的凭证(通常是密码)和受限的资源,如用户能访问的目录和文件。然而,这个方法无法解决几个问题:用户从多个源中获取代码,其中某些可能是不可信的;代码可以包含 Bug 和弱点使它可能被恶意代码利用;代码有时会做一些用户不知道它将做什么的事。

为了帮助保护计算机系统远离恶意代码,为了允许代码从未知区域以保护方式运行,为了帮助防止信任的代码有意或偶然的危及安全, .NET 框架提供了名为代码访问安全的安全机制。代码访问安全允许代码被信任为多个级别,这依赖于代码的起始点和代码的标识的其他方面。代码访问安全也强制在代码上有不同级别的信任,最小化了必须要完全信任才能运行的代码的数量。安全策略定义了信任的级别,在这有五种默认信任策略可以赋予应用程序。这些策略被命名为完全、高、中、低和最小。如果应用程序有完全安全,代码访问安全的运行将没有限制。部分信任策略实施不同的限制集,如限制应用不能访问本地磁盘和运行非托管代码。

如果应用程序需要比那些授予在默认信任级别中更多的权限,如中等信任,但又不想运行在完全信任中,就可以创建基于默认策略的定制策略并授予特定的需要的附加权限。例如,如果要运行在中等信任中,但又必须授予应用程序对用户文件系统的一个目录的只读权限,就可以创建一个基于中等信任的定制策略并仅需要对那个目录的 FileIOPermission 。正确的使用这种方法,将在给用户最少安全风险时增加应用程序的功能。

更多关于代码访问安全和部分信任的信息,请参见下列的资源:

Enterprise Library 和部分信任

使用 Enterprise Library 早期版本的应用程序必须使用完全信任运行。在 Enterprise Library 中的某些特性使用了不同的 .NET 框架的功能,如访问性能计数器和 Windows 事件日志,这需要不能在部分信任中授予的确定权限。这些权限的要求在程序集级别被创建。这意味着 .NET 框架总是不允许部分信任的代码的运行,尽管仅有少量调用和代码路径需要这些权限。

从Enterprise Library 的发布开始,许多用户想在部分信任的环境中使用 Enterprise Library 。最常见的是使用中等或定制安全信任策略的运行在主机上的 ASP.NET 2.0 环境中的应用程序。部分信任对于 Web 站点和其他多个应用程序宿主在一台服务器的环境(支持多个应用程序所有者)是很好的选择。

Enterprise Library 3.1 - May 2007 允许应用程序以部分信任运行在代码真正需要的独立权限需求下。然而,这依赖于应用程序块、提供程序和应用程序使用的特性,可能需要创建基于默认信任策略的定制策略来授予附加的权限。例如,如果有一个拥有中等信任的 ASP.NET 应用程序,但必须支持多个数据库类型,需要授予 OleDbPermission 给应用程序,而不仅是 SqlClientPermission ,它已由中等信任策略授予。

对于由在 Enterprise Library 中的不同特性需要的超出授予的中等信任的特定授权,请参见添加附加权限。

Enterprise Library 3.1 - May 2007 中的修改

为了使用部分信任策略,Enterprise Library 的当前版本与 Enterprise Library - January 2006 有以下几方面的不同:

  • 绝大多数程序集级的权限需求都会被删除,因为如果它们只有部分信任的话, .NET 框架将不允许这些程序集运行。即使权限仅在少量独立的地方需要也是这样,例如写入事件日志的度量( Instrumentation ) 调用。

  • 在确定的应用程序块特性需要附加权限的情况下,权限需求将在代码中实现 (在 Enterprise Library 代码或基本的 .NET 框架类库中) 并限制为需要这些权限的特性。

  • 在可能的地方,如果需要的权限没有授予,代码将平滑的退化而不是完全失败。例如,如果日志应用程序块不能调用提供关于当前进程信息的 API ,信息将只是简单的不记录到日志中。

依赖于在应用程序中使用了哪些 Enterprise Library 特性,可能需要授予应用程序除了那些默认由部分信任策略提供的以外的附加权限。作为一个例子,关于如何创建基于中等信任的例子,请参见How To: Use Medium Trust in ASP.NET 2.0

一个特别重要的需求就是所有应用程序块都要从配置文件中读取信息,这必须授予应用程序 ConfigurationPermission ,它没有在定制策略定义中的中等信任中默认提供。另一个选择是,可以添加 requirePermission 属性到应用程序配置文件的相应节,并设置它为 false 。下面的例子允许日志应用程序块读取配置信息。

<configuration>
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging" requirePermission="false"/>
<configSections>
<configuration>

可以在配置工具中修改 RequirePermission 的值,方法是在配置编辑器中选择顶层块节点。这个值现在由工具保存,不再像在过去的版本中一样被覆盖。

posted @ 2007-10-17 17:16  Dorian Deng  阅读(1789)  评论(1编辑  收藏  举报