昨晚我们停电了,当服务器恢复正常时,我们的域用户无法访问我们的 SQL Server 2000 实例名称:MASSQL。
我们可以使用 SQL Authentication 访问。
- 我们尝试确保运行该服务的用户具有 SSPI 读写权限
- 我们尝试创建一个新用户
- 我们尝试使用 NETWORK SERVICE 帐户运行服务
- 我们尝试以本地系统帐户运行
- 我们尝试创建一个新的域管理员帐户并以新的域管理员帐户运行服务
我还针对问题 SQL Server 实例运行了以下命令:
setspn -L xsql2
结果
为 CN=MASSQL、CN=Computers、DC=ABC、DC=com 注册的 ServicePrincipalNames: 主机/MASSQL 主机/MASSQL.ABC.COM
我对一个没有问题的 SQL 实例运行了以下命令:
setspn -L xensql1
结果
为 CN=XENSQL1、CN=Computers、DC=ABC、DC=com 注册的 ServicePrincipalNames: WSMAN/XENSQL1 WSMAN/XENSQL1.ABC.com RestrictedKrbHost/XENSQL1 主机/XENSQL1 RestrictedKrbHost/XENSQL1.ABC.COM 主机/XENSQL1.ABC.COM
似乎非问题实例的结果有更多数据。我不知道这是否与一个是 2000 年,另一个是 2012 年的事实有关。
可能发生了什么?如何允许域用户再次登录?
SQL Server SPN 本身不是在计算机帐户上设置的,而是在运行 SQL Server 的帐户上设置的。如果服务帐户没有创建 SPN 的权限,您将需要为 SQL Server 服务创建两个 SPN。以下示例假定使用默认端口 1433。
请参阅为 Kerberos 连接注册服务主体名称
要检查它们是否已经存在:
但是,似乎您可能会遇到更大的问题。如果您将 SQL Server 配置为使用域管理员帐户运行,则它应该具有创建 SPN 的权限。
用于
setspn -X
查找相关 SQL Server 的重复 SPN。删除任何不符合相关 SQL Server 服务帐户的重复 SPN。
SQL Server 的服务主体名称采用以下形式:
假设您的 SQL Server 使用默认 TCP 端口 1433,我希望您需要以下服务器:
您可以使用以下命令创建这些 SPN:
其中 DOMAIN\Account 是 SQL Server 使用的服务帐户的名称。
如果您的 SQL Server 使用命名实例,SETSPN 命令如下所示:
Microsoft 的SQL Server 的 Kerberos 配置管理器可以帮助您快速诊断和修复此问题。
这是一个值得阅读的好故事:http: //houseofbrick.com/microsoft-made-an-easy-button-for-spn-and-double-hop-issues/
我得到了同样的错误,它很快得到了修复。
我在虚拟服务器环境中工作,正在使用 power shell 运行 SQL 脚本。在我的情况下,我只是断开了 RDP 连接并重新连接回虚拟服务器,错误消失了。