You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL Server 2014 SPN无法创建(状态43):Kerberos认证配置求助

解决SQL Server 2014 Kerberos认证中SPN创建失败(状态43)的问题

从你的描述来看,手动重启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属性:

    1. 打开AD用户和计算机,找到你的目标用户账户
    2. 右键→属性→安全→高级→添加,选择该用户账户
    3. 在权限列表里,确保勾选了读取servicePrincipalName写入servicePrincipalName这两项权限
  • 调整服务启动时机
    服务器重启时,如果SQL Server服务在域服务完全建立连接之前就启动,会因为无法联系AD而注册SPN失败。把服务启动类型改成**自动(延迟启动)**就能解决这个问题:

    1. 打开SQL Server配置管理器
    2. 找到对应的SQL Server服务,右键→属性→服务
    3. 启动类型选择「自动(延迟启动)」,应用后重启服务器测试
  • 手动预注册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

火山引擎 最新活动