SSIS 连接管理器不存储 SQL 密码

Posted

技术标签:

【中文标题】SSIS 连接管理器不存储 SQL 密码【英文标题】:SSIS Connection Manager Not Storing SQL Password 【发布时间】:2010-11-19 10:23:36 【问题描述】:

我曾经有一个dts,它有一个 sql server 身份验证连接。基本上,用户 ID 密码存储在包本身中。现在,当我转到SSIS 时,密码没有存储到包中。我在谷歌上搜索问题时看到了SSIS Connection Manager passwords,但似乎没有人给出好的解决方案。

【问题讨论】:

是的,我认为我们需要进行 Windows 身份验证...谢谢大家 【参考方案1】:

那个答案指向这篇文章:http://support.microsoft.com/kb/918760

以下是建议的解决方案 - 您评估过吗?

方法 1:使用 SQL Server Agent 代理帐户

创建一个 SQL Server 代理代理帐户。此代理帐户必须使用允许 SQL Server 代理以创建包的帐户或具有所需权限的帐户运行作业的凭据。

此方法用于解密机密并满足用户的密钥要求。但是,此方法的成功可能有限,因为 SSIS 包用户密钥涉及当前用户和当前计算机。因此,如果将程序包移动到另一台计算机,即使作业步骤使用正确的代理帐户,此方法仍可能失败。 回到顶部

方法 2:将 SSIS 包 ProtectionLevel 属性设置为 ServerStorage

将 SSIS 包 ProtectionLevel 属性更改为 ServerStorage。此设置将包存储在 SQL Server 数据库中,并允许通过 SQL Server 数据库角色进行访问控制。 回到顶部

方法 3:将 SSIS 包 ProtectionLevel 属性设置为 EncryptSensitiveWithPassword

将 SSIS 包 ProtectionLevel 属性更改为 EncryptSensitiveWithPassword。此设置使用密码进行加密。然后,您可以修改 SQL Server 代理作业步骤命令行以包含此密码。

方法四:使用 SSIS 包配置文件

使用 SSIS 包配置文件存储敏感信息,然后将这些配置文件存储在安全文件夹中。然后,您可以将 ProtectionLevel 属性更改为 DontSaveSensitive,这样包就不会被加密并且不会尝试将机密保存到包中。当您运行 SSIS 包时,将从配置文件中加载所需的信息。如果配置文件包含敏感信息,请确保它们受到充分保护。

方法五:创建包模板

对于长期解决方案,请创建一个使用不同于默认设置的保护级别的包模板。以后的包中不会出现这个问题。

【讨论】:

我看到了那个链接——它不处理这个特定的问题。我的问题以前在 DTS 连接中,您可以将用户 ID/密码存储在包内,但在 SSIS 中显然我们不能。该链接正在讨论从 sql 代理中的作业运行包。 也许您可以将 DTS 设置为使用 NTLM 并让它从代理帐户通过。 不确定是否有该选项。 是否应该在设计时更新包配置中的密码?它甚至应该如何工作? Package Deployment Model 和敏感的项目级参数是什么情况?这些得救了吗?有适合他们的设置吗?【参考方案2】:

您可以通过转到属性并添加password=yourpassword来将密码存储在配置字符串中,但是在password之前和@987654324之后的行上的;之后放置一个空格非常重要@在password行上,如下图:

Data Source=50.21.65.225;User ID=vc_ssis; 
password=D@mc317Feo; 
Initial Catalog=Sales;
Provider=SQLNCLI10.1;
Persist Security Info=True;Auto Translate=False;
Application Name=SSIS-PKG_CustomerData-2A666833-6095-4486-C04F-350CBCA5C49EIDM11.Sales.dev;

【讨论】:

这个答案对我有帮助。 也帮助了我。可能不是 prod 的最佳选择,但适用于测试 我无法相信像额外空格这样特别重要的事情。再说一次,我在编码方面已经足够长的时间了,我可以相信它。谢谢! 我很震惊,这是答案,但非常感谢!!!【参考方案3】:

我使用一个变量来存储整个连接字符串并将其传递给 ConnectionString 表达式。这会覆盖连接的所有设置并允许您存储密码。

【讨论】:

【参考方案4】:

SSIS 中的设计行为是防止将密码存储在包中,因为这样做是不好的做法/不安全。

相反,要么使用 Windows 身份验证,因此您不会将机密存储在包或配置文件中,或者,如果这在您的环境中确实不可能(例如,您可能没有 Windows 域),那么您必须使用一种解决方法如http://support.microsoft.com/kb/918760 中所述(Sam 是正确的,请在该文章中进一步阅读)。最简单的答案是随软件包一起提供一个配置文件,但您必须担心配置文件是安全存储的,因此有人无法读取它并获取凭据。

【讨论】:

【参考方案5】:

请检查项目中的配置文件,在那里设置ID和密码,以便执行包

【讨论】:

【参考方案6】:

它也发生在我身上,并通过以下方式修复:

创建基于表达式的连接字符串并将密码保存在变量中并使用它。

【讨论】:

【参考方案7】:

尝试将连接字符串与密码一起存储在一个变量中,并使用表达式在连接字符串中分配变量。我也遇到了同样的问题,我像 dis 一样解决了。

【讨论】:

【参考方案8】:

检查连接管理器文件本身的文本内容,密码字段可能在Project.params文件中配置,在这种情况下,在连接管理器窗口中输入密码将导致它不保存。

【讨论】:

帮助您提及如何访问连接管理器文件。【参考方案9】:

当我遇到这种情况时,这是一个更简单的选项。

创建连接后,选择连接并打开属性。在表达式类别中找到密码。重新输入密码并按 Enter。它现在将被保存到连接中。

【讨论】:

【参考方案10】:

有一种简单的方法可以做到这一点。我不知道为什么人们给出复杂的答案。

双击 SSIS 包。然后转到连接管理器,选择 DestinationConnectionOLDB,然后在登录字段旁边添加密码。

示例:Data Source=SysproDB1;User ID=test;password=test;Initial Catalog=ASBuiltDW;Provider=SQLNCLI11;Auto Translate=false;

对 SourceConnectionOLDB 执行相同操作。

【讨论】:

以上是关于SSIS 连接管理器不存储 SQL 密码的主要内容,如果未能解决你的问题,请参考以下文章

SSIS OlEDB 连接管理器错误

Excel 连接管理器的 SSIS 包问题

在SSIS包中使用AD服务帐户

SSIS 包动态连接中的异常处理

为啥 MySQLdb 连接上下文管理器不关闭游标?

如何在 SSIS 脚本组件中使用 OLEDB 连接执行 SqlCommand