我已经创建了一个SSIS程序包,并且试图在本地运行它。我们使用指向sql表和XML配置文件的程序包配置。该程序包成功运行了大约一周,即使已部署到我们STAGE环境中的SQL Server代理作业中。
现在,让我可以运行软件包的唯一方法是不使用软件包配置,而是选择EncryptSensitivewithPassword。如果将程序包更改为DontSaveSensitive,则会不断出现以下错误:
OLE DB记录可用。源:“ Microsoft SQL Server本机客户端11.0”结果:0x80040E4D说明:“用户'Test_User'的登录失败。”。 错误:AgentCompany处的错误0xC020801C,查找[37]:SSIS错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“测试”的AcquireConnection方法调用失败,错误代码为0xC0202009。在此之前可能会发布错误消息,并详细说明为什么AcquireConnection方法调用失败的原因。
太奇怪了,大约一周前,该程序包在配置和DontSaveSensitive选项下运行良好。
我已经更新了配置文件,以确保它正在建立到适当数据库的连接字符串。我还在连接管理器上测试了连接性,它们都测试成功了。
我还仔细检查了用户尝试连接的SQL数据库,以确保它在那里具有权限。
我很困惑。请帮忙!
更新dtsconfig文件 重新创建连接管理器 使一些DFT任务DelayValidation变为true 将运行时更改为32位 EncrpytPasswordSensitive,删除了软件包配置---可以,但这不是我公司的标准,这也不是我之前开发和测试软件包的方式
答案 0 :(得分:1)
当您打开/运行程序包时,会触发一个OnInformation事件,提示类似
该软件包正在尝试从XML文件“ c:\ ssisdata \ so_56776576.dtsconfig”进行配置。
Visual Studio / SSDT打开/运行一个表示使用配置但由于某种原因无法获取配置的软件包时,您应该会看到类似消息
警告加载so_56776576.dtsx:导入配置文件失败:“ c:\ ssisdata \ so_56776576.dtsconfig”
和
警告正在加载so_56776576.dtsx:找不到配置文件“ c:\ ssisdata \ so_56776576.dtsconfig”。检查目录和文件名。
和
警告正在加载so_56776576.dtsx:无法加载程序包的至少一个配置条目。检查配置条目中的“配置1”和以前的警告,以查看有关哪些配置失败的描述。
如果有人手动编辑了配置文件并破坏了XML,您会看到类似的警告
无法加载XML配置文件。 XML配置文件格式错误或无效
关于配置的重要注意事项-如果找不到配置,SSIS将与设计时间值一起继续。因此,检查程序包运行时发出的警告至关重要。如果您是手动运行,请确保已指定/rep ew
,以便报告错误和警告。
该程序包的保护级别为EncryptSensitiveWithUserKey
,这意味着程序包创建者的AD凭据用于对可能中包含敏感信息的内容进行哈希处理。我可能在连接字符串中使用AD身份验证,并指定应该信任该连接,但是整个块仍将针对Active Directory帐户进行加密。当您尝试维护程序包时,由于您不是我,因此无法解密敏感数据。
使用共享密钥(EncryptSensitiveWithPassword / EncryptPackageWithPassword)的两种方法是麻烦的,而且所有人都知道秘密,这与保密精神背道而驰。您所确定的另一种方法是DontSaveSensitive
,这就是我要做的所有事情。
要克服的问题是,使用DontSaveSensitive
是,每次保存时,SSIS都会清除可能保留的用户名和密码的任何知识-例如连接管理器。针对这一问题的2005/2008策略是在运行时使用Configuration或显式替代来提供用户名和密码。我的典型方法是使用基于表的配置,而不是基于XML的配置,因为与在文件系统上处理ACL相比,我更擅长保护表中的敏感数据。我们对多个开发人员和基于文件的配置所面临的另一个挑战是,要么每个人都必须设置相同的文件系统(并且我们的开发人员是唯一的彩虹雪花,所以这不太可能发生),要么我们需要使用一个网络共享文件,直到有人在其中添加了自己的价值并打破了它,或者删除了您的更改或其他任何挑战。