当公共语言运行库(CLR)确定了你的代码要拥有的权限后,它会查询4个策略级别来计算一个允许的权限集。这4个策略级别是企业、计算机、用户以及由宿主应用程序配置的可选应用程序域。在每个级别,新权限都会与现有权限相交。结果是,只有全部策略级别都允许的权限才会被授予。
开发者也可在其代码中加入声明性和强制性安全要求,通知CLR它需要特定的权限。虽然不一定非要专门请求权限,但如果不这样做,你的代码就必须能处理因权限不足而造成的异常。除此之外,请求特定的权限可确保你的代码只用于它所设计的目的,不会被别人恶意地利用。最后,如果请求的只是代码运行所需的最小权限,就能提高代码被允许运行的机会。
不要忘了
注意.NET框架类本身是安全的,从你的代码中调用时会发出权限请求。例如,即使你不显式地请求权限,在调用System.IO中的类来写入文件系统时,FileStream类也会自动请求合适的权限。因此,在你的代码中不必请求和你调用的.NET框架类相同的权限,否则会影响性能。参见.NET框架文档,了解每个方法所请求的权限。
如果你的代码不需要访问受保护的资源(文件系统、注册表等等),就不必关心请求权限的问题。请求权限还会增大代码的复杂程度,所以最好在代码通过一个Intranet或Internet部署,而且执行的函数或访问的资源需要进行限制时,才考虑请求权限。