我是SSRS报告世界的新手,并且在尝试连接到我的DataSource时遇到了一些问题。
我创建了一个具有以下属性的新数据源
在凭据标签
中我正在使用此数据源预先填充报表的下拉控件,其中包含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凭据”复选框)。
预期:
这可能是一个微不足道的情况,但我无法找到适当的解决方案。
任何帮助或指示都将非常感激。感谢。
答案 0 :(得分:-1)
我发现这有关类似情况的不同答案。不过,在我的网站中,我将rptViewer.ServerReport.ReportServerCredentials设置为可以访问该报告的Windows帐户。没有它,我作为连接字符串提供的内容没有区别,应用程序甚至无法访问报告。我觉得这很旧了,但那也许是你的问题?我只是想知道如果连接字符串使用参数传递给报告,是否还有更大的危险,并且如果有一个更好的选择,而不是必须在web.config中存储AD帐户和密码,以便ReportViewer可以访问报告。