2012年6月23日星期六

代码组(3) 属性

代码组(3) 属性

代码组(3) 属性

代码组可以具有一些属性,这些属性可影响公共语言运行库确定程序集允许的权限集的方式。可应用到代码组的属性有两种:Exclusive和LevelFinal。

Exclusive属性,策略级别允许的权限集是与具有此属性的代码组关联的权限集。在考虑所有策略级别时,运行库向代码授予的权限绝对不会多于与Exclusive代码组关联的权限。在给定的策略级别内,代码只能是具有Exclusive属性的一个代码组的成员。在运行库计算独占代码组中的程序集的权限时,该属性会防止考虑同一策略级别中的其他代码组。但仍会计算当前级别之下和之下的策略级别。该属性允许一个特定代码组为当前策略级别针对向与该组匹配的程序集授予什么权限的问题做出唯一决定。这在需要向特定程序集授予特定权限集而不允许来自同一策略级别上的其他代码组匹配项的权限时很有用。

注意:如果一个程序集属于多个标记为独占的代码组,则不允许执行该程序集。

LevelFinal属性,在检查代码组成员和授予权限时,不会考虑包含此代码组的策略级别以下的、应用程序域级别之外的其他任何策略级别。企业级策略是策略的最高级别,接着是计算机策略、用户策略,然后是应用程序域策略。例如,如果LevelFinal属性应用到企业级策略中的代码组,且某代码与此代码组的成员条件匹配,那么,计算机级别策略和用户级别策略不会应用到该代码。应用 LevelFinal属性可以保证,与标有该属性的代码组关联的程序集绝对不会因为较低策略级别管理员做出的决定而收到较少的权限。

可以用.NET Framework配置工具或者是代码访问安全策略工具针对代码组开启或关闭Exclusive(或LevelFinal)属性。开启代码组Exclusive属性的方法如下:

caspol -chggroup 1.2.1. -exclusive on

其中,使用chggroup命令更改标签为1.2.1的代码组,把Exclusive属性设置为开状态。

---------------------注:本文部分内容改变自《.NET 安全揭秘》


TAG: