SSIS在取消选中敏感时清除加密密码

问题描述 投票:3回答:2

使用的工具

  • Visual Studio 2017(带SSIS)
  • SQL Server Management Studio 17.9.1

参与了这个过程

两个SSIS开发人员和带有Integration Services Catalog的SSMS,用于存储已部署的项目。

概观

我有一个在SSIS中创建的项目内部的解决方案。每个项目都有项目参数,为每个数据库连接指定两个不同的参数:连接字符串和密码。密码标记为敏感。

Project及其所有软件包的ProtectionLevel都设置为EncryptAllWithPassword。该项目被推送到git存储库,另一个开发人员下载更改。现在,他需要提供密码才能使用项目(或解决方案中的多个项目)。到目前为止,我们在项目级别上有一个“主密码”,可以保护对敏感密码等参数的访问。当开发人员转到Project.params并取消敏感标记时,将显示密码。现在一切都很好,因为他需要首先知道项目的密码才能看到密码。

这是棘手的部分

在部署项目时,请执行Integration Services目录,更改ProtectionLevel,并且可以从Management Studio导出的项目不再受密码保护。要导出这样的项目,显然需要ssis_admin权限,但这超出了此问题的范围。部署项目然后从SSMS导回到SSIS时,开发人员可以在没有密码的情况下打开它,并取消Project.params密码的敏感标记。现在可以看到所有密码。这是错的。

我想要实现的目标是什么

我想用SSMS中的敏感值模仿相同的行为。每当您取消环境变量上的敏感标记时,该值都会被清除 - 如下所示。

enter image description here

但是,当我在SSIS Project.params(取消敏感标记)中执行相同操作时,仍会显示该值,因此我可以看到所有密码 - 如下所示。

enter image description here

我希望它按原样存储,但无法看到它的纯文本值。

有可能吗?或者也许有更好的方法来组织这个?我需要能够从SQL Server代理(SSMS)中提供环境变量以及SSIS下我自己的计算机执行包,这就是为什么我需要存储这些密码以便每次都不重复它们。

deployment ssis ssms password-encryption
2个回答
2
投票

您描述的这个问题对于在SSIS上协同工作的任何团队来说都是一个真正的问题。我将描述我用来解决这个问题的模式,这可能会有所帮助。首先,我应该声明我不喜欢在源代码管理中存储密码,即使它们是加密的。这是我通常做的事情:

  • 将所有SSIS包和项目设置为“不保存敏感”。这将从文件中删除所有密码并关闭源控制漏洞
  • 在可能的情况下,所有开发人员都应该拥有ETL生态系统的本地设置 - SQL数据库(无数据或仅测试数据),文件系统等。应将所有程序包配置为针对此本地环境。通过这种方式,您可以成为管理员,使用Windows身份验证进行连接并完全控制测试数据。这也有助于您避免干扰任何其他人的开发和测试。
  • 对于SQL连接,请设置连接字符串和密码的参数。连接字符串可以指向您的本地实例并使用Windows身份验证。密码可以为空白并检查为敏感密码。如果每个人都以相同的方式设置他们的本地系统,那么当另一个开发人员打开它并开始处理项目时,没有什么需要改变。
  • 对于部署,可以为每个服务器配置环境。密码可以选择用于SQL身份验证,连接字符串将更改为包含username属性而不包括windows auth。

上述模式使得团队开发变得非常容易,部署自动化非常简单。


1
投票

我建议使用SSIS项目目录和Project Environments以及以下方法。 将SSIS包视为程序或运行程序,将数据库视为资源。因此,包独立于资源,并且资源在特定环境中的包设置阶段配置。 在实践中,这会导致以下配置和活动:

  • 包在SSIS Project Mode中创建和开发。所有连接管理都在项目级别声明。
  • 不要在包或项目中保存密码。
  • 部署每个环境项目已定义环境变量配置,我们存储有关数据库的配置,即: 连接字符串可以从原始包中剪切和粘贴 数据库名称 服务器名称 如果未使用Windows Auth,则为用户名 密码如果未使用Windows身份验证
  • 项目部署后,必须将所有项目连接参数映射到环境变量。我们为此创建了一个简单的C#程序。
  • 环境变量中的值用于相应的连接参数值。此外,您可以在那里存储其他配置参数,而不仅仅是连接。
  • 您可以在同一环境中拥有多组参数,并在启动包时选择设置。
  • 使用脚本执行完成自动测试,并在测试脚本中指定环境。

因此,我们部署项目的每个环境都具有包含所有连接数据的配置环境。 QA环境中的连通性参数由env工程师提供;开发人员不需要担心这一点。

© www.soinside.com 2019 - 2024. All rights reserved.