在.NET Framework的第4版中, common language runtime(CLR)已经不再为计算机提供security policy了. Microsoft推荐使用Windows Software Restriction Policies作为CLR security policy的替代品. 这个话题中的信息适用于.NET Framework version 3.5和更早的版本, 它并不适用于4.0版或更靠后的版本. 要查看关于这个和其他的一些修改变化, 请参考Security Changes in the .NET Framework 4.
Common language runtime会为应用程序域和程序集计算被允许的permission set, 计算方式是为得到相关的policy level去遍历code group的层次结构. 对于应用程序域, 相关的policy level包括enterprise, machine, 和user. 对于程序集, 相关的policy level有enterprise, machine, user, 和application domain.
runtime使用下面的处理过程来计算被允许的permission set:
1. 对于每一个relevant plicy level, 运行时都会使用由evidence提供的identity信息来确定代码属于哪些groups. 如果代码是一个group的成员, 那么我们就说这个group是一个match.
搜索match的过程是从所有code group等级结构的顶部开始的. 运行时会搜索等级结构中的层次, 如果一个match在某个parentgroup被找到, 那么搜索还会包括子groups.
2. 当所有等级结构中的match都被找到并确定下来之后, 与每个match的code group相关联的permission就会被绑定到一个额外添加的manner(a union)上, 这就是该policy level所允许的permission集的结果.
如果Exclusive 或 LevelFinal 属性被应用到code group上, 运行时会有区别地计算被允许的permission set. 更多细节, 请参考Code Group Attributes.
3. 然后运行时重复进行等级结构中的搜索, 并与每一个policy level的permission set交互来为application domain或者是assembly计算被允许的permission set. 结果permission set会仅包括被所有policy level所允许的permissions.
下面的图展现了code group的等级结构, 其中Microsoft® Money 是四个code groups中的一个成员:
- All code
- Microsoft (the Publisher)
- Local Internet (the Zone)
- Microsoft Money (the Name)
对于一个给定的policy level(machine, user, 或application domain), 被允许的permission set是与这些code groups其中的任何一个相关联的命名了的permission set的附加的绑定(the union)
译自:
Computing the Allowed Permission Set
http://msdn.microsoft.com/en-us/library/kb207s5y(VS.100).aspx