SSRS外部程序集:预览窗格中的SecurityPermission?

4

好的..花了3天时间研究这个问题,学到了很多,但还是无法完全解决它。

我有一个SSRS报告,引用了连接到SQL Server的外部程序集,在Visual Studio中预览此报告时,我会收到以下异常:

SecurityException:请求失败类型SqlClientPermission的权限

因此,我添加了以下代码:

new SqlClientPermission(PermissionState.Unrestricted).Assert();

但是这反过来会引起以下异常:

SecurityException: 请求的安全权限类型失败

失败的程序集区域为:MyComputer

根据我所读的,这个问题不应该在Visual Studio预览窗格中出现,因为代码应该在完全信任下运行?

尽管如此,我仍然按照此处的所有说明进行了操作,以使我的程序集获得完全信任。我尝试通过URL和强名称添加它。

<CodeGroup class="UnionCodeGroup"
   version="1"
   PermissionSetName="FullTrust"
   Name="MyNewCodeGroup">
   <IMembershipCondition class="UrlMembershipCondition"
      version="1"
      Url="C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\MyAssembly.dll"/>
</CodeGroup>

我也看到了这篇帖子,并尝试按照建议将我的代码组放在那里。
此外,我尝试签署我的程序集,并基于强名称添加了一个CodeGroup(也是在My_Computer_Zone中)。
我还尝试使用caspol.exe,命令如下:
caspol -af myassembly.dll

所以,我认为我的程序在完全信任下运行(虽然不是100%确定)。我无法理解为什么从Visual Studio预览窗格中仍然会出现这些权限错误。要能够断言SQL权限,我的代码需要什么? 更新: 我设置了一个本地的SSRS服务器实例。我可以在那里部署我的报告,并且它可以正常工作(因为我已经为它添加了完全信任),但是它仍然无法在VS中工作。这是一个临时的解决方法,但对于开发来说很糟糕,因为它需要长时间部署并占用大量内存...

你尝试过使用ExecuteReportInCurrentAppDomain吗?参见这里 - Richard
我在哪里可以设置这个?请记住,我没有使用任何外部代码来启动报告。只是在Visual Studio中预览它。因此,所有的东西都在.rdl文件中,并且是从我的代码后台调用的C#方法。 - Sonic Soul
我自己并不知道,但根据该链接,您可以通过添加“自定义代码”将代码嵌入报告中: 在“报表”菜单上,单击“报表属性”。 在“代码”选项卡上,在“自定义代码”中输入代码。 - Richard
问题表述得很好 - 我也遇到了完全相同的问题,目前正在研究中 - 如果我找到解决方案,我会及时通知你。如果在此期间您已经解决了它,请告诉我。 - Liam
2个回答

4

在开发机上,我需要对RsPreviewPolicy.config文件进行两处更改:

<CodeGroup
        class="UnionCodeGroup"
        version="1"
        PermissionSetName="FullTrust"
        Name="Report_Expressions_Default_Permissions"
        Description="This code group grants default permissions for code in report expressions and Code element. ">
</CodeGroup>
<CodeGroup
        class="FirstMatchCodeGroup"
        version="1"
        PermissionSetName="FullTrust"
        Description="This code group grants MyComputer code Execution permission. ">
  <IMembershipCondition
      class="ZoneMembershipCondition"
      version="1"
      Zone="MyComputer" />
</CodeGroup>

我希望这篇文章能对某些人有所帮助。


谢谢@femseks,我只需要将第一个代码组命名为“Report_Expressions_Default_Permissions”更改为“FullTrust”,然后就可以在报表设计器中使用预览功能了。 在我的情况下,RsPreviewPolicy.config文件位于VS2019的新位置下,即: C:\ Program Files(x86)\ Microsoft Visual Studio \ 2019 \ Enterprise \ Common7 \ IDE \ CommonExtensions \ Microsoft \ SSRS - Asereware
在服务器上,我必须对文件进行相同的更改:“C:\Program Files\Microsoft SQL Server Reporting Services\SSRS\ReportServer\rssrvpolicy.config”。 - Asereware

1

Sonic,

这个方法解决了我的问题,但我猜测你的问题可能是由其他原因引起的。

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\RSPreviewPolicy.config

[或者 C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\RSPreviewPolicy.config]

                        <CodeGroup
                            class="FirstMatchCodeGroup"
                            version="1"
                            PermissionSetName="FullTrust"
                            Name="  my CustomAssemblyCodeGroup"
                            Description="A special code group for my Report custom assembly.">
                            <IMembershipCondition
                            class="UrlMembershipCondition"
                            version="1"
                            Url="C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\my.ReportUtils.dll"/>
                        </CodeGroup>

url的值最初设置为错误的文件夹

Url="C:\Program Files\Microsoft SQL Server\MSRS11.SQLSERVER2012\Reporting Services\ReportServer\bin\my.ReportUtils.resources.dll"/>

而不是包含RSPreviewPolicy.config文件和dll的文件夹

尽管相同的dll在两个位置都存在,但它仍无法工作

这真是我的疏忽

Liam


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接