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