2016-08-12 15 views
0

ストアドプロシージャを呼び出す必要があるが、このエラーを返すクラスが1つのdllアセンブリを参照するSSRSレポートがあります。.NET Framework 4.5セキュリティ:C#でエラーが発生するとSSRSが呼び出される

'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という設定ファイルがあります。ここでは、異なるCodeGroupと適切な信頼レベル(ReportServer \ bin)を指定できます。そこで、DLLのFullTrustへのアクセスを許可することができます。

このMSDNページでは、いくつかの詳細について説明します。さらに重要なのは、CodeGroupタグの例です。https://msdn.microsoft.com/en-us/library/ms154658.aspx#Anchor_1

関連する問題