将Windows标识传递给SSRS报告自定义数据源

时间:2017-04-17 16:05:10

标签: asp.net reporting-services datasource reportviewer ssrs-2012

我是SSRS报告世界的新手,并且在尝试连接到我的DataSource时遇到了一些问题。

我创建了一个具有以下属性的新数据源

  • 使用我的报告中嵌入的连接
  • 连接类型:Microsoft SQL Server
  • 连接字符串:[@ ConnectionString],其中@ConnectionString是我的报告参数的名称。

在凭据标签

  • 提示输入凭据(未选中“用作Windows凭据”复选框)

我正在使用此数据源预先填充报表的下拉控件,其中包含DB中的可用值。 现在,场景是我要将连接字符串从我的aspx页面传递给SSRS报表查看器。

以下代码摘录:

this.rptViewer.ProcessingMode = ProcessingMode.Remote; 
this.rptViewer.ServerReport.ReportServerUrl = new Uri(reportServerUrl);//https                
this.rptViewer.ServerReport.ReportPath = reportPath;
// this can have either UserName & Password specified or have IntegratedSecurity=SSPI
connStrBuildr.ConnectionString = connStr; 
ReportParameter reportParameter = new ReportParameter("ConnectionString", connStrBuildr.ConnectionString, false);
this.rptViewer.ShowCredentialPrompts = false;
this.rptViewer.ServerReport.SetParameters(reportParameter);                                    

if (!connStrBuildr.IntegratedSecurity) { // for SQL Auth
   this.rptViewer.ServerReport.SetDataSourceCredentials(new List<DataSourceCredentials>() { 
       new DataSourceCredentials() {
         Name = "Custom_DataSource",
         UserId = connStrBuildr.UserID,
         Password = connStrBuildr.Password } });
 }
 else // for Windows Auth 
  { 
     // Created a new class as per some suggestion on internet, to connect to ReportServer which inturn will pass window identity to SQL Server,
     // but even this didn't work - had no way to exact password . MIND BLOWING STUFF !! 

     //rptViewer.ServerReport.ReportServerCredentials = new CustomReportCredential(username,password,domain)

   }
this.rptViewer.ServerReport.Refresh();

我的要求是 如果我的连接字符串指定了用户名和密码,则应使用这些字符串连接SQL(Custom_DataSource)。

如果指定了IntegratedSecurity = SSPI,则应使用Windows身份验证连接SQL(Custom_DataSource)。

我尝试过创建派生类

CustomReportCredential:Microsoft.Reporting.WebForms.IReportServerCredentials

但即便如此也没有成功。修改web.config以保持Impersonate(true / false),以及许多类似的。他们都没有成功。

目前的情景: 如果我更改报告以使用 Windows集成安全性,则所有启用Windows身份验证的连接字符串都会正常运行,但对于指定了UserName和密码的连接字符串则会失败。

反之亦然,如果我更改报告以使用提示凭据(未选中“用作Windows凭据”复选框)。

预期:

  • 如何允许两种方法(Windows / SQL)连接到DataSource?

这可能是一个微不足道的情况,但我无法找到适当的解决方案。

任何帮助或指示都将非常感激。感谢。

1 个答案:

答案 0 :(得分:-1)

我发现这有关类似情况的不同答案。不过,在我的网站中,我将rptViewer.ServerReport.ReportServerCredentials设置为可以访问该报告的Windows帐户。没有它,我作为连接字符串提供的内容没有区别,应用程序甚至无法访问报告。我觉得这很旧了,但那也许是你的问题?我只是想知道如果连接字符串使用参数传递给报告,是否还有更大的危险,并且如果有一个更好的选择,而不是必须在web.config中存储AD帐户和密码,以便ReportViewer可以访问报告。