从IIS托管的.NET 8 Web服务运行SSIS包时连接失败排查
问题原因分析
核心问题是Kerberos身份验证的双跳限制,具体细节如下:
原Windows服务的单跳场景:之前的.NET 4.8 Windows服务运行在SSIS服务器本地,调用
[catalog].[create_execution]等存储过程时,应用池的域账户身份是本地直接传递给SQL Server(SSIS目录所在实例),属于单跳访问,NTLM或Kerberos都能正常处理身份验证,无需额外配置。IIS Web服务的双跳场景:现在的.NET 8 Web服务部署在另一台服务器,身份传递需要经过两次跳转:
- 第一跳:IIS服务器上的应用池域账户,将身份传递到SSIS服务器的SQL实例(调用SSIS目录存储过程);
- 第二跳:SSIS执行包时,需要用该域账户访问目标数据库(或其他资源)。
默认情况下,NTLM不支持跨服务器的身份传递(双跳),而Kerberos需要提前配置委托权限才能允许身份跨多台服务器传递。如果未配置,身份会被降级为NT AUTHORITY\ANONYMOUS LOGON,导致登录失败。
关键验证与解决方向
检查Kerberos配置:
- 确认SSIS服务器和目标数据库服务器的SQL服务已注册正确的SPN(服务主体名称),可通过命令
setspn -L <SQL服务运行账户>查看,需包含MSSQLSvc/<服务器名>和MSSQLSvc/<服务器名>:<端口/实例名>格式的SPN。 - 在Active Directory中,为应用池的域账户配置约束委托:
- 打开AD用户和计算机,找到该域账户的属性;
- 切换到「委托」标签,选择「信任此用户委派到指定服务」,添加目标SQL Server的SPN(MSSQLSvc开头的条目)。
- 确认SSIS服务器和目标数据库服务器的SQL服务已注册正确的SPN(服务主体名称),可通过命令
排查.NET 8 SqlClient行为变化:
确认连接字符串中是否包含Integrated Security=True(确保使用Windows身份验证),.NET 8的SqlClient默认启用了更严格的安全设置,但此问题核心还是身份传递,而非客户端配置。IIS配置确认:
确保Web服务的应用池确实使用指定的域账户运行(可在IIS管理器的应用池高级设置中验证),且未启用身份模拟(如果启用模拟,会使用客户端身份而非应用池账户,导致身份传递异常)。
内容的提问来源于stack exchange,提问作者EdH
相关产品推荐
相关产品推荐

