几个月前,我们在 Windows 2008 R2 中的虚拟帐户下安装了 SQL Server 2012NT 服务\MSSQLSERVER“, 都好。
前几天,IT 部门的一位管理员在 SQL Server 2012 中安装了全文搜索组件(问题是他不记得在安装过程中他到底选择了什么设置),之后出现了不少问题:
A。我们检查了Windows日志,在应用程序中,发现MSSQLServer有相当多的异常日志,例如:
SQL Server 网络接口库无法为 SQL Server 服务注册服务主体名称 (SPN) [ MSSQLSvc/FooComputer.FooDomain.com:1433 ]。Windows 返回代码:0xffffffff,状态:63。无法注册 SPN 可能会导致集成身份验证使用 NTLM 而不是 Kerberos。这是一条信息性消息。仅当身份验证策略要求使用 Kerberos 身份验证并且未手动注册 SPN 时,才需要采取进一步措施。
这似乎是原因,但不知道为什么以及如何解决。
B.如果 SQL 作业的所有者是域用户(例如“MyDomain\FooUser”),则该作业将失败并显示以下消息:
作业失败。无法确定作业 JOBNAME 的所有者 (MyDomain\FooUser) 是否具有服务器访问权限(原因:无法获取有关 Windows NT 组/用户“MyDomain\FooUser”的信息,错误代码 0x6e。[SQLSTATE 42000](错误 15404))。
我们仔细搜索了一下,最后把所有者换成了“sa”,虽然不太妥当,但问题解决了。不过,我们还是想找出原因。
C。无法访问其他计算机中的文件夹等网络资源,例如以下sql将返回“访问被拒绝”:
DECLARE @CopyCommand nvarchar(1000)
set @CopyCommand = 'dir ' + Char(34) + '\\FooComputer\FooFolder\' + Char(34)
EXEC master..xp_cmdshell @CopyCommand
对于问题 C,根据 MSDN(http://technet.microsoft.com/en-us/library/ms143504.aspx)我们尝试授予帐户“MyDomain\SQLServerComputerName$”对该文件夹的完全控制访问权限,结果仍然是相同的。
答案1
这三个问题都是由于运行 SQL 服务的帐户不是域帐户而导致的,通过将 SQL 更改为在域帐户下运行,这些问题都可以得到解决。具体来说:
A - SPN 是 Kerberos 安全功能,需要域帐户,不适用于本地帐户
B - 为了从活动目录中读取,该服务需要域帐户的凭据
C - 远程计算机无法识别本地帐户,因此它们拒绝连接尝试。
以下是有关如何更改服务帐户的演练:
答案2
老问题了,但似乎没有合适的答案。NT Service\MSSQLSERVER 是本地虚拟帐户,它以计算机帐户的身份访问网络。只要计算机帐户可以访问共享和文件系统,您就应该能够备份到网络上的 UNC 路径。请参阅配置 Windows 服务帐户和权限。
答案3
当我们遇到此问题时,我们的解决方案是找到该文件夹并添加需要此权限的虚拟帐户所需的权限。添加帐户后,只需输入帐户,我们便可以监控日志文件,发现此文件夹/文件不再存在问题。