如何:限制 UDF 代码访问安全权限

如果您不希望某个特定用户定义函数 (UDF) 程序集以完全信任级别运行,必须显式限制它的代码访问安全权限。您可以使用 .NET Framework 2.0 配置工具配置代码组和限制权限。

例如,假定您有一个包含多个方法的 UDF 程序集。其中一个 UDF 方法执行一项自定义计算,同一程序集中的另一 UDF 方法调用 Web 服务来获取股市报价。因为用户只使用调用第一个(计算)方法的 Excel 工作簿,您可能希望禁止该程序集具有 Web 访问权限,以提高安全性。

您将该 UDF 程序集安装在服务器上的某个文件夹中,例如 C:\UdfAssemblies\CalcAndWebAccessUdf.dll。因为该程序集与 Microsoft Office SharePoint Server 2007 位于同一计算机上,所以 Excel Calculation Services 加载 UDF 程序集时,它会在 MyComputer 区域中加载。默认情况下,MyComputer 区域是完全信任的。这意味着,UDF 程序集被授予了完全信任权限。

要锁定 UDF 程序集,以阻止其具有 Web 访问权限,必须通过以下步骤显式限制授予它的权限集:

  1. 在计算机级别的 My_Computer_Zone 下,创建一个基于 URL 的新代码组。将该代码组的范围限定到该特定程序集,并创建一个自定义权限集。

  2. 配置自定义代码组的属性,以便您的策略级别只具有与自定义代码组相关联的权限集中的权限。当 Excel Calculation Services 加载驻留在同一台计算机上的 UDF 程序集时,程序集会加载到 MyComputer 区域中。这意味着,会默认授予 UDF 程序集完全信任的级别。当该自定义权限集与完全信任权限集相交时,结果为完全信任。要使策略只具有与您的自定义代码组相关联的权限集中的权限,您必须启用“该策略级别将只具有与此代码组关联的权限集中的权限”属性。

有关配置代码组的详细信息,请参阅 MSDN 上的以下文章:

创建新代码组

  1. 单击“开始”,依次指向“所有程序”和“管理工具”,然后单击“Microsoft .NET Framework 2.0 配置”。

    这将启动“.NET 2.0 Framework 配置”工具。

  2. 在左侧窗格中,依次展开“我的电脑”节点和“运行库安全策略”节点。

  3. 展开“计算机”节点。

  4. 展开“代码组”节点。

  5. 展开“All_Code”节点。

  6. 展开“My_Computer_Zone”节点。右键单击“My_Computer_Zone”,然后选择“新建”,以显示“标识新代码组”对话框。

  7. 选择“创建新代码组”。

  8. 在“名称”字段,键入新代码组的名称,例如,RestrictWebAccessUdf。

  9. 单击“下一步”。

  10. 要将该代码组的范围限定到您的特定 UDF 程序集,请从“选择此代码组的条件类型”中选择“URL”。

    这将显示“URL”字段。

  11. 在“URL”字段中,键入要限制其访问 Web 的 UDF 程序集的路径,例如,C:\UdfAssemblies\CalcAndWebAccessUdf.dll。

  12. 单击“下一步”。

  13. 选择“创建新权限集”,然后单击“下一步”。

  14. 在“名称”字段,键入程序集的名称,例如,AssemblyExecutionCustomPermissionSet。

  15. 单击“下一步”。

  16. 若要授予 UDF 程序集“程序集执行”的权限,请从“程序集权限”列表中选择“安全性”,然后单击“添加”。

    这将显示“权限设置”对话框。

  17. 选择“授予程序集下列安全权限”。

  18. 选择“启用程序集执行”。

  19. 单击“确定”,然后单击“下一步”。

  20. 单击“完成”。

    您应在“My_Computer_Zone”节点下看到您的新自定义代码组(在本示例中,它是“RestrictWebAccessUdf”)。

确保权限集得到执行

  1. 在“My_Computer_Zone”节点下,右键单击新的自定义代码组(在本示例中,它是“RestrictWebAccessUdf”),然后选择“属性”。

  2. 在“常规”选项卡上,选中“该策略级别将只具有与此代码组关联的权限集中的权限”复选框。

  3. 单击“添加”,然后单击“确定”。

    备注

    如果由于该 UDF 方法无法调用 Web 服务而引发异常,您会在名为 UDF 的 Excel 公式中收到“#VALUE!”错误。

    备注

    如果为了测试目的而为您的 UDF 程序集启用 Web 访问权限,必须向自定义权限集添加适当的权限。要执行此操作,请在创建新代码组的第 11 步中选择“Web 访问”。

See Also

任务

如何:创建调用 Web 服务的 UDF

如何:启用 UDF

如何:从 UDF 访问外部数据源

如何:使用 Windows SharePoint Services 解决方案部署 UDF

概念

演练:开发托管代码 UDF

关于 Excel Services UDF 的常见问题解答

了解 Excel Services UDF