28

我们很难判断这些凭证对象是如何工作的。事实上,他们可能无法工作,我们预计他们如何工作。这是对当前问题的解释。使用DefaultCredentials和DefaultNetworkCredentials

我们有2台服务器需要通过webservices彼此交谈。第一个(我们称之为Server01)具有作为NetworkService帐户运行的Windows服务。另一个Server02具有与IIS 6.0一起运行的ReportingServices。 Server01上的Windows服务试图使用ReportingServices WebService生成报告并通过电子邮件发送。

所以,这是我们到目前为止所尝试的。

在运行时设置的凭据(这工作完全正常):

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

现在,如果我们可以使用一个通用的用户都将被罚款,但是......我们不允许。所以,我们试图利用DefaultCredetials或DefaultNetworkCredentials并把它传递到RS web服务:

rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials 

或者:

rs.Credentials = System.Net.CredentialCache.DefaultCredentials 

无论哪种方式将无法正常工作。我们总是从IIS获取401 Unautrorized。现在,我们知道的是,如果我们想给访问记录为网络服务资源,我们需要将它授予DOMAIN\MachineName$http://msdn.microsoft.com/en-us/library/ms998320.aspx):

授予访问远程SQL Server

如果您正在访问同一域(或受信任域中)的另一台服务器上的数据库时,网络服务帐户的网络凭据将用于向数据库进行身份验证。网络服务帐户的凭证格式为DomainName \ AspNetServer $,其中DomainName是ASP.NET服务器的域,AspNetServer是您的Web服务器名称。

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

我们假设以与IIS相同的方式授予访问权限可行。但是,它没有。或者至少,有些东西没有正确设置以便正确认证。

因此,这里有一些问题:

  1. 我们读过有关“冒充用户”的地方,我们需要设置这个地方在Windows服务

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

感谢您的阅读!

回答

0

以下是您可以检查的一些事项: - 为报告服务设置SPN(服务主体名称)你可以在谷歌找到很好的例子; - 允许委派(ClientCredentials.Windows.AllowImpersonationLevel)

0

问题是您无法向IIS进行身份验证或未能向SSRS进行身份验证? DOMAIN \ MachineName $帐户可能需要在SSRS中授予权限才能运行您尝试自动执行的报告。

SSRS通常在正确配置IIS方面做得非常好,所以你不需要搞砸那些设置。我仔细检查了我的安装(这是SSRS 2005,SSRS 2000中的工作可能有所不同,并且您没有说明您正在运行的是哪个版本),并将其设置为使用Windows身份验证并启用了模拟。这意味着IIS应该基本上只是验证您的凭据(验证正确的用户名/密码),而不是授权(确定该用户是否有权运行相关报告)。然后,IIS将凭据传递给SSRS,SSRS具有自己的设置以确定哪些帐户有权查看报告。

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

相关问题