You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu20.04加AD域后MSSQL创建后续登录名报15404错误如何解决

Ubuntu 20.04 部署MSSQL接入AD后CREATE LOGIN报错15404问题解答

问题1:是否每次执行CREATE LOGIN后都需要重新登录MSSQL?

不需要,你创建的是SQL身份验证类型的登录名,不属于Windows域集成登录范畴,正常操作流程中完全不需要每次执行语句后重新登录MSSQL,该报错和登录状态无关。

问题2:微软官方技术文章是否有参考价值?

有参考价值,该文章覆盖的三类核心触发场景:SQL服务账号AD查询权限不足、Kerberos票证失效、AD对象属性异常,完全匹配你遇到的问题范畴,只是需要结合Linux平台下keytab的特性调整排查方向。

问题3:两个keytab的KVNO差异是否是问题诱因?

该差异就是核心报错诱因。
KVNO(密钥版本号)是AD域用来标识账号密码版本的属性,每次修改账号密码后AD侧的KVNO会自动+1。你当前的环境存在2个不一致的情况:

  1. MSSQL专用keytab /var/opt/mssql/secrets/mssql.keytab 中服务账号mssqlUser的KVNO为2,说明你后续更新过该账号的密码
  2. 系统全局Kerberos配置文件 /etc/krb5.keytab 中对应服务条目KVNO仍为旧版本1
    首次CREATE LOGIN操作成功是因为MSSQL启动时用mssql专用keytab申请的Kerberos票证还在有效期内,票证过期后SQL Server需要用系统全局keytab重新申请票证时,因为KVNO和AD侧当前值不匹配导致票证申请失败,返回错误码0x80090304,最终触发15404报错。

修复步骤

  • 先在AD域控制器上确认mssqlUser的当前真实KVNO,执行PowerShell命令:
Get-ADUser mssqlUser -Properties msDS-KeyVersionNumber
  • 备份现有系统全局keytab避免操作失败:
cp /etc/krb5.keytab /etc/krb5.keytab.bak
  • 同步更新/etc/krb5.keytab中mssqlUser相关条目,确保KVNO和AD侧、mssql专用keytab一致
  • 验证keytab有效性:
kinit -kt /var/opt/mssql/secrets/mssql.keytab mssqlUser@WIN2016.LOCAL

无报错则说明keytab配置正常

  • 重启MSSQL服务清除旧缓存票证:
systemctl restart mssql-server

后续注意事项

  • 每次修改mssqlUser的密码后,必须同时更新两个keytab的对应条目,保证KVNO和AD侧一致
  • 确保Ubuntu服务器的首选DNS指向AD域控制器,避免域名解析异常导致AD查询失败

内容的提问来源于stack exchange,提问作者Swapnil Kotwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 20:15:03