【问题标题】:How do I resolve a System.Security.SecurityException with custom code in SSRS?如何使用 SSRS 中的自定义代码解决 System.Security.SecurityException?
【发布时间】:2008-08-28 14:34:26
【问题描述】:

我创建了一个程序集并在我的 Reporting Services 报告中引用了它。我在本地测试了报告(有效),然后将报告上传到报告服务器(无效)。

这是我编写的自定义代码引发的错误。

System.Security.SecurityException: 请求类型的许可 'System.Security.Permissions.SecurityPermission, mscorlib,版本=2.0.0.0, 文化=中性, PublicKeyToken=b77a5c561934e089' 失败的。在 System.Security.CodeAccessSecurityEngine.CheckNReturnSO(PermissionToken permToken, CodeAccessPermission 需求,StackCrawlMark 和 stackMark, Int32 unrestrictedOverride, Int32 创建)在 System.Security.CodeAccessSecurityEngine.Assert(CodeAccessPermission 上限、StackCrawlMark 和 stackMark)在 System.Security.CodeAccessPermission.Assert() 在 [截断方法名称] 在 ReportExprHostImpl.CustomCodeProxy.[Snipped Method Name] 失败的操作是: 需求 第一类 失败的许可是: System.Security.Permissions.SecurityPermission 失败的装配区 是:我的电脑

这个项目是我继承的,我对它不是很熟悉。虽然我确实有代码(现在),所以我至少可以使用它:)

我相信失败的代码是这样的:

    Dim fio As System.Security.Permissions.FileIOPermission = New System.Security.Permissions.FileIOPermission(Security.Permissions.PermissionState.Unrestricted)
    fio.Assert()

然而,这种东西也无处不在:

Private Declare Function CryptHashData Lib "advapi32.dll" (ByVal hhash As Integer, ByVal pbData As String, ByVal dwDataLen As Integer, ByVal dwFlags As Integer) As Integer

我可以看到,其中任何一个都是 Reporting Services 无法开箱即用的内容。

【问题讨论】:

  • 这可以帮助你:blogs.msdn.com/shawnfa/archive/2003/06/20/57023.aspx>

标签: reporting-services securityexception


【解决方案1】:
<system.web>

<trust level="Full"/>

</system.web>

在 web.config 中试试这个

【讨论】:

    【解决方案2】:

    这就是我解决问题的方法:

    • 强烈签署有问题的自定义程序集
    • 修改 rssrvpolicy.config 文件为程序集添加权限

                          <CodeGroup
                              class="UnionCodeGroup"
                              version="1"
                              PermissionSetName="FullTrust"
                              Name="Test"
                              Description="This code group grants the Test code full trust. ">
                              <IMembershipCondition
                                      class="StrongNameMembershipCondition"
                                      version="1"
                                      PublicKeyBlob="0024000004800000940100000602000000240000575341310004000001000100ab4b135615ca6dfd586aa0c5807b3e07fa7a02b3f376c131e0442607de792a346e64710e82c833b42c672680732f16193ba90b2819a77fa22ac6d41559724b9c253358614c270c651fad5afe9a0f8cbd1e5e79f35e0f04cb3e3b020162ac86f633cf0d205263280e3400d1a5b5781bf6bd12f97917dcdde3c8d03ee61ccba2c0"
                                  />
                          </CodeGroup>
      

    旁注:这是获取程序集公钥 blob 的好方法 VS trick for obtaining the public key token and blob of a signed assembly

    【讨论】:

    • 任何用于修改 rssrvpolicy.config 的示例 powershell 脚本 ps1 ?谢谢
    【解决方案3】:

    以管理员模式运行您的服务

    【讨论】:

      【解决方案4】:
       <CodeGroup class="FirstMatchCodeGroup" version="1" PermissionSetName="FullTrust">
      

      对我来说,解决方案是将rssrvpolicy.config 中的上述行从"None" 更改为"FullTrust"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多