ASP.NET Trust Level和Policy Files

Trust Levels通过<securityPolicy>配置元素与policy files关联起来, <securityPolicy>元素仅在站点级别的配置文件(web.config)中有效. 你可以通过在配置部分添加那种指定所使用的trust name和使用的policy file的条目来添加或者移除trust levels. 默认的trust files是被安装在包含Aspnet_isapi.dll文件目录之下的Config目录下的. 这也是Machine.config配置文件存在的地方, 还有运行时security policy文件存放的地方.

 

Full trust是一个特例. 因为它完全等同于在本机域(local machine zone)中拥有完全的trust, ASP.NET宿主病不会再这些应用程序上应用任何额外的policy. 所以, Full trust level被映射到一个internal handler上, 并且ASP.NET不会为full-trust的应用程序添加额外的policy到它们的应用程序域上.

 

下面的例子展示了一个映射trust levels到不同的policy files的配置文件的securityPolicy部分.

<system.web>
  <securityPolicy>
    <trustLevel name="Full"    policyFile="internal"/>
    <trustLevel name="High"    policyFile="web_hightrust.config"/>
    <trustLevel name="Medium"  policyFile="web_mediumtrust.config"/>
    <trustLevel name="Low"     policyFile="web_lowtrust.config"/>
    <trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
  </securityPolicy>
</system.web>

 

如果你不想要应用程序能够指定他们自己的trust level, 你可以指定一个<location>说明, 并配置allowOverride属性为false. 你可以在一个寄存了多个应用程序的服务器上这样做, 来限制其上的application的trust level.

 

修改trust-level file

================

你能够修改policy file或者创建新的policy file并在其中配置自定义的权限集. 举例, 你可以拷贝Web_hightrust.config文件的内容, 首先在policy file的SecurityClasses部分添加一个OleDbPermission类赋予权限来建立OLEDB连接, 如同下面的代码例子:

<SecurityClass Name="OleDbPermission"
    Description="System.Data.OleDb.OleDbPermission, System.Data, Version=2.0.0.0, 
    Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

 

你能够为指定的OleDbPermission类指定参数, 包括对OLEDB连接字符串的限制. 下一步, 你可以在trust-policy文件中的, 包括了OleDbPermission安全类的PermissionSet元素中, 添加一个IPermission元素, 指定名字为ASP.NET. 举例说明, 下面的代码例子指定了仅仅是被允许了的OLEDB的connection才被授予不受限的权限来访问Catalog.mdb这个Access的数据库.

<PermissionSet
  class="NamedPermissionSet"
  version="1"
  Name="ASP.Net">
  <IPermission
    class="OleDbPermission"
    version="1"
    Unrestricted="true" />
</PermissionSet>

 

有些权限, 比如说OleDbPermission这个权限, 允许你指定额外的限制信息来缩小赋予或夺取的权限的范围. 比如说, OleDbPermission权限允许你赋予权限使用OLE DB .NET Framework Data Provider来建立连接访问OLE DB, 但是限制了哪一个OLEDB的connection string可以被允许. 下面的代码例子指定了被允许的OLEDB的连接.

<IPermission class="OleDbPermission" version="1">
  <add ConnectionString=
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\access_data\catalog.mdb"
        KeyRestrictions=""data source=;user id=;password=;" 
      KeyRestrictionBehavior="AllowOnly"/>
</IPermission>

 

你可以保存你更新过的trust-policy文件, 用它代替当前的Web_hightrust.config文件, 或者创建一个新的trust-policy文件作为High trust level的policy file, 要么就用下面的代码的例子再创建一个新的trust level.

<trustLevel name="HighCustom"
    policyFile="web_highcustom.config"/>

 

为了保存默认的配置, ASP.NET包含了两套包含trust-level的配置的文件. 一份拷贝被以.config后缀名命名, 就如同早先configuration的部分那样. .config文件包含被系统使用的每一个级别的配置. 另一份拷贝使用.config.default来做后缀名, 其中包含相关trust level的默认配置. 如果当前的trust-level的配置被修改了, 而你想要恢复默认的配置, 你可以使用这一套的内容去覆盖.config文件中的内容.

 

译自:

ASP.NET Trust Levels and Policy Files

http://msdn.microsoft.com/en-us/library/wyts434y.aspx

posted on 2010-02-06 21:59  中道学友  阅读(1562)  评论(1编辑  收藏  举报

导航

技术追求准确,态度积极向上