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

时间:2011-08-14 01:11:37

标签: c# sql-server security reporting-services cas

好吧..花了3天这个,学到了很多关于这个问题的知识,但还是不能完全解决它。

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

  

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

所以,我添加了这段代码:

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

但这会导致此例外:

  

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

     

失败的程序集区域是:MyComputer

根据我的阅读,在Visual Studio预览窗格中不应出现此问题,因为代码应该完全信任?

从来没有,我继续前进followed all of the instructions here,以便让我的集会充分信任。我尝试通过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>

我也看到this post,并尝试将我的代码组放在那里建议的位置。

此外,我尝试签署我的程序集,并添加基于强名称的CodeGroup(也在My_Computer_Zone中。

我也尝试过使用caspol.exe:

caspol -af myassembly.dll

所以,我认为myassembly完全信任(虽然不是100%肯定)。 我无法弄清楚为什么,我仍然从Visual Studio预览窗格中获得这些权限错误

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

更新

我设置了SSRS服务器的本地实例。我可以在那里部署我的报告,并且它可以工作(因为我已经为它添加了完全信任),但它仍然无法在VS中工作。这是一个临时的工作,但它很难开发,因为它需要很长时间才能部署并吃掉大量的ram ..

2 个答案:

答案 0 :(得分:2)

我必须在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>

我希望这有助于某人。

答案 1 :(得分:1)

声波,

这为我解决了这个问题,但我猜你的问题可能还有其他问题

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 =“C:\ Program Files \ Microsoft SQL Server \ MSRS11.SQLSERVER2012 \ Reporting Services \ ReportServer \ bin \ my.ReportUtils.resources.dll”/&gt;

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

的文件夹

即使两个位置都有相同的dll,也无法正常工作

我真的很傻

利安