2013-09-30 3 views
1

У меня есть веб-приложение с пулом приложений, настроенным с использованием учетной записи домена. В SSRS учетной записи домена предоставляется доступ браузера к папке, а отчет SSRS настроен с соответствующими учетными данными.Пользовательское олицетворение между asp.net и ssrs

Мой вопрос в том, открыт ли отчет SSRS из веб-приложения, будет открыт отчет SSRS под учетной записью домена или моей учетной записи. В настоящее время он предоставляет сообщение об ошибке, поскольку \ не имеет достаточных разрешений для доступа к местоположению отчета.

+1

Почему, вместо того, чтобы полагаться на олицетворение, вы не используете свойство ReRoreViewer 'ServerReport.ReportServerCredentials' для передачи реальных учетных данных? –

+0

Его устаревшее приложение у нас мало возможностей для новых разработчиков. Веб-URL SSRS определяется в файле web.config, а приложение использует проверку подлинности Windows. Когда пользователь выбирает параметры на веб-странице, отчет ssrs открывается с использованием этих параметров. – Sunny

ответ

2

Вам просто нужно установить фиксированного пользователя в веб-конфигурацию вместе с адресом SSRS. Таким образом вы устанавливаете значение по умолчанию для сайта для использования, а не в зависимости от пользователя, запустившего сайт:

Пример из приложения WPF, но очень похожего на ASP.NET в коде.

<Button x:Name="btnGetViewerRemoteData" Content="Remote" Click="ReportViewerRemote_Load"/> 

Ссылка имя элемента в коде позади, чтобы вы импортировать пространство имен для «Microsoft.Reporting.WinForms» (или эквивалент) ASP.NET.

private void ResetReportViewer(ProcessingMode mode) 
    { 
     this.reportViewer.Clear(); 
     this.reportViewer.LocalReport.DataSources.Clear(); 
     this.reportViewer.ProcessingMode = mode; 
    } 


    private ICredentials giveuser(string aUser, string aPassword, string aDomain) 
    { 
     return new NetworkCredential(aUser, aPassword, aDomain); 
    } 

    private void ReportViewerRemoteWithCred_Load(object sender, EventArgs e) 
    { 
     ResetReportViewer(ProcessingMode.Remote); 
     var user = giveuser("User", "Password", "Domain"); 
     reportViewer.ServerReport.ReportServerCredentials.ImpersonationUser = (System.Security.Principal.WindowsIdentity)user; 
     ; 

     reportViewer.ServerReport.ReportServerUrl = new Uri(@"http:// (server)/ReportServer"); 

     reportViewer.ServerReport.ReportPath = "/Test/ComboTest"; 

     DataSourceCredentials dsCrendtials = new DataSourceCredentials(); 
     dsCrendtials.Name = "DataSource1"; 
     dsCrendtials.UserId = "User"; 
     dsCrendtials.Password = "Password"; 
     reportViewer.ServerReport.SetDataSourceCredentials(new DataSourceCredentials[] { dsCrendtials }); 

     reportViewer.RefreshReport(); 
    } 

Я жестко закодировал свой пример, но вы можете иметь сервер, пользователя и пароль в конфигурационном файле. Хотя безопасность пароля может быть проблемой, поэтому в зависимости от вашей организации, поэтому может быть предпочтительнее жестко закодировать ее или скрыть ее в первую очередь.

+0

Я НЕ выполняю учетные данные, но обычно делаю это с группами отдельно. EG: Учет и финансы могут иметь доступ, но я блокирую операции по групповой политике. Как правило, проблема заключается в подключении базы данных к набору данных, который дает проблему, но не к доступу к сайту в моем опыте. EG: Боб в Финансах имеет доступ к отчету, но не к базовым данным в строке подключения к базе данных FINANCEMAIN на сервере SUPERSECRETSERVER. – djangojazz

Смежные вопросы