【问题标题】:User impersonation between asp.net and ssrsasp.net 和 ssrs 之间的用户模拟
【发布时间】:2013-09-30 12:54:35
【问题描述】:

我有一个使用域帐户配置了应用程序池的 Web 应用程序。在 SSRS 中,域帐户被授予对文件夹的浏览器访问权限,并且 SSRS 报告配置了正确的凭据。

我的问题是,如果 SSRS 报告是从 Web 应用程序启动的,SSRS 报告是在域帐户下打开还是在我的帐户下打开。目前,它正在给出错误消息,因为 \ 没有足够的权限来访问报告位置。

【问题讨论】:

  • 为什么不使用 ReporViewer 的 ServerReport.ReportServerCredentials 属性来传递真实凭据,而不是依赖模拟?
  • 它的遗留应用程序,我们没有太多的新开发空间。 SSRS web url 在 web.config 文件中定义,应用程序使用 windows 身份验证。当用户在网页中选择参数时,使用这些参数打开 ssrs 报告。

标签: asp.net reporting-services ssrs-2008


【解决方案1】:

您只需要在网络配置中设置一个固定用户以及 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();
    }

我对示例进行了硬编码,但您可以将服务器、用户和密码放在配置文件中。尽管密码的安全性可能是一个问题,因此取决于您的组织,因此最好先对其进行硬编码或屏蔽。

【讨论】:

  • 我不实施报告凭据,但通常对组单独执行。 EG:会计和财务可能有访问权限,但我通过组策略锁定了操作。一般来说,问题在于数据集的数据库连接部分给出了问题,而不是根据我的经验访问该站点。 EG:财务部门的 Bob 可以访问报表,但不能访问服务器 SUPERSECRETSERVER 上 FINANCEMAIN 数据库的连接字符串中的基础数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 2020-02-17
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 2011-05-11
  • 2011-05-31
相关资源
最近更新 更多