У меня есть приложение, в котором я отображаю отчет SSRS через веб-службу SOAP. Я пытаюсь передать учетные данные в ReportExecutionService, который будет использоваться источником данных для доступа к базе данных.
В настоящее время это работает с использованием аутентификации SQL. То, что я пытаюсь выяснить, - как заставить это работать для пользователя, который настроен для базы данных с использованием аутентификации Windows. Учетная запись пользователя является учетной записью пользователя домена, и я добавил этого пользователя в базу данных и в роль db_owner.
Когда я передаю учетные данные для учетной записи пользователя Windows и запускаю SQL Profiler, я получаю следующее сообщение об ошибке:
Login failed for user 'ourdomain\User'. Reason: Attempting to use an NT account name with SQL Server Authentication. [CLIENT: <local machine>]
Следующий код - это (сокращенно) код, который работает при передаче учетных данных для пользователя SQL, но не работает с приведенным выше сообщением при передаче учетных данных пользователя домена:
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);
}
Обратите внимание, что я добавил параметр ReportUserDomain в DataSourceCredentials, чтобы попытаться заставить его работать для проверки подлинности Windows, код, который в настоящее время работает для проверки подлинности SQL, не включает эту переменную.
Любая помощь очень ценится.