2010-12-16 16 views
0

SOAP Webサービス経由でSSRSレポートをレンダリングするアプリケーションがあります。私がしようとしているのは、データベースアクセスのためにデータソースによって使用されるReportExecutionServiceに資格情報を渡すことです。SSRS DataSourceCredentialsとWindows認証

これは現在、SQL認証を使用して動作しています。私が理解しようとしているのは、Windows認証を使用してデータベース用に構成されたユーザーに対して、これを動作させる方法です。ユーザーアカウントはドメインユーザーアカウントで、このユーザーをデータベースとdb_ownerロールに追加しました。

私は、Windowsのユーザーアカウントの資格情報を渡すと、SQLプロファイラを実行すると、I、次のエラーメッセージが表示されます。

Login failed for user 'ourdomain\User'. Reason: Attempting to use an NT account name with SQL Server Authentication. [CLIENT: <local machine>] 

次のコードは、のために資格情報を渡すときに働いている(省略)コードでありますSQLユーザーが、ドメインユーザーの資格情報を渡すときに、上記のメッセージで失敗:私は、これはWindowsの認証、現在働いているコードのために働くために取得しようとするDataSourceCredentialsにReportUserDomainパラメータを追加

public static byte[] RunReport(string reportPath, List<ReportParameter> reportParameters, ReportOutputType outputType) 
     { 
      ReportExecutionService reportExecutionService = new ReportExecutionService(); 

      var creds = new DataSourceCredentials[1]; 

      creds[0] = new DataSourceCredentials() { DataSourceName = "DynamicDataSource", UserName = ReportUserDomain + @"\" + ReportUserAccount, Password = ReportUserPassword }; 

      reportExecutionService.LoadReport(reportPath, null); 

      reportExecutionService.SetExecutionCredentials(creds); 

      return reportExecutionService.Render(Enum.GetName(typeof(ReportOutputType), outputType), GetDeviceInfo(outputType), out extension, out mimetype, out encoding, out warning, out streamids); 
     } 

注意gのSQL認証にはこの変数は含まれていません。

ご協力いただきまして誠にありがとうございます。

答えて

3

DataSourceCredentialsオブジェクトを介してWindowsユーザー資格情報を渡してSQL Serverに対して認証する方法を見つけられませんでした。この機能はSQL Server認証のみをサポートしているようです。

私が問題を解決するためにやったのは、すべてのレポートのデータソースを「資格情報を求めるプロンプト」ではなく「Windows認証(統合セキュリティ)を使用する」に設定することでした。次に、CredentialCacheのDefaultCredentialsをReportExecutionServiceに渡します。これは、基本的にAppPoolが実行されているWindowsユーザーの資格情報を渡します。私はこのWindowsユーザーアカウントのデータベースとSSRSへのアクセスを許可しました。

これは残念ながら、AppPoolアカウントとは別のWindowsユーザーアカウントの資格情報を使用するシナリオを考慮していません。たとえば、レポート目的でのみ使用されるユーザーアカウント。それにもかかわらず、このソリューションは私のニーズに適しています。