2016-08-12 24 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

相關問題