使用的工具
参与了这个过程
两个SSIS开发人员和带有Integration Services Catalog的SSMS,用于存储已部署的项目。
概观
我有一个在SSIS中创建的项目内部的解决方案。每个项目都有项目参数,为每个数据库连接指定两个不同的参数:连接字符串和密码。密码标记为敏感。
Project及其所有软件包的ProtectionLevel都设置为EncryptAllWithPassword。该项目被推送到git存储库,另一个开发人员下载更改。现在,他需要提供密码才能使用项目(或解决方案中的多个项目)。到目前为止,我们在项目级别上有一个“主密码”,可以保护对敏感密码等参数的访问。当开发人员转到Project.params并取消敏感标记时,将显示密码。现在一切都很好,因为他需要首先知道项目的密码才能看到密码。
这是棘手的部分
在部署项目时,请执行Integration Services目录,更改ProtectionLevel,并且可以从Management Studio导出的项目不再受密码保护。要导出这样的项目,显然需要ssis_admin权限,但这超出了此问题的范围。部署项目然后从SSMS导回到SSIS时,开发人员可以在没有密码的情况下打开它,并取消Project.params密码的敏感标记。现在可以看到所有密码。这是错的。
我想要实现的目标是什么
我想用SSMS中的敏感值模仿相同的行为。每当您取消环境变量上的敏感标记时,该值都会被清除 - 如下所示。
但是,当我在SSIS Project.params(取消敏感标记)中执行相同操作时,仍会显示该值,因此我可以看到所有密码 - 如下所示。
我希望它按原样存储,但无法看到它的纯文本值。
有可能吗?或者也许有更好的方法来组织这个?我需要能够从SQL Server代理(SSMS)中提供环境变量以及SSIS下我自己的计算机执行包,这就是为什么我需要存储这些密码以便每次都不重复它们。
您描述的这个问题对于在SSIS上协同工作的任何团队来说都是一个真正的问题。我将描述我用来解决这个问题的模式,这可能会有所帮助。首先,我应该声明我不喜欢在源代码管理中存储密码,即使它们是加密的。这是我通常做的事情:
上述模式使得团队开发变得非常容易,部署自动化非常简单。
我建议使用SSIS项目目录和Project Environments以及以下方法。 将SSIS包视为程序或运行程序,将数据库视为资源。因此,包独立于资源,并且资源在特定环境中的包设置阶段配置。 在实践中,这会导致以下配置和活动:
因此,我们部署项目的每个环境都具有包含所有连接数据的配置环境。 QA环境中的连通性参数由env工程师提供;开发人员不需要担心这一点。