SQL Server 2014 SPN无法创建(状态43):Kerberos认证配置求助
从你的描述来看,手动重启SQL Server服务时SPN能正常在AD用户账户上重建,Kerberos认证也没问题,但偶尔会出现SPN创建失败、状态码43的情况——这个问题我之前在处理类似配置时也遇到过,大概率是SPN冲突、AD同步延迟或者服务启动时机的问题,下面给你几个针对性的解决步骤:
先清理旧的SPN冲突
之前你用本地系统账户时,SPN是注册在服务器计算机账户下的,虽然切换到AD普通用户后手动重启会在新账户上创建SPN,但旧的SPN可能还残留在计算机账户里。当服务自动启动时,尝试注册SPN会发现AD里已经存在相同的条目,就会抛出状态43的错误。
你可以用这两个命令排查和清理:# 查看计算机账户下的所有MSSQLSvc类SPN setspn -L DOMAIN\SERVERNAME$ # 删除重复的SPN,替换成你的实际FQDN、端口/实例名和计算机账户 setspn -D MSSQLSvc/your-server-fqdn:1433 DOMAIN\SERVERNAME$ setspn -D MSSQLSvc/your-server-fqdn:YourInstanceName DOMAIN\SERVERNAME$确认AD用户的SPN权限
虽然手动重启能成功,但还是要确保这个AD普通用户拥有足够的权限来管理自己的SPN属性:- 打开AD用户和计算机,找到你的目标用户账户
- 右键→属性→安全→高级→添加,选择该用户账户
- 在权限列表里,确保勾选了读取servicePrincipalName和写入servicePrincipalName这两项权限
调整服务启动时机
服务器重启时,如果SQL Server服务在域服务完全建立连接之前就启动,会因为无法联系AD而注册SPN失败。把服务启动类型改成**自动(延迟启动)**就能解决这个问题:- 打开SQL Server配置管理器
- 找到对应的SQL Server服务,右键→属性→服务
- 启动类型选择「自动(延迟启动)」,应用后重启服务器测试
手动预注册SPN(兜底方案)
如果自动注册还是不稳定,你可以手动在AD用户账户上预创建所有需要的SPN,这样服务启动时就不会再尝试注册,自然不会出现失败的情况:# 注册FQDN+端口的SPN setspn -S MSSQLSvc/your-server-fqdn:1433 DOMAIN\YourADUser # 注册FQDN+实例名的SPN setspn -S MSSQLSvc/your-server-fqdn:YourInstanceName DOMAIN\YourADUser # 注册NetBIOS名+端口的SPN(可选但推荐) setspn -S MSSQLSvc/your-server-netbios:1433 DOMAIN\YourADUser # 注册NetBIOS名+实例名的SPN(可选但推荐) setspn -S MSSQLSvc/your-server-netbios:YourInstanceName DOMAIN\YourADUser执行完后用
setspn -L DOMAIN\YourADUser检查,确认所有SPN都已注册,再重启SQL Server服务即可。检查AD复制状态
偶尔状态43也可能是AD域控制器之间的复制延迟导致的——比如你手动删除了计算机账户的SPN,但其他DC还没同步这个变更,服务启动时连接到未同步的DC就会报错。用repadmin /showrepl命令检查所有DC的复制状态,确保没有失败的复制任务。
内容的提问来源于stack exchange,提问作者Samuel Harmer




