2010-12-16 10 views
0

Ich habe eine Anwendung, wo ich einen SSRS-Bericht über den SOAP Web Service rendern. Ich versuche, die Anmeldeinformationen an den ReportExecutionService zu übergeben, der von der Datenquelle für den Datenbankzugriff verwendet wird.SSRS DataSourceCredentials und Windows-Authentifizierung

Dies funktioniert derzeit mit SQL-Authentifizierung. Ich versuche herauszufinden, wie dies für einen Benutzer funktioniert, der für die Datenbank mit Windows-Authentifizierung konfiguriert ist. Das Benutzerkonto ist ein Domänenbenutzerkonto und ich habe diesen Benutzer der Datenbank und der Rolle db_owner hinzugefügt.

Wenn passiere ich die Anmeldeinformationen für ein Windows-Benutzerkonto und führen Sie SQL Profiler bekomme ich folgende Fehlermeldung:

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

Der folgende Code ist die (abgekürzt) Code, der arbeitet, wenn die Anmeldeinformationen für ein vorübergehendes SQL User, aber mit der obigen Meldung Fehler, wenn das Domain-Benutzer-Credentials vorbei:

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); 
     } 

Bitte beachte, dass ich den ReportUserDomain Parameter zu dem DataSourceCredentials hinzugefügt, um zu versuchen dies für Windows Auth zur Arbeit zu kommen, den Code, der derzeit workin g für die SQL-Authentifizierung enthält diese Variable nicht.

Jede Hilfe wird sehr geschätzt.

Antwort

3

Ich konnte keine Möglichkeit finden, Windows-Benutzeranmeldeinformationen über das DataSourceCredentials-Objekt zu übergeben und sich gegenüber SQL Server zu authentifizieren. Es scheint, dass diese Funktionalität nur die SQL Server-Authentifizierung unterstützt.

Was ich getan habe, um das Problem zu lösen, war die Datenquelle für alle Berichte auf "Windows-Authentifizierung (integrierte Sicherheit) verwenden" anstelle von "zur Eingabe von Anmeldeinformationen". Ich übergebe dann die DefaultCredentials von dem CredentialCache an den ReportExecutionService, der im Wesentlichen die An-Meldeinformation für den Windows-Benutzer übergibt, unter dem der AppPool ausgeführt wird. Ich gewährte dann Zugriff auf die Datenbank und SSRS für dieses Windows-Benutzerkonto, und die Dinge funktionieren wie erwartet.

Dies ist leider nicht für das Szenario der Verwendung der Anmeldeinformationen für ein Windows-Benutzerkonto getrennt von dem AppPool-Konto. Zum Beispiel ein Benutzerkonto, das ausschließlich für Berichtszwecke verwendet wird. Trotzdem ist die Lösung für meine Bedürfnisse geeignet.