代码访问安全以这些核心概念为中心:证据、代码组和命名权限集。 在 Reporting Services 中,报表管理器、报表设计器和报表服务器组件各有一个策略文件,用于为自定义程序集以及数据、传递、呈现和安全扩展插件配置代码访问安全性。 以下部分概述了代码访问安全性。 有关本节中介绍的主题的更多详细信息,请参阅 Microsoft .NET Framework SDK 文档中的“安全策略模型”。
Reporting Services 使用代码访问安全性,因为尽管报表服务器是基于 ASP.NET 技术构建的,但典型 ASP.NET 应用程序和报表服务器之间存在很大的差异。 典型的 ASP.NET 应用程序不执行用户代码。 相比之下,Reporting Services 使用开放且可扩展的体系结构,允许用户使用报表定义语言的 Code 元素对报表定义文件进行编程,并将专用功能开发为自定义程序集,以便在报表中使用。 此外,开发人员还可以设计和部署强大的扩展,以增强报表服务器的功能。 通过这种强大和灵活性,需要尽可能多地提供保护和安全性。
Reporting Services 开发人员可以使用其报表中的任何 .NET Framework 程序集,并本机调用部署到全局程序集缓存的程序集的所有功能。 报表服务器唯一可以控制的就是为报表表达式和加载的自定义程序集提供哪些权限。 在 Reporting Services 中,自定义程序集默认接收仅 执行权限。
证据
证据是公共语言运行时(CLR)用来确定代码程序集的安全策略的信息。 证据向运行时表明代码具有特定特征。 常见的证据形式包括数字签名和程序集的位置。 还可以自定义证据,用于表示对应用程序有意义的其他信息。
程序集和应用程序域都根据证据接收权限。 例如,Reporting Services 尝试访问的程序集的位置是弱名称程序集的一种常见证据形式。 这称为 URL 证据。 部署到报表服务器的自定义数据处理扩展插件的 URL 证据可能是“C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll”。 程序集的强名称或数字签名是另一种常见的证据形式。 在这种情况下,证据是程序集的公钥信息。
代码组
代码组是具有指定成员资格条件的代码的逻辑分组。 满足成员资格条件的任何代码都包含在组中。 管理员通过管理代码组及其关联的权限集来配置安全策略。
代码组的成员身份条件基于证据。 例如,代码组的 URL 成员身份基于 URL 证据。 公共语言运行时(CLR)使用标识特征(如 URL 证据)来描述代码,并确定是否已满足组的成员身份条件。 例如,如果代码组的成员身份条件是“程序集中的代码 C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll”,运行时将检查证据以确定代码是否源自该位置。 此类型的代码组的配置条目示例可能如下所示:
<CodeGroup class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="MyCodeGroup"
Description="Code group for my data processing extension">
<IMembershipCondition class="UrlMembershipCondition"
version="1"
Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll"
/>
</CodeGroup>
应与系统管理员或应用程序部署专家合作,确定自定义程序集或 Reporting Services 扩展所需的代码访问安全和代码组的类型。
命名权限集
命名权限集是管理员可以与代码组关联的一组权限。 大多数命名的权限集至少包含一个权限、名称和权限集的说明。 管理员可以使用命名权限集为代码组建立或修改安全策略。 多个代码组可以与同一命名权限集相关联。 CLR 提供内置的命名权限集;其中包括 Nothing、 Execution、 Internet、 LocalIntranet、 Everything 和 FullTrust。
注释
Reporting Services 中的自定义数据、传递、呈现和安全扩展插件必须在 FullTrust 权限集下运行。 请与系统管理员协作,为 Reporting Services 扩展添加相应的代码组和成员资格条件。
可以为与报表一起使用的自定义程序集关联自己的自定义权限级别。 例如,如果要允许程序集访问特定文件,则可以创建具有特定文件 I/O 访问权限的新命名权限集,然后将权限集分配给代码组。 以下权限集授予对文件 MyFile.xml的只读访问权限:
<PermissionSet class="NamedPermissionSet"
version="1"
Name="MyNewFilePermissionSet"
Description="A special permission set that grants read access to my file.">
<IPermission class="FileIOPermission"
version="1"
Read="C:\MyFile.xml"/>
<IPermission class="SecurityPermission"
version="1"
Flags="Assertion, Execution"/>
</PermissionSet>
授予此权限集的代码组可能如下所示:
<CodeGroup class="UnionCodeGroup"
version="1"
PermissionSetName="MyNewFilePermissionSet"
Name="MyNewCodeGroup"
Description="A special code group for my custom assembly.">
<IMembershipCondition class="UrlMembershipCondition"
version="1"
Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\MyCustomAssembly.dll"/>
</CodeGroup>