故障转移群集在域环境中运行必须为群集服务账号正确配置最小权限和唯一SPN,否则Kerberos认证失败会导致SQL Server连接中断、资源无法上线等问题;需区分CNO与gMSA角色,严格按格式注册SPN(如MSSQLSvc/FQDN),并通过setspn -L、nltest、klist验证。
故障转移群集在域环境中运行,必须为群集服务账号正确配置权限和 spn,否则 kerberos 身份验证会失败,导致资源无法上线、sql server 连接中断、vmm 管理异常等问题。核心不是“给高权限”,而是按角色最小化授权,并确保 spn 唯一、可解析、与账户绑定准确。
群集服务账号类型与选择原则
Windows 故障转移群集(WSFC)本身不强制要求特定服务账号,但实际部署中需区分两类关键身份:
- CNO(群集名称对象):群集创建时自动在 AD 中生成的计算机账户,用于群集网络名称资源的身份。它默认具备“读取所有属性”“重置密码”等基础权限,但不能用于运行 SQL Server 或其他应用服务。
- 专用服务账户(推荐使用 gMSA):为 SQL Server、文件服务器、Docker 容器等群集角色指定的运行身份。企业级场景强烈建议用组托管服务账户(gMSA),避免明文密码管理,支持自动轮换和 Kerberos 约束委派。
必需的 AD 权限配置
无论使用 CNO 还是 gMSA,以下权限必须显式授予(通过 ADUC 或 PowerShell):
- 对 CNO 对象启用 “委托对计算机对象的控制”,允许其代表其他服务注册 SPN(尤其当 CNO 托管 SQL Server 实例时);
- 若使用 gMSA,需在 AD 中为其启用 “此账户支持委派”(仅限约束性委派),并明确指定可委派的服务(如 MSSQLSvc、HTTP);
- 确保服务账户属于 本地服务器上的 “Administrators” 组 和 “Hyper-V Administrators” 组(如涉及 Hyper-V 角色);
- 禁止该账户拥有交互式登录权限(如“允许在此计算机上登录”策略中移除),仅保留服务运行所需权限。
SPN 注册的关键规则与操作
SPN 是 Kerberos 认证的前提。错误注册会导致“登录失败:未找到对应服务主体名称”或“无法建立信任”类错误。
直播话术巡检系统(Windows版) — 实时语音转写、关键词检测、场景自动切换、告警推送、大屏可视化。支持 Windows VB-Cable 虚拟声卡音频采集,阿里云 ASR 实时识别。一键启动脚本,自动安装环境。
- SPN 必须注册在运行服务的账户名下,例如 SQL Server 实例由 gMSA
svc-sql-gmsa$运行,则 SPN 必须添加到该账户,而非 CNO 或本地系统账户; - 格式必须严格匹配服务类型与监听方式:
• 默认实例:MSSQLSvc/FQDN(如MSSQLSvc/sql01.contoso.com)
• 命名实例:MSSQLSvc/FQDN:INSTANCENAME(如MSSQLSvc/sql01.contoso.com:PROD); - 使用
setspn -S命令注册(-S可自动查重防冲突),例如:setspn -S MSSQLSvc/sql01.contoso.com CONTOSO\svc-sql-gmsa; - 禁用 IP 地址注册 SPN(如
MSSQLSvc/192.168.1.10),微软明确不支持,且易因 IP 变更导致认证中断。
验证与排错要点
配置完成后,务必验证三件事是否全部通过:
- 用
setspn -L <account></account>确认 SPN 已成功注册且无重复; - 用
nltest /sc_query:<domain></domain>检查群集节点与域控制器的安全通道是否正常; - 在客户端用
klist get MSSQLSvc/<fqdn></fqdn>尝试获取票据,成功即表示 SPN 可被定位、账户有足够权限、时间同步正常(域内偏差需 ≤5 分钟)。










