安全策略管理概述

更新:2007 年 11 月

.NET Framework 安全系统受一组称为安全策略的可配置规则制约。该策略允许最终用户或管理员调整设置,这些设置确定允许访问哪些资源代码并最终决定究竟允许运行哪个代码。

例如,假定您是企业级设置的管理员,而您不信任来自某个特定公司的软件。或许该公司生产的软件对职员来说很有趣,但是会导致网络流量增加或导致工作站不稳定。您可以设置企业级安全策略,该安全策略限制拥有特定加密型强名称(程序的唯一标识符)的软件对您的计算机资源的访问。也可以设置一种策略来完全禁止该发行者的软件的运行。

该主题提供对安全策略管理的概述。有关其他信息,请参见安全策略管理

证据、代码组和权限集

以公共语言运行库为目标的代码以称为程序集的单位部署。在加载时,运行库检查每个程序集是否有证据,证据是程序集的标识信息(如代码作者的数字签名和代码出自的位置)。根据证据,公共语言运行库安全管理器基于安全策略将程序集映射到代码组。代码组的定义是为了测试特定形式的证据,并且代码组拥有相关联的权限集。属于一个代码组的程序集会收到由关联的权限集定义的权限。有关证据、代码组和权限集的更多信息,请参见安全策略模型

权限

权限就是表示访问受保护资源的权利的对象。可以对权限进行配置,且一个权限对象可以采用多种形式。例如,FileIOPermission 表示在本地硬盘上访问、创建、读取、写入或修改文件的权利。权限必须包含它表示的访问类型的具体信息才有意义。可以将 FileIOPermission 配置为表示读取一个特定文件的权利、对一个特定文件的读写权利或读取整个目录中的文件的权利。权限表示的权利和程序集收到的权利都完全可以由计算机管理员进行配置。尽管应用程序可以像构造和配置其他对象一样来构造和配置权限对象,但是只有安全策略可以向应用程序授予权限。管理员最终控制权限授予。有关常见权限的列表,请参见代码访问权限

安全策略级别

安全模型中定义了四个安全策略级别,它们分别与不同的管理和宿主方案相对应。下表对每个级别进行描述。企业策略级别是最高级别,应用程序域级别为最低级别。

策略级别

说明

企业级策略

由为企业域设置策略的企业管理员定义。

计算机策略

由为一个计算机设置策略的计算机管理员定义。

用户策略

由为单个登录帐户设置策略的用户定义。

应用程序域策略

由运行库宿主(任何承载公共语言运行库的应用程序)定义,以设置加载时的策略。无法管理该级别。

每个策略级别包含一个由代码组构成的层次结构。每个策略级别的管理员可以创建自己的代码组和关联的权限集。在加载时,代码访问安全系统检查所有策略级别,得到的权限授予是各个级别中所有允许的权限的交集。较低策略级别的管理员不能放宽较高级别上作出的策略决定,但是可以将策略想收多紧就收多紧。默认安全策略驻留在计算机策略级别。

下面是默认安全设置:

  • 用户级别和企业级别设置为不受限制。

  • 计算机级别包含特定的策略设置和限制。

  • 所有这三个级别定义的设置构成默认设置。

注意,不受限制的用户级别和企业级别并不会导致授予程序集不受限制的权限。因为计算机级别定义了一些限制,并且这三个级别被视为一个整体,所以得到的权限授予不是不受限制的权限。有关更多信息,请参见安全策略模型

将代码组映射到权限集

可以通过在您管理的一个或多个策略级别上将代码组映射到权限集来管理策略。

代码组包含一个成员条件、一个权限集关联和一些代码组属性。程序集提供给运行库的证据会与您为代码组指定的成员条件相比较。如果某个程序集提供的证据与成员条件匹配,就允许该程序集进入该代码组。管理员标识程序集并将它们在代码组中分类,方法是指定成员条件并向这些代码组分配权限集。也可以选择使用代码组属性来指定在分配权限时不考虑低于当前策略级别的任何策略级别,或者不考虑当前代码组以外的任何代码组。

下列类型的内置证据可以用作成员条件:

  • 应用程序的安装目录

  • 程序集的加密哈希函数

  • 程序集发行者的数字签名

  • 程序集出自的站点

  • 程序集的加密型强名称

  • 程序集出自的 URL

  • 程序集出自的区域

可以根据这些成员条件的任何组合减少或增加给予程序集的权限。因为可以创建自定义成员条件,所以上述列表并不能包括所有的可能性。有关更多信息,请参见证据

请参见

其他资源

安全策略最佳实施策略

代码访问安全性

配置安全策略

安全策略管理