双重跳跃问题排查:SSIS写入网络共享CSV文件时访问被拒绝
SSIS包执行时网络共享访问拒绝问题(双重跳跃场景)
问题背景
- 应用调用SSIS包在文件服务器B的网络共享生成CSV,应用自身对该共享有读写权限
- Visual Studio本地运行SSIS包正常,TSQL启动SSIS作业正常
- 通过应用调用
DT_EXEC执行包、SSMS启动作业时,出现访问拒绝错误,确认是Kerberos双重跳跃问题 - 已配置AD中服务器A(SQL/SSIS所在)和服务器B(文件服务器)的
msDS-allowedToDelegateTo属性,配置如下:
服务器A的msDS-allowedToDelegateTo配置:
- cifs/VM-SQL-B
- cifs/VM-SQL-A.Domain.Biz
- cifs/VM-SQL-A
- cifs/VM-SQL-B.Domain.Biz
- WSMAN/VM-SQL-B.Domain.Biz
- HOST/VM-SQL-B
- MSSQLSvc/VM-SQL-A.Domain.Biz:1433
- MSSQLSvc/VM-SQL-B.Domain.Biz:1433
服务器B的msDS-allowedToDelegateTo配置:
- cifs/VM-SQL-A.Domain.Biz
- cifs/VM-SQL-A
- cifs/VM-SQL-B.Domain.Biz
- cifs/VM-SQL-B
- WSMAN/VM-SQL-A.Domain.Biz
- HOST/VM-SQL-A
- MSSQLSvc/VM-SQL-A.Domain.Biz:1433
- MSSQLSvc/VM-SQL-B.Domain.Biz:1433
可能遗漏的配置项及修复建议
1. 修正服务器A的委派服务主体指向(核心问题)
当前服务器A的cifs类服务主体指向VM-SQL-B,但服务器B是文件服务器,而非SQL服务器。需确保服务器A的计算机账户被允许委派到文件服务器B的CIFS服务:
- 添加
cifs/[文件服务器B的主机名]和cifs/[文件服务器B的完整域名]到服务器A的msDS-allowedToDelegateTo列表 - 移除无关的SQL服务器B的CIFS/WSMAN/HOST项(如果VM-SQL-B是另一台与文件共享无关的SQL服务器)
2. 确认SSIS服务运行账户的委派配置
如果SSIS服务使用域用户账户运行(而非本地系统/虚拟服务账户),需给该域账户配置约束委派:
- 在AD中找到该域账户,启用“仅信任此用户用于指定服务的委派”
- 添加文件服务器B的
cifs服务主体到其msDS-allowedToDelegateTo列表
3. 检查SQL代理作业的执行账户委派
通过SSMS启动作业时,需确认作业步骤的执行账户具备委派权限:
- 如果作业使用SQL Server代理服务账户执行:给该账户配置对文件服务器B的CIFS服务的委派权限
- 如果作业使用代理账户执行:给该代理账户配置相同的委派权限
4. 确保委派类型为“仅Kerberos”
在AD的计算机/用户账户属性的“委派”选项卡中:
- 选择“仅信任此计算机/用户用于指定服务的委派”
- 勾选“仅使用Kerberos”选项,避免回退到NTLM协议(NTLM不支持双重跳跃)
5. 验证SPN注册正确性
使用setspn工具检查相关服务的SPN是否正确注册:
- 文件服务器B:运行
setspn -L [文件服务器B主机名],需包含cifs/[主机名]和cifs/[FQDN] - 服务器A:运行
setspn -L [服务器A主机名],需包含MSSQLSvc/[FQDN]:1433和MsDtsServer150/[FQDN](SSIS服务的SPN,依SSIS版本调整)
6. 检查DT_EXEC的执行上下文
应用调用DT_EXEC时,需明确执行上下文:
- 如果应用在客户端远程调用服务器A上的
DT_EXEC,需确保应用的运行账户被允许委派到服务器A的SSIS服务(MsDtsServer150类SPN) - 若
DT_EXEC以本地账户执行,会使用NTLM协议,无法实现双重跳跃,需改用域账户执行
内容的提问来源于stack exchange,提问作者user2748264
相关产品推荐
相关产品推荐

