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