Reporting Services 2008 - 401:未经授权

时间:2013-10-18 18:49:59

标签: asp.net sql-server security reporting-services

我有一个连接到SQL Server 2008 R2中的Reporting Services的应用程序。

错误如下:

System.Net.WebException: The request failed with HTTP status 401: Unauthorized.
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse
   (SoapClientMessage message, WebResponse response, Stream responseStream, 
    Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke
   (String methodName, Object[] parameters)
at Microsoft.SqlServer.ReportingServices2005.Execution.ReportExecutionService.LoadReport
   (String Report, String HistoryID) 

该应用程序在2个不同的客户中正常运行,因此这不是代码问题。

我正在尝试将其安装在使用AD的客户服务器上。虽然SQL Server和IIS都在同一台机器上,所以我并不关心AD。

如果我以管理员身份运行IE,它会运行,但它不能与其他用户一起使用。 ASP.NET应用程序使用在本地计算机(称为 ReportingServicesUser )中创建的用户(ReportingServicesUser组的成员)连接到SSRS。

我尝试过的事情:

  • ReportingServicesUser 添加到RS网站的“网站设置”(对网络服务,IUSR,经过身份验证的用户组,本地服务等执行相同操作)
  • ReportingServicesUser 添加到RS网站中的文件夹权限(对网络服务,IUSR,Authenticated Users组,本地服务等执行相同操作)
  • 为数据库添加了对这些用户的权限(应用程序数据库和RS相关的dbs)
  • 为RS文件夹添加了NTFS权限(我会仔细检查)。
  • 使用http://localhosthttp://computernamehttp://domain.com
  • 连接到RS

供参考,代码是这个(简化版):

var service = new ReportExecutionService();
service.Credentials = new NetworkCredential("ReportingServicesUser", "password");
service.Url = "http://computername:90/ReportServer/ReportExecution2005.asmx";

service.ExecutionHeaderValue = new ExecutionHeader();

var execInfo = new ExecutionInfo();
execInfo = service.LoadReport("path-to-the-report", null);
===>  Here it throws the exception

我已经阅读了很多关于此的帖子和页面,但我无法得到适合我的答案。

2 个答案:

答案 0 :(得分:2)

好的,我最后不得不将代码更改为:

rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

它有效。可能还有另一个解决方案,但我找不到它。

答案 1 :(得分:0)

您确定在ssrs中为特定报告提供了“ReportingServicesUser”浏览权限吗?请求从未进入服务器,但我会检查\ Reporting Services \ LogFiles只是为了确定。

此外,您的“报告用户”用户需要使用您发送的凭据在报告服务器上进行定义。