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个不一致的情况:
- MSSQL专用keytab
/var/opt/mssql/secrets/mssql.keytab中服务账号mssqlUser的KVNO为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
相关产品推荐
相关产品推荐

