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

搭建AD连接的Linux部署SQL Server容器时kinit报错求助

解决Linux SQL Server容器中kinit刷新Kerberos票据时的预认证失败问题

常见排查与修复步骤:

  • 检查AD账号预认证设置
    登录AD域控制器,找到SQL Server对应的服务账号,进入「属性」→「账户」选项卡:

    • 确保「不需要Kerberos预认证」未被勾选(该选项仅在特定场景下使用,开启后可能导致预认证流程异常)
    • 确认账号未被锁定、密码未过期
  • 验证krb5.conf配置
    容器内的/etc/krb5.conf必须正确指向AD域,示例配置如下:

    [libdefaults]
        default_realm = YOURDOMAIN.COM
        dns_lookup_kdc = true
        dns_lookup_realm = true
    [realms]
        YOURDOMAIN.COM = {
            kdc = dc.yourdomain.com
            admin_server = dc.yourdomain.com
            default_domain = yourdomain.com
        }
    [domain_realm]
        .yourdomain.com = YOURDOMAIN.COM
        yourdomain.com = YOURDOMAIN.COM
    

    修改配置后,重启SQL Server容器或容器内的SQL服务:systemctl restart mssql-server

  • 确认服务账号密码有效性
    直接在容器内执行kinit sqlservice@YOURDOMAIN.COM,手动输入密码测试:

    • 若提示密码错误,重置AD账号密码后,同步更新SQL Server的AD配置(通过mssql-conf set network.privilegedadaccount sqlservice@YOURDOMAIN.COM及密码设置)
    • 若提示密码过期,在AD中重置账号密码并按需设置为永不过期
  • 检查容器DNS解析
    容器必须能正确解析AD域控制器的主机名,查看DNS配置:cat /etc/resolv.conf,确保DNS服务器为AD域控制器IP或可解析域的DNS服务器。若配置错误,可在启动容器时通过--dns参数指定AD DNS:docker run ... --dns 192.168.1.100

  • 验证SPN注册正确性
    SQL Server的服务主体名称(SPN)必须与容器主机名匹配并注册到服务账号下:

    • 在域控制器上执行setspn -L sqlservice@YOURDOMAIN.COM,检查是否包含MSSQLSvc/container-hostname.yourdomain.com及MSSQLSvc/container-hostname.yourdomain.com:1433
    • 若缺失,执行setspn -A MSSQLSvc/container-hostname.yourdomain.com sqlservice和setspn -A MSSQLSvc/container-hostname.yourdomain.com:1433 sqlservice添加
  • 排查主机安全模块限制
    若容器主机启用了SELinux或AppArmor,可能阻止kinit操作:

    • 临时关闭SELinux测试:setenforce 0,若问题解决,需调整SELinux策略(如添加容器相关规则),而非长期关闭
    • AppArmor可通过aa-status查看状态,必要时临时禁用对应配置测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:00:03