SSRS DataSourceCredentials и аутентификация Windows - PullRequest
0 голосов
/ 16 декабря 2010

У меня есть приложение, в котором я отображаю отчет 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, не включает эту переменную.

Любая помощь очень ценится.

1 Ответ

3 голосов
/ 17 декабря 2010

Мне не удалось выяснить способ передачи учетных данных пользователя Windows через объект DataSourceCredentials и проверки подлинности на SQL Server.Кажется, что эта функция поддерживает только аутентификацию SQL Server.

Чтобы решить эту проблему, я решил установить для источника данных во всех отчетах значение «Использовать проверку подлинности Windows (встроенная защита)» вместо «запрос учетных данных ".Затем я передаю DefaultCredentials из CredentialCache в ReportExecutionService, который, по сути, передает учетные данные для пользователя Windows, под которым работает AppPool.Затем я предоставил доступ к базе данных и SSRS для этой учетной записи пользователя Windows, и все работает как положено.

К сожалению, это не учитывает сценарий использования учетных данных для учетной записи пользователя Windows отдельно отАккаунт AppPool.Например, учетная запись пользователя, которая используется исключительно для отчетности.Несмотря на это, решение подходит для моих нужд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...