访问网络服务帐户下的Windows共享

时间:2009-12-23 16:35:25

标签: c# windows-services credentials network-share windows-share

我有两台装有Windows Server 2003的计算机。一台计算机在网络上有一些共享文件夹,另一台计算机有一台需要访问这些共享文件夹的Windows服务(用C#编写,在网络服务帐户下运行)。 / p>

以下代码作为登录用户正常工作,但在网络服务帐户下执行时会引发异常。

File.WriteAllText(@"C:\temp\temp.txt", File.ReadAllLines(@"\\NetworkServer\Test\test.txt")[0]);

异常消息是Logon failure: unknown user name or bad password。如何让此代码在网络服务帐户下运行?它是Windows Server 2003中的设置,还是我需要添加一些代码才能使其正常工作?

3 个答案:

答案 0 :(得分:3)

在网络共享上,您需要在运行该服务的服务器上为“网络服务”帐户添加权限。虽然这样可行,但@nicholas指出,这可能会为一组过多的用户提供访问共享的权限。

另一个选项,在我看来 更好的选项 ,就是创建一个域帐户,然后在该共享上授予该帐户读/写权限。然后,将服务配置为“以具有适当权限的域帐户运行”。

答案 1 :(得分:0)

据我所知,@ Nate的回答不正确或不清楚。它没有解释Network Service如何在网络上进行身份验证。

Network Service帐户对本地系统的权限非常有限,它会在网络上显示计算机的凭据。因此,如果您需要访问Network Service帐户下的网络资源(例如网络共享),则必须授予对服务正常运行的计算机帐户的访问权限。

为本地Network Service帐户提供对网络资源的访问权限,根本无法正常工作,您将不断收到身份验证/授权错误。

请参阅MDSN "NetworkService Account" reference

答案 2 :(得分:0)

当网络服务帐户尝试访问远程服务器上的共享时,它将使用计算机帐户在网络上进行身份验证。授予权限后,该帐户将带有$后缀(例如servername$)。

当网络服务帐户尝试访问SAME SERVER AS ASSELF上托管的共享时,计算机帐户将无法授予网络服务访问权限。在这种情况下,需要授予Network Service内置帐户对文件系统位置和共享权限的访问权限。

基本上,当您授予网络服务对共享的访问权限时,它只会影响以该身份在本地计算机上运行的服务。对于远程计算机,必须使用计算机帐户,并且不能使用计算机帐户 向网络服务授予对本地资源的访问权限。