1

我有一个 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 调度程序简单地安排程序包,但在认输之前我想我会先在这里尝试。

4

1 回答 1

0

我正在使用EncryptSensitiveWithPassword按照您上面描述的设置加密密码的方法,并且看不到您做错了什么。请记住在使用keep protection level of the original package集成服务导入包时使用选项,但看起来您也在这样做。

尝试将角色设置SQLAgentOperatorRole为您的 SQL Server 代理服务帐户,您没有提及,我不确定您是否这样做。这可能会解决您的权限问题。(喜欢通过评论来回答,但我在这里也没有权限:)

于 2012-07-03T12:52:45.613 回答