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

C# SSRS外部程序集:预览窗格中的SecurityPermission?,c#,sql-server,security,reporting-services,cas,C#,Sql Server,Security,Reporting Services,Cas,好的。。花了3天的时间,对这个问题了解了很多,但仍然不能完全摆脱它 我有一个SSRS报告,它引用连接到sql server的外部程序集,在Visual Studio中预览此报告时,我遇到以下异常: SecurityException:请求SqlClientPermission类型的权限失败 因此,我添加了以下代码: new SqlClientPermission(PermissionState.Unrestricted).Assert(); 但这反过来又导致了这种例外: SecurityExc

好的。。花了3天的时间,对这个问题了解了很多,但仍然不能完全摆脱它

我有一个SSRS报告,它引用连接到sql server的外部程序集,在Visual Studio中预览此报告时,我遇到以下异常:

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

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

new SqlClientPermission(PermissionState.Unrestricted).Assert();
但这反过来又导致了这种例外:

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

失败程序集的区域是: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>
因此,我认为myassembly完全信任运行(尽管不是100%确定)我不明白为什么,我仍然从Visual Studio预览窗格中获得这些权限错误

我的代码需要什么才能断言sql权限

更新

我设置了一个SSRS服务器的本地实例。我可以在那里部署我的报表,它可以工作(因为我已经为它添加了完全信任),但它在VS中仍然无法工作。这是一个临时的解决方法,但它对于开发来说很糟糕,因为部署需要很长时间,并且占用了大量ram。

Sonic

这为我解决了这个问题,但我猜你的问题可能是其他原因

C:\ProgramFiles(x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateSassemblies\RSPreviewPolicy.config

[或者 C:\ProgramFiles(x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateSassemblies\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,它也无法工作

我真的很傻


利亚姆

我必须在RsPreviewPolicy.config(在开发机器上)中做两个更改:



我希望这对其他人有所帮助。

您是否尝试过使用ExecutePortincurrentAppDomain per?我可以在哪里设置?请记住,我没有使用任何外部代码来启动报告。只是在VisualStudio中预览而已。因此,这里只有.rdl文件,从我的代码中调用的c#方法behindI不知道我自己的知识,但根据该链接,您可以通过添加“自定义代码”将代码嵌入报表:在报表菜单上,单击报表属性。在“代码”选项卡上的“自定义代码”中,键入代码。措辞得体的问题-我有完全相同的问题,目前正在查看-如果我遇到解决方案,将随时通知您。让我知道你是否同时解决了它。谢谢@femseks,我只需将第一个名为“Report\u Expressions\u Default\u Permissions”的代码组更改为“FullTrust”,我就可以在报表设计器中使用预览了。在我的例子中,RsPreviewPolicy.config文件位于VS2019的新位置下,即:C:\Program Files(x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\ssr在服务器上,我必须对文件做同样的更改:“C:\Program Files\Microsoft SQL server Reporting Services\SSRS\ReportServer\rssrvpolicy.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>
<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>