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

Spring Boot部署K8s后如何通过Active Directory用户连接MSSQL数据库

解决方案

根因分析

你遇到的报错是jTDS驱动的AD认证机制本身的适配局限导致的:

  • integratedSecurity=true依赖Windows系统自带的SSPI认证库,你部署在K8s的容器绝大多数是Linux环境,没有对应的依赖组件,直接启用必然认证失败
  • 仅添加domain=domain-name参数时,jTDS默认使用的NTLMv1认证要求应用所在节点必须加入目标AD域,未加域的K8s节点会被AD判定为不可信来源,触发不可信域报错

最优配置方案(使用微软官方JDBC驱动)

推荐直接替换为微软官方的MSSQL JDBC驱动,原生支持跨平台的AD账号密码认证,适配Linux容器场景:

  1. 替换驱动依赖,Maven配置示例如下:
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>12.4.2.jre11</version>
    <!-- 可根据你使用的JDK版本选择对应后缀的驱动版本,如jre8、jre17 -->
</dependency>
  1. 修改驱动类配置:
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
  1. 修改连接字符串,启用AD密码认证模式:
datasourceUrl: jdbc:sqlserver://server-host:1433;databaseName=db-name;instanceName=MSSQL;authentication=ActiveDirectoryPassword
  1. 账号密码配置填写完整AD账号:
spring.datasource.username=ad-username@your-domain.com
spring.datasource.password=ad账号对应的密码

兼容jTDS驱动的临时方案

如果暂时无法替换驱动,可以调整连接字符串参数强制使用NTLMv2认证:

datasourceUrl: jdbc:jtds:sqlserver://server-host/db-name;instance=MSSQL;domain=domain-name;useNTLMv2=true

注意用户名仅填写AD账号前缀即可,不要加域名后缀。该方案要求数据库端开启了NTLMv2认证支持,且K8s集群网络可正常访问AD域的认证端口。

排查注意事项

  • 确认AD账号已在MSSQL中创建登录名,且分配了目标数据库的访问权限
  • 确认K8s节点到数据库端口(默认1433,命名实例可能为动态端口,建议固定端口)的网络连通性
  • Linux环境下不要使用integratedSecurity=true参数,该参数仅支持Windows部署场景
  • 不要在用户名和连接字符串中重复配置域名,避免认证冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:57:03