无法从 SQL 服务器上的 SSIS 包连接到受密码保护的 MS Access 2010 数据库
Cannot connect to password protected MS Access 2010 database from SSIS package on SQL Server
我的几个同事一直在使用 SSIS 连接到受密码保护的 MS Access 2010 数据库时遇到问题。我决定尝试对此进行故障排除。
为了简化情况,我创建了一个新的 MS Access 2010 数据库,其中有一个 table 和一行,没有密码保护。我复制了那个数据库,更新了一行中的数据,以便我可以区分来源,然后应用了密码。两个数据库都在我使用完整 UNC 路径的同一网络路径上。
我创建了两个 SSIS 包,每个数据库一个。所有包所做的都是从 table 中读取并将数据写入 CSV。对于与 Access 数据库的连接,我使用 Microsoft Office 12.0 Access 数据库引擎 OLE DB 提供程序。对于受密码保护的数据库连接,我将密码放在 Jet OLEDB:Database Password 字段中。
当 运行 在我的机器上通过 Visual Studio 时,两个 SSIS 包都按预期工作并将数据从 Access 数据库 table 写入与数据库相同位置的 CSV 文件.但是,当我上传包并为每个包创建一个 SQL 作业时,没有密码的作业有效,但有密码的作业无效。
这是我得到的错误(用户 Xed out)...
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.
有什么建议吗?
我在尝试连接到远程 Azure 数据库的 ADO 网络连接管理器时遇到了非常相似的问题。
您可以尝试通过表达式和变量将包括凭据的完整连接字符串分配给连接管理器。在 运行 时间分配此信息有更安全的方法,但这是一种快速测试方法。
这种类型的部署失败的一个主要原因是当您设置连接管理器时,密码是针对您的计算机进行加密的。一旦包被移动到生产机器上,它就无法解密保存在连接管理器中的密码。因此,该包将永远无法访问您的受保护数据库。
- 将您的包裹安全设置为 EncryptSensitiveWithPassword
- 当您部署包时,请确保您已重新输入连接的用户名和密码(或完整的连接字符串)。
我们的问题已通过 运行 此安装更新驱动程序得到修复。
https://www.microsoft.com/en-us/download/details.aspx?id=13255
我的几个同事一直在使用 SSIS 连接到受密码保护的 MS Access 2010 数据库时遇到问题。我决定尝试对此进行故障排除。
为了简化情况,我创建了一个新的 MS Access 2010 数据库,其中有一个 table 和一行,没有密码保护。我复制了那个数据库,更新了一行中的数据,以便我可以区分来源,然后应用了密码。两个数据库都在我使用完整 UNC 路径的同一网络路径上。
我创建了两个 SSIS 包,每个数据库一个。所有包所做的都是从 table 中读取并将数据写入 CSV。对于与 Access 数据库的连接,我使用 Microsoft Office 12.0 Access 数据库引擎 OLE DB 提供程序。对于受密码保护的数据库连接,我将密码放在 Jet OLEDB:Database Password 字段中。
当 运行 在我的机器上通过 Visual Studio 时,两个 SSIS 包都按预期工作并将数据从 Access 数据库 table 写入与数据库相同位置的 CSV 文件.但是,当我上传包并为每个包创建一个 SQL 作业时,没有密码的作业有效,但有密码的作业无效。
这是我得到的错误(用户 Xed out)...
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.
有什么建议吗?
我在尝试连接到远程 Azure 数据库的 ADO 网络连接管理器时遇到了非常相似的问题。
您可以尝试通过表达式和变量将包括凭据的完整连接字符串分配给连接管理器。在 运行 时间分配此信息有更安全的方法,但这是一种快速测试方法。
这种类型的部署失败的一个主要原因是当您设置连接管理器时,密码是针对您的计算机进行加密的。一旦包被移动到生产机器上,它就无法解密保存在连接管理器中的密码。因此,该包将永远无法访问您的受保护数据库。
- 将您的包裹安全设置为 EncryptSensitiveWithPassword
- 当您部署包时,请确保您已重新输入连接的用户名和密码(或完整的连接字符串)。
我们的问题已通过 运行 此安装更新驱动程序得到修复。
https://www.microsoft.com/en-us/download/details.aspx?id=13255