SQL Server中的SSIS:如何使其存储密码

时间:2015-04-06 11:13:23

标签: sql-server sql-server-2008 ssis sql-server-2008-r2

我是一个Oracle人员,他突然让SQL Server和SSIS掉到了他的腿上,所以我可能没有以正确的方式使用这个术语,但是这里有:

有一个SSIS包可以将数据从Oracle数据库提取到我们的SQL Server 2008 R2仓库中。如果我在SSIS Visual Studio 2008中打开此包,系统会提示我输入密码:

  

包'MyRefresh.dtsx'中的敏感数据已使用密码加密。

包装本身。我输入密码。我运行包。效果很好。 之前的人已经将这个软件包加载到SQL Server中,并且每天凌晨1点运行一次,并且它也很有用。

最近,有一些数据库更改。当然,包裹停止了工作。我能够修复它,而且,如果通过SSIS Visual Studio 2008运行它会运行得很好。但是,当我将它加载到SQL Server中并且作业运行时,它失败了:

  

0xC001405F无法解密加密的XML节点,因为未指定密码或密码不正确。

我在哪里/如何指定密码以便作业可以运行?

3 个答案:

答案 0 :(得分:8)

延迟回答,但可能对其他用户/帖子访问者有帮助

简而言之,要将程序包加载到SQL Server,必须使用指定的新凭据导出它,然后将其导回到指定的文件夹中。

以下是我在设置SSIS package encryption manually in SSMS时发现的文章,该文章提供了有关如何导入/导出加密包的快速教程。

请注意,保护级别选项会在一种情况下考虑敏感数据,或在其他情况下考虑特定包中包含的所有数据。在Integration Services中默认设置被视为敏感的数据:先前标记为由SSIS服务控制的精细,不可更改的XML标记的变量,以及密码,如果“使用密码加密所有数据”,则可将其视为敏感被选中。

包裹保护等级:

  • 不保存敏感数据:如果存在敏感数据,则在导出新包后不会包含敏感数据,但仍然不可用;
  • 使用用户密钥加密敏感数据:敏感数据将使用当前用户凭据进行加密,并且程序包仍可在本地服务器上使用。哪些数据将被视为敏感数据,取决于包的创建者/所有者;
  • 使用密码加密敏感数据:在此级别,必须提供密码 - 如果用户希望仅将敏感数据保密,则需要这种加密。
  • 使用用户密钥加密所有数据:与敏感数据的加密相同,它可以在本地服务器上使用,但它会考虑包中的所有数据;
  • 使用密码加密所有数据:此级别加密包中的所有数据,需要密码,并提供100%的隐私。

希望这些信息有用。

答案 1 :(得分:3)

如果您有机会我建议您不再使用 EncryptAllWithPassword 保护级别。有关包加密级别的更多信息,请阅读此处:

http://sqlblog.com/blogs/eric_johnson/archive/2010/01/12/understanding-the-ssis-package-protection-level.aspx

简而言之,包加密的想法是阻止人们打开包XML以提取纯文本密码。但一般来说,这是以不安全的方式实施的,这会破坏目的。

我建议您在整个过程中使用Windows身份验证:

  1. 确保您的Oracle服务器支持外部身份验证
  2. 使用SQL Agent Windows服务帐户
  3. 创建外部标识的Oracle登录
  4. 在Oracle连接管理器中,使用外部身份验证(使用用户/登录,无密码)
  5. 如果您有任何SQL Server连接管理器,则需要执行相同的操作(在SQL Server中,这称为Windows身份验证)
  6. 最后确保所有开发人员都使用SQL Server中的Windows身份验证和Oracle中的外部身份验证进行身份验证,以便他们可以在BIDS中运行该程序包
  7. 现在您不再需要加密您的软件包了(您可以使用 DontSaveSensitive )。所有操作的权限都是针对SQL代理服务帐户的。

    您不再需要记住包裹密码或Orace登录密码。

    此外,例如,如果您需要在Oracle登录名上旋转密码,最初您必须在包中的Oracle 中更改此密码。但是通过使用Windows身份验证,不再需要这样做。

    如果您有兴趣,我可以为您提供更多信息。

答案 2 :(得分:1)

您可以使用/de开关和dtexec实用程序作为密码,如下所示:

dtexec /f <filename> /de <password>