The Gotcha

Configuring SSRS Reporting services involves quite a few steps and permission hoops that you will have to jump through. Then once you think you’ve done that correctly, the AccessDeniedException rears it’s ugly head.

SSRSReportsError

Server Error in '/' Application.

System.Web.Services.Protocols.SoapException: The permissions granted to user 'domain\user' are insufficient for performing this operation. ---> Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: The permissions granted to user 'domain\user' are insufficient for performing this operation.

  at Microsoft.ReportingServices.WebServer.ReportExecution2005Impl.LoadReport(String Report, String HistoryID, ExecutionInfo2& executionInfo)

  at Microsoft.ReportingServices.WebServer.ReportExecutionService.LoadReport(String Report, String HistoryID, ExecutionInfo& executionInfo)

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: The permissions granted to user 'domain\user' are insufficient for performing this operation. ---> Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: The permissions granted to user 'domain\user' are insufficient for performing this operation.

  at Microsoft.ReportingServices.WebServer.ReportExecution2005Impl.LoadReport(String Report, String HistoryID, ExecutionInfo2& executionInfo)

  at Microsoft.ReportingServices.WebServer.ReportExecutionService.LoadReport(String Report, String HistoryID, ExecutionInfo& executionInfo)

Source Error:

Line 285:        [return: System.Xml.Serialization.XmlElementAttribute("executionInfo")]
Line 286:        public ExecutionInfo LoadReport(string Report, string HistoryID) {
Line 287:            object[] results = this.Invoke("LoadReport", new object[] {
Line 288:                        Report,
Line 289:                        HistoryID});

Stack Trace:

[SoapException: System.Web.Services.Protocols.SoapException: The permissions granted to user 'domain\user' are insufficient for performing this operation. ---> Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: The permissions granted to user 'domain\user' are insufficient for performing this operation.

   at Microsoft.ReportingServices.WebServer.ReportExecution2005Impl.LoadReport(String Report, String HistoryID, ExecutionInfo2& executionInfo)

   at Microsoft.ReportingServices.WebServer.ReportExecutionService.LoadReport(String Report, String HistoryID, ExecutionInfo& executionInfo)]

   System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) +507386

   System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) +215

   Project.RptExecSvc.ReportExecutionService.LoadReport(String Report, String HistoryID) in C:\git-tfs\eFileForBusiness\efile1.com\Web\Web References\RptExecSvc\Reference.cs

   Page.Page_Load(Object sender, EventArgs e) in Project\Page.aspx.cs
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
   System.Web.UI.Control.OnLoad(EventArgs e)
   System.Web.UI.Control.LoadRecursive()
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.18446


To Resolve this exception

  1. Open your servers report manager
  2. Click the right arrow on the desired folder
  3. Click security
  4. Click New Role Assignment
  5. Enter BUILTIN\Users for Group or User Name
  6. Click Browser
  7. Click OK


Explanation

The key here is the default configuration of SSRS reports that gives the BUILTIN\Administrators (aka local administrators) full permissions with the reports. This is necessary but not sufficient. In many cases, you want other users to be able to view, create, modify or do other operations on reports.

For this reason, I had to add BUILTIN\Users to be able to do anything with the reports, even run them. In my scenario, this resolved the issue as I only needed to run the reports from the server. If your scenario is more complex (e.g. users need to modify/build reports) you may end up with a more complex configuration.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s