我有一个 Windows 服务在 SERVER_X 上作为本地系统运行,它试图访问 SERVER_Y 上托管的 UNC 共享上的脚本。
根据下面的链接,我已授予 SERVER_X 的计算机帐户访问 SERVER_Y 上的 UNC 的权限。
如何授予对域网络中本地 SYSTEM 帐户的共享文件夹的访问权限
但是,Windows 服务无法访问该文件(拒绝访问错误)。
dir \\SERVER_X\share
Access is denied.
在安全事件日志(在 SERVER_Y 上)中,我看到 SERVER_X 正在尝试以 NT AUTHORITY\ANONYMOUS LOGON 身份访问 UNC 共享。我认为我应该在安全事件日志中看到计算机帐户(即 DOMAIN\SERVER_X)。
两台服务器都是 Windows Server 2003 SE SP2。
任何帮助将不胜感激!
我发现了这个Microsoft 博客,它让我看到了使用服务器的主机名与 CNAME 的对比。
具体来说,以下片段:
和...
和...
注意:在 Windows Server 2008 主机上,我可以使用 CNAME 成功执行 dir 命令。
解决方案 1:
使用主机名而不是 CNAME。
我验证了,如果我从 Windows Server 2003 主机使用主机名 (ie
\\HOSTNAME\share
) 而不是 CNAME (ie\\CNAME\share
) 访问 UNC 共享,则访问将正常工作。示例 - 工作:
示例 - 不起作用:
解决方案 2:
为 CNAME 设置 SPN(服务主体名称)。
完成此操作后
dir \\CNAME\share
。另请参阅如何配置 Windows 机器以允许与 DNS 别名共享文件以获取更多信息。
因为当您在没有先前建立的网络凭据的情况下访问 UNC 共享时,您最终会成为匿名的。本地SYSTEM 帐户显然不是有效的网络登录名。
在用户帐户下运行服务以绕过问题。