【问题标题】:SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER- have tried everythingSSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER- 已尝试一切
【发布时间】:2019-11-08 14:55:45
【问题描述】:

我创建了一个 SSIS 包并尝试在本地运行它。我们使用指向 sql 表和 XML 配置文件的包配置。该程序包成功运行了大约一周,即使在我们的 STAGE 环境中部署到 SQL Server 代理作业也是如此。

现在,我可以让包运行的唯一方法是不使用包配置并选择 EncryptSensitivewithPassword。如果我将包更改为 DontSaveSensitive,我会不断收到以下错误:

一个 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E4D 描述:“用户‘Test_User’登录失败。”。 错误:AgentCompany 处的 0xC020801C,查找 [37]:SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“Test”的 AcquireConnection 方法调用失败,错误代码为 0xC0202009。在此之前可能会发布错误消息,其中包含有关 AcquireConnection 方法调用失败原因的更多信息。

奇怪的是,大约一周前,这个包在配置和 DontSaveSensitive 选项下运行良好。

我已更新配置文件以确保它正在建立与适当数据库的连接字符串。我还在连接管理器上测试了连接,它们都测试成功。

我还仔细检查了用户尝试连接的 SQL 数据库,以确保它在那里拥有权限​​并且确实如此。

我很困惑。请帮忙!

更新 dtsconfig 文件 重新创建连接管理器 使一些 DFT 任务 DelayValidation 为 true 将运行时更改为 32 位 删除包配置的 EncrpytPasswordSensitive --- 这可行,但这不是我公司的标准,这不是我之前开发和测试包的方式

【问题讨论】:

  • 您在为您的 SSIS 包使用 SQL Server 用户,并且您设置了提供用户名和密码的配置,我猜? SSIS 包期望找到的 XML 文件在哪里?当你在本地运行它时,你是如何运行它的——在 Visual Studio 中或通过命令行运行它?
  • xml 配置文件位于作业将运行的服务器上。它位于 e:\ 文件位置,因此当我在本地运行时,我将 E 驱动器指向包含 xml 配置的测试服务器。当我在本地运行时,我按下播放按钮/f5
  • 我首先查看 Visual Studio 中的结果/输出窗口。您正在寻找一个...信息(可能是警告)事件,该事件将指示应用配置值是否存在任何问题。除了这些,我会尝试将 SQL Server 连接管理器和任何使用所述连接管理器的数据流任务设置为 DelayValidation 为 true。如果这样可以解决问题,则包在将配置应用于连接之前尝试验证资源。延迟允许配置激活。
  • 好的,我可以试试这个。这很奇怪,因为我从来没有在我们的任何 ssis 包中将延迟验证设置为 true。
  • 更新----没用。我将尝试在一个单独的 SSDT 实例中重建包并查看。很快就会回复。

标签: sql-server ssis database-connection error-code sql-job


【解决方案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 的策略是在运行时使用配置或显式覆盖来提供用户名和密码。我的典型方法是使用基于表而不是 XML 的配置,因为我更擅长保护表中的敏感数据,而不是在文件系统上使用 ACL。我们在多个开发人员和基于文件的配置中遇到的另一个挑战是每个人都必须将他们的文件系统设置为相同(我们开发人员是独特的彩虹雪花,所以这不太可能)或者我们需要使用一个很棒的网络共享文件,直到有人在其中添加了他们自己的价值并破坏了它或删除了您的更改或任何其他挑战。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多