【问题标题】:Cannot connect to password protected MS Access 2010 database from SSIS package on SQL Server无法从 SQL Server 上的 SSIS 包连接到受密码保护的 MS Access 2010 数据库
【发布时间】:2023-03-09 22:32:01
【问题描述】:

我的几个同事在使用 SSIS 连接到受密码保护的 MS Access 2010 数据库时遇到问题。我决定尝试解决此问题。

为了简化这种情况,我创建了一个新的 MS Access 2010 数据库,其中包含一个表和一行,没有密码保护。我复制了该数据库,更新了一行中的数据,以便我可以区分来源,然后应用密码。这两个数据库位于我使用完整 UNC 路径的同一网络路径上。

我创建了两个 SSIS 包,每个数据库一个。所有包所做的都是从一个表中读取数据并将数据写入 CSV。对于与 Access 数据库的连接,我使用 Microsoft Office 12.0 Access Database Engine OLE DB Provider。对于受密码保护的数据库连接,我将密码放在 Jet OLEDB:Database Password 字段中。

当通过 Visual Studio 在我的机器上运行时,两个 SSIS 包都按预期工作,并将 Access 数据库表中的数据写入与数据库相同位置的 CSV 文件。但是,当我上传包并为每个包创建一个 SQL 作业时,没有密码的可以工作,但有密码的不能。

这是我得到的错误(用户已退出)...

Executed as user: XXXXXX\XXXXXXXX. Microsoft (R) SQL Server Execute Package Utility  Version 10.50.4000.0 for 32-bit  Copyright (C) Microsoft Corporation 2010. All rights reserved.    
Started:  1:42:02 PM  

Error: 2016-07-11 13:42:03.94     
Code: 0xC0202009     
Source: Package1 Connection manager "TestPassword"     
Description: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. 

Error code: 0x80004005.  An OLE DB record is available.  
Source: "Microsoft Office Access Database Engine"  
Hresult: 0x80004005  
Description: "Cannot open database ''.  It may not be a database that your application recognizes, or the file may be corrupt.".  End Error  

Error: 2016-07-11 13:42:03.94     
Code: 0xC020801C     
Source: Data Flow Task OLE DB Source [1]     
Description: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.  The AcquireConnection method call to the connection manager "TestPassword" failed with error code 0xC0202009.  There may be error messages posted before this with more information on why the AcquireConnection method call failed.  End Error  

Error: 2016-07-11 13:42:03.95     
Code: 0xC0047017     
Source: Data Flow Task SSIS.Pipeline     
Description: component "OLE DB Source" (1) failed validation and returned error code 0xC020801C.  End Error  

Error: 2016-07-11 13:42:03.95     
Code: 0xC004700C     
Source: Data Flow Task SSIS.Pipeline     
Description: One or more component failed validation.  End Error  

Error: 2016-07-11 13:42:03.95     
Code: 0xC0024107     
Source: Data Flow Task      
Description: There were errors during task validation.  End Error  

DTExec: The package execution returned DTSER_FAILURE (1).  

Started:  1:42:02 PM  Finished: 1:42:03 PM  Elapsed:  1.903 seconds.  The package execution failed.  The step failed.

有什么建议吗?

【问题讨论】:

  • 我们认为问题在于服务器的驱动程序过时。如果这是问题所在,我会发表评论。

标签: ssis ms-access-2010 ssis-2008


【解决方案1】:

ADO Net 连接管理器尝试连接到远程 Azure DB 时遇到了非常相似的问题。

您可以尝试通过表达式和变量将包括凭据在内的完整连接字符串分配给连接管理器。有更安全的方法可以在运行时分配此信息,但这是一种快速测试方法。

此类部署失败的主要原因之一是在您设置连接管理器时,密码已针对您的计算机进行了加密。一旦包被移动到生产机器上,它就无法解密保存在连接管理器中的密码。因此,该软件包将永远无法访问您受保护的数据库。

【讨论】:

    【解决方案2】:

    通过运行此安装更新驱动程序解决了我们的问题。

    https://www.microsoft.com/en-us/download/details.aspx?id=13255

    【讨论】:

      【解决方案3】:
      1. 将您的包安全设置为 EncryptSensitiveWithPassword
      2. 部署包时,请确保您已重新输入连接的用户名和密码(或完整的连接字符串)。

      【讨论】:

      • 我在哪里输入用于加密包的密码?每当我在 PackagePassword 包属性中放一些东西时,它似乎就消失了。
      • 在属性页面 PackagePassword 中,单击右侧的“...”按钮。然后你会得到一个对话框来输入,然后重新输入你的密码。不过你是对的 - 这不是很直观!
      • 当我这样做时,我仍然会得到一个空白的属性值。它似乎应该是“********”或类似的东西。如果我确实让它坚持下去,我该如何以及在哪里指定我的 SQL Server 上的密码值?
      • 我想我知道如何在 SQL Server 上指定密码了。这是无法接受的。 stackoverflow.com/a/3040091/632537
      • 如果您对答案感到满意,您可以将其标记为 - 谢谢。
      猜你喜欢
      • 2011-02-03
      • 1970-01-01
      • 2018-08-17
      • 2014-10-02
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多