2016-08-12 77 views
0

我有一个SSRS报告引用一个dll程序集,其中一个类应调用存储过程但返回此错误。.NET Framework 4.5安全性:SSRS调用C#中的程序集生成错误

请求'System.Data.SqlClient.SqlClientPermission,system.Data,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'类型权限失败。

我不知道C#,但在一些朋友和同事的帮助下一直在徘徊。一个让我补充:

using System.Security.Permissions; 
SqlClientPermission oPerm = new SqlClientPermission(PermissionState.Unrestricted); 
oPerm.Assert(); 

到类,我得到这个错误: 无法执行CAS的安全透明的方法

领导让我看看.NET 4.0之后发生了什么变化断言。我删除了SQLClientPermissions位并将其添加到AssemblyInfo中:

[assembly: SecurityRules(SecurityRuleSet.Level2)] 
[assembly: SecurityCritical()] 

其中返回了原始错误。这是类:

using System.Text; 
using System.Threading.Tasks; 
using System.Data; 
using System.Data.SqlClient; 
using System.Security; 
using System.Security.Permissions; 
namespace ClassLibrary1 
{ 
    public class Class1 
    { 
     public static string logReportAttributes(string ReportName, int GlobalsTotalPages) 
     { 
      string retValue = String.Empty; 
      try 
      { 
       long TOCExecutionID = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmss")); 
       SqlConnection connection = new SqlConnection("Persist Security Info=True;Trusted_Connection=True;initial catalog=InternalApps;data source=DEVSQL1;User ID=xxxxx;password=xxxxx;MultipleActiveResultSets=true;"); 
       using (SqlCommand cmd = new SqlCommand("usp_LogReportAttributes", connection)) 
       { 
        cmd.CommandType = CommandType.StoredProcedure; 
        cmd.Parameters.AddWithValue("@ReportName", ReportName); 
        cmd.Parameters.AddWithValue("@GlobalsTotalPages", GlobalsTotalPages); 
        connection.Open(); 
        cmd.ExecuteNonQuery(); 
       } 
       if (connection.State == ConnectionState.Open || connection.State == ConnectionState.Broken) 
       { 
        connection.Close(); 
       } 
       retValue = "Sent Successfully"; 
      } 
      catch (Exception ex) 
      { 
       retValue = string.Format ("{0} \n\r {1}" , ex.Message != null ? ex.Message : "" , ex.InnerException != null ? ex.InnerException.Message : ""); 
      } 
      return retValue; 
     } 
    } 
} 

有没有人有任何想法我做错了什么,以及如何获得正确的安全设置呢?谢谢!

回答

0

原始错误是来自报表服务器的代码策略设置的错误。有一个名为RSSrvPolicy.config的配置文件,您可以在其中指定不同的CodeGroups及其相应的信任级别(在ReportServer \ bin中)。在那里您可以授予DLL FullTrust访问权限。

此MSDN页面覆盖了一些细节,更重要的是有一个CodeGroup标记的示例:https://msdn.microsoft.com/en-us/library/ms154658.aspx#Anchor_1

相关问题