SSIS取消选中敏感

时间:2019-03-07 09:57:44

标签: deployment ssis ssms password-encryption

使用的工具

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

参与了该过程

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

概述

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

项目及其所有软件包的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下执行程序包,这就是为什么我需要存储这些密码以便不每次都重复它们的原因。

2 个答案:

答案 0 :(得分:2)

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

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

以上模式使作为团队的开发非常容易,并且对于部署自动化来说非常简单。

答案 1 :(得分:1)

我建议将SSIS项目目录和Project Environments与以下方法一起使用。
将SSIS软件包视为程序 runners ,将数据库作为资源。因此,程序包独立于资源,并且在特定环境中的程序包设置阶段配置资源。
实际上,这导致以下配置和活动:

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

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