2011-02-18 16 views
0

サブレポートを含むレポートビューアレポートがあります。ローカルで実行すると、別のサーバーに展開すると、リモート・マシン上のローカル・ユーザーに対してSQLアクセス拒否エラーが発生するため、レポートが正常に動作します。サーバー名\サーバー名のために拒否された例ReportViewer - サブレポート処理のなりすましコンテキスト

アクセス$

私は、これはサブレポートに必要なデータを取得するためにSQLコマンドを発射し、サーバーにデプロイ時にレポートビューアは、この焼成された原因は私にある気持ちを持っています私の接続文字列のすべてが(セキュリティ上の理由から)統合されたセキュリティを使用しているため、正しい偽装コンテキストが得られていません。

私のデータベースアクセスクラスが報告アセンブリとは別のアセンブリであり、これらのアセンブリの両方は、Webアプリケーションから参照されている

それは取得する必要がある場合レポートビューアは、サブレポート処理イベントを呼び出しているようだ

サブレポートのデータ。 Webアプリケーションは実行時にユーザーを偽装しますが、サブレポート処理イベントはこの指定されたユーザーを使用しません。代わりにローカルシステムアカウントではなく、接続文字列が統合セキュリティを使用しているため、ローカルシステムアカウントは別のサーバー上のデータベースにアクセスできません。

他にもこの問題がありますか?ここ

は私がこれの下に持っていると思う私のレポートページ

/// <summary> 
     /// Page Load 
     /// </summary> 
     /// <param name="sender"></param> 
     /// <param name="e"></param> 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      try 
      { 
       if (!Page.IsPostBack) 
       { 
        Reporting.Common.SetReportEmbeddedResource(this.ReportViewer1, "xxx.Web.WAP.Reporting.Reports.ApprovalRouteHeader.rdlc"); 

        this.ReportViewer1.LocalReport.DataSources.Add(
         new Microsoft.Reporting.WebForms.ReportDataSource(
          "CostDept", 
          Reporting.Repositories.ApprovalRoute.GetHeaderApprovalRouteList())); 

        this.ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local; 
        this.ReportViewer1.LocalReport.SubreportProcessing += new Microsoft.Reporting.WebForms.SubreportProcessingEventHandler(LocalReport_SubreportProcessing); 

        this.ReportViewer1.LocalReport.Refresh(); 
       } 
      } 
      catch (Exception ex) 
      { 
       ErrorLogging.LogError(ex); 
      } 
     } 

     /// <summary> 
     /// Loads the sub report 
     /// </summary> 
     /// <param name="sender">object</param> 
     /// <param name="e">args</param> 
     protected void LocalReport_SubreportProcessing(object sender, Microsoft.Reporting.WebForms.SubreportProcessingEventArgs e) 
     { 
      try 
      { 
       e.DataSources.Add(
        new Microsoft.Reporting.WebForms.ReportDataSource(
         "CostDept", 
         Reporting.Repositories.ApprovalRoute.GetDetailApprovalRouteList(
         Convert.ToInt32(e.Parameters[ "AccountNumberID" ].Values[ 0 ]), 
         Convert.ToInt32(e.Parameters[ "SageDatabaseID" ].Values[ 0 ]), 
         Convert.ToInt32(e.Parameters[ "RequestingUserID" ].Values[ 0 ]), 
         Convert.ToInt32(e.Parameters[ "ProjectID" ].Values[ 0 ]), 
          Convert.ToInt32(e.Parameters[ "ProjectItemID" ].Values[ 0 ]), 
         e.Parameters[ "DocumentType" ].Values[ 0 ].ToString()))); 
      } 
      catch (Exception ex) 
      { 
       ErrorLogging.LogError(ex); 
      } 
     } 

答えて

0

ためのコードです。 SQLサーバーがWebアプリケーションとは別のボックスにあるため、サブレポートが処理されてIDコンテキストが失われると、「ダブルホップ」が発生します。

私が思いついた2つの回避策があります。 SQL接続文字列で

1)使用UIDとPWD統合セキュリティが

2を使用しないように)アプリケーションプールのIDおよびデータベースに対する権限を持っているのと同じアカウントにIISで匿名ユーザーのアクセス権を変更。サブレポートが処理されると、アプリケーションプールのIDがアクセスされ、正しくロードされます。

私は私のブログにmored詳細な説明を掲載: WraithNath

0

私がイメージにチャートをインポート似たような状況に遭遇しました。

マイチャートは、aspxページでレンダリングされ、動的パラメータを持っていました。ローカルを実行しているとき、正常に動作しました。私たちのステージングボックスに展開する...それは壊れました。ここに記載されているサブレポートの問題と同じエラーです。

最後に、チャートのレンダリングからセキュリティを削除しました(すべてのDB接続ですでにUID/PWDを使用しています)。

だから、私はこの問題が、レポート管理用の「サブ」タスクとほとんど同じであると考えています。それがイメージ、サブレポートなどを呼び出すかどうか。

関連する問題