代码之家  ›  专栏  ›  技术社区  ›  Allov

使用默认凭据和默认网络凭据

  •  28
  • Allov  · 技术社区  · 16 年前

    我们很难确定这些凭证对象是如何工作的。事实上,他们可能不会像我们期望的那样工作。这是对当前问题的解释。

    我们有两台服务器需要通过WebServices相互通信。第一个(我们称之为 Server01 )有一个Windows服务作为NetworkService帐户运行。另一个 Server02 具有使用IIS 6.0运行的ReportingServices。上的Windows服务 Serv01 正在尝试使用 Serv02 ReportingServices Web服务生成报告并通过电子邮件发送。

    所以,这是我们迄今为止所做的尝试。

    在运行时设置凭据( 这个很好用 ):

     rs.Credentials = new NetworkCredentials("user", "pass", "domain");
    

    现在,如果我们可以使用一个通用用户,那么一切都会好起来的,不过……我们不允许这样做。因此,我们尝试使用DefaultCreditions或DefaultNetworkCredentials并将其传递给RS Web服务:

    rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials
    

    或:

    rs.Credentials = System.Net.CredentialCache.DefaultCredentials
    

    不管怎样都不行。我们总是收到来自IIS的401未授权。现在,我们知道的是,如果我们想授予登录为networkservice的资源访问权,我们需要将其授予 DOMAIN\MachineName$ ( http://msdn.microsoft.com/en-us/library/ms998320.aspx ):

    授予对远程SQL Server的访问权限

    如果要访问同一域(或受信任域)中其他服务器上的数据库,则网络服务帐户的网络凭据将用于对数据库进行身份验证。网络服务帐户的凭据格式为域名\asp net server$,其中,域名是ASP.NET服务器的域,asp net server是您的Web服务器名称。

    例如,如果您的ASP.NET应用程序在域Contoso中名为SVR1的服务器上运行,则SQL Server将看到来自Contoso\SVR1$的数据库访问请求。

    我们假设以与IIS相同的方式授予访问权限是可行的。但事实并非如此。或者,至少有一些内容没有正确设置,无法正确进行身份验证。

    所以,这里有一些问题:

    1. 我们在某个地方读到了“模仿用户”,是否需要在 视窗服务 ?

    2. 是否可以向远程IIS服务器授予对NetworkService内置帐户的访问权限?

    谢谢你的阅读!

    3 回复  |  直到 9 年前
        1
  •  8
  •   Lex Li    9 年前

    你需要的所有细节都包含在这篇老文章中,

    http://msdn.microsoft.com/en-us/library/ms998351.aspx

    简而言之,当您发现这样的问题难以解决时,您应该首先仔细查看ASP.NET模拟背后的技术细节。

        2
  •  0
  •   sowee15    15 年前

    您可以查看以下内容: -为报告服务设置一个SPN(服务主体名称);您可以在Google中找到很好的示例; -允许委派(clientcredentials.windows.allowPersonalLevel)

        3
  •  0
  •   Joel C    15 年前

    是您未能通过IIS身份验证,还是未能通过SSR身份验证?域\machinename$帐户可能需要在ssrs中被授予权限才能运行您正试图自动化的报告。

    SSR通常能够很好地配置IIS,因此您不必乱弄这些设置。我仔细检查了我的安装(SSRS 2005,在SSRS 2000中工作可能有所不同,但您没有说明运行的是哪个版本),它设置为使用Windows身份验证并启用了模拟。这意味着,IIS基本上应该只对您的凭据进行身份验证(验证正确的用户名/密码),而不进行授权(确定该用户是否具有运行相关报告的权限)。然后,IIS将凭据传递给SSR,SSR具有自己的设置,用于确定哪些帐户具有查看报告的权限。

    此外,您可以直接在SSRS中自动按计划发送报告,因此如果您的计划相当基本(即每天、每周等),则可能根本不需要Windows服务。