5

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

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

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

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

4

3 回答 3

3

在网络共享上,您需要在运行服务的服务器上添加“网络服务”帐户的权限。虽然这会起作用,但@nicholas 指出这可能会提供对共享的访问权限过于广泛的用户组。

另一种选择,我认为更好的选择是创建一个域帐户,然后授予该帐户对共享的读/写权限。然后,您将服务配置为具有适当权限的域帐户“运行”。

于 2009-12-23T16:38:59.923 回答
1

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

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

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

请参阅MDSN“网络服务帐户”参考

于 2014-06-30T10:18:33.090 回答
1

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

当网络服务帐户尝试访问托管在与自己相同的服务器上的共享时,计算机帐户将无法授予网络服务访问权限。在这种情况下,网络服务内置帐户将需要被授予访问文件系统位置和共享权限的权限。

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

于 2020-04-24T04:31:30.743 回答