如何使用SSRS中的自定义代码解决System.Security.SecurityException?

问题描述 投票:13回答:4

我已经在Reporting Services报告中创建了一个程序集并引用了它。我已经在本地(工作)测试了报告,然后我将报告上传到报告服务器(不起作用)。

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

System.Security.SecurityException:对类型'System.Security.Permissions.SecurityPermission,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限的请求失败。 at System.Security.CodeAccessSecurityEngine.CheckNReturnSO(PermissionToken permToken,CodeAccessPermission demand,StackCrawlMark&stackMark,Int32 unrestrictedOverride,Int32 create),位于System.Security.CodeAccessPermission.Assert()处的System.Security.CodeAccessSecurityEngine.Assert(CodeAccessPermission cap,StackCrawlMark和stackMark)处。 [Snipped Method Name]在ReportExprHostImpl.CustomCodeProxy。[Snipped Method Name]失败的操作是:Demand失败的第一个权限的类型是:System.Security.Permissions.SecurityPermission失败的程序集区域是:MyComputer

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

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

    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无法开箱即用的东西。

reporting-services securityexception
4个回答
18
投票
<system.web>

<trust level="Full"/>

</system.web>

在web.config中尝试这个


8
投票

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

  • 强烈签署有问题的自定义程序集
  • 修改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>

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


0
投票

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


0
投票
 <CodeGroup class="FirstMatchCodeGroup" version="1" PermissionSetName="FullTrust">

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

© www.soinside.com 2019 - 2024. All rights reserved.