日期:2014-05-18 浏览次数:20408 次
在SSIS包中使用FTP控件,从FTP服务器上读取文件,本来是一件很简单的事情,在BIDS中也很容易地调试通过,可是发布到SSIS服务器后,用SQL Agent去定时运行,却怎么也不能成功。错误消息如下: OnError,XXXX,XXXX\appsuser,Pkg_XXXx,{DE4F22C0-649A-4CF3-BAE4-AD6B645D8D9E},{8DFB2020-24FB-4231-821B-0440E9FD3FE6},12/21/2007 12:30:02 PM,12/21/2007 12:30:02 PM,-1073573489,0x,Unable to connect to FTP server using "FTP Connection Manager". 这是因为Windows Agent Service或SSIS Service运行的用户和开发SSIS包的用户不同,默认,SSIS使用Network Service这个系统用户启动的,而Agent是用Local System这个用户启动的。而默认的SSIS包的package protection level是 EncryptSensitiveWithUserKey。 如果是数据库的Connection,一般使用包配置文件,然后在配置文件中手动填入密码,可解决这个问题,但是对于FTP的connection, 配置文件也不管用,解决这个问题的方法如下: 1)把SSIS包的protection level设置成EncryptSensitiveWithPassword,然后设置包的密码; 2)然后配置包,生成包的配置文件,把包的PackagePassword放在配置文件中(注意,生成配置文件后,配置文件并不包含密码,需要手动打开配置文件,填写密码) 3)发布包; 这样,包就可以在Agent下运行了。 特别注意网上有多种解决方法,比如1)修改windows service的用户 2)修改包的Protection Level为DontSaveSensitivePassword等 但是最后都不管用,只有以上方法可用。 另外想说一下第二步,如果创建Job直接调用加密包,据说直接在创建Job时输入密码就可以了,不用配置文件,(这个本人没有测试过),但是如果出现PackageA调用PackageB的,而PackageB是加密包,Agent调用的是packageA, 那么在创建Job时就不会提示用户数据密码,这时候就必须使用包配置文件,把PackagePassword放在配置文件中。