我有一个 SSIS 包,它从 MySQL 数据库中获取数据并将其放入 SQL Server 表中。与 MySQL 的连接是 ADO.net。该软件包在 BIDS 中运行良好。
我想将包部署为在 SQL Server 2008 上作为作业运行。MySQL 连接需要将敏感数据存储在包中或保存在某些外部配置源中。如果它存储在包中,它将使用特定于我的 Windows 用户配置文件的密钥进行加密,或者必须通过密码进行保护。
我尝试了三种设置 SQL Server 代理作业来执行此包的方法,但都失败了:
使用密码
我将包的 ProtectionLevel 设置为 EncryptSensitiveWithPassword 并为包提供密码。然后我将包的副本保存到 msdb。然后我可以连接到 SSIS 并运行该程序包,此时会提示我输入密码。
当我尝试将其安排为 SQL Server 中的作业时,系统会提示我通过单击作业步骤属性的配置选项卡来输入密码,我可以看到 /DECRYPT 开关已添加到命令行选项卡中。运行方式属性设置为 SQL Server 代理服务帐户,该帐户映射到具有 sysadmin 服务器角色的数据库登录。当我尝试开始这项工作时,我收到以下错误:
Executed as user: DOMAIN\UserROLE. Microsoft (R) SQL Server Execute Package Utility Version 10.0.5500.0 for 64-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 12:31:30 Error: 2012-07-03 12:31:31.20 Code: 0xC00291EC Source: Get Data Execute SQL Task Description: Failed to acquire connection "DATA_SOURCE". Connection may not be configured correctly or you may not have the right permissions on this connection. End Error DTExec: The package execution returned DTSER_FAILURE
似乎使用这种方法,包密码本身并没有存储在任何地方供作业访问它。
使用 XML 配置文件
然后,我创建了包的副本并将 ProtectionLevel 设置为 DontSaveSensitive,并设置了包配置以将 MySQL 凭据存储在 XML 文件中。然后我将它保存到 msdb,然后当我从 Integration Services 运行包时,我可以提供配置文件的路径,一切都很好。但是,当我再次为包设置作业时,我指向服务器上的配置文件,但作业失败并出现相同的错误。我想知道这是否是因为 SQL Server 代理没有关联的 Windows 帐户来允许它从存储在文件系统中的 XML 文件中读取。
使用 SQL Server 表配置
这次我创建了包的副本并将 ProtectionLevel 设置为 ServerStorage。然后我在目标 SQL Server 数据库中创建了一个 [SSIS 配置] 表。我修改了此表中的条目以包含 MySQL 数据源的密码。同样,包从 Integration Services 成功运行,但在从作业运行时失败并出现与以前相同的错误。我已经检查了 SQL Server 代理是否能够从 [SSIS 配置] 表中读取,我设置了一个独立的作业来测试它。
有人对我在这里应该做什么有任何建议吗?
我正在考虑为此放弃 SQL Server 代理作业,并回到由 windows 调度程序简单地安排程序包,但在认输之前我想我会先在这里尝试。