部署于Linux的.NET Core应用远程连接SQL Server连接字符串异常问题
Linux环境.NET Core连接SQL Server连接串修复方案
你当前使用的连接字符串需要针对性修改,两个配置项适配问题共同导致了Linux环境下连接失败:
1. 实例名解析逻辑适配
Windows环境下Server=serverabc\\dev_xys的双反斜杠实例名标识,在Linux的SQL Server驱动中解析规则存在差异,且该写法默认依赖目标SQL Server所在服务器的1434 UDP端口开放、SQL Browser服务正常运行,才能解析实例名对应的TCP端口。报错中的Cannot connect to SQL Server Browser就是该解析流程失败导致。
另外你给出的原始配置片段中SQLDbContext前缺少双引号,注意JSON格式合法性,避免配置读取失败。
修复方案二选一:
- 直接指定端口号(更稳定,无额外依赖):先确认
dev_xys实例对应的TCP监听端口,假设为1455,将Server段修改为Server=serverabc,1455,跳过实例名解析步骤 - 保留实例名写法:确保目标SQL Server的1434 UDP端口对Linux部署服务器开放,且SQL Browser服务已正常启动,JSON配置中的双反斜杠转义写法本身无需调整
2. 集成身份认证适配
Integrated Security = True是Windows原生的SSPI身份认证方案,Linux环境下未配置Kerberos、未加入域的情况下无法识别该配置,你确认的服务账号权限是Windows域账号的话,Linux环境默认无法直接复用。
修复方案二选一:
- 改用SQL身份认证(最常用方案):删除
Integrated Security = True配置,新增SQL账号密码配置:User Id=你的SQL账号;Password=对应的密码; - 保留域账号集成认证:先给Linux服务器配置Kerberos并加入对应域,确保运行.NET服务的账号能正常获取Kerberos票证,再将连接串的集成认证配置修改为
Integrated Security=SSPI
参考修复后配置(SQL身份认证模式)
"ConnectionStrings" : { "SQLDbContext": "Server=serverabc,你的实例端口;Database=mynewDatabase;User Id=sql登录账号;Password=sql登录密码;TrustServerCertificate=True" }
注:如果SQL Server使用自签名证书,需要添加TrustServerCertificate=True配置避免证书校验失败
内容的提问来源于stack exchange,提问作者MicroMan
相关产品推荐
相关产品推荐

