SSIS 包中的 Windows 身份验证

Lui*_*cia 4 ssis

我正在处理我的第一个连接到 SQL 服务器的 SSIS 包。在我开发它时,我使用 Windows 身份验证进行连接,这工作正常,因为我的 Windows 用户名已添加到我正在处理的数据库的安全性中。现在,我的 IT 部门创建了一个服务帐户来部署包。我的问题是,如何在部署之前更改连接的用户名/密码?是否有连接可以读取的配置文件?如何处理?

Vin*_*nie 5

这里实际上有两个安全上下文需要关注。第一个是部署您创建的包或项目所需的帐户。第二个是能够执行您创建的包所需的帐户。

端到端 Windows 身份验证(部署、执行和数据源)

部署帐户需要对其驻留的服务器或文件系统具有正确的权限。执行帐户可能配置了一组非常不同的权限,主要与执行您内置到包中的任何任务所需的权限有关。

为了在您自己的不同用户下部署包,它可能就像打开一个应用程序(如命令提示符、Windows 资源管理器或 SSIS 部署实用程序)作为该用户帐户并将包移动到正确的位置一样简单。这可以在您的工作站或服务器上处理。

对于执行帐户,您有多种选择,具体取决于您将如何操作包的执行。这里有几个场景:

  • 如果要让 SQL Server 代理执行包,并且执行包所需的帐户是 SQL Server 代理服务帐户,则只需创建作业即可运行包。除非另有编程,否则从 SQL 代理作业调用的包将作为 SQL 代理帐户运行
  • 如果您将通过 SQL Server 代理作业执行包,并且您需要用于执行包的帐户不是 SQL 代理服务帐户,您可以创建一个 SSIS 代理帐户并在 SSIS 包执行作业步骤中指定. 在 SQL Server 内部创建凭据后,就像更改下拉列表一样简单。
  • 如果您将从 SQL 代理作业使用命令行执行,则上述两种情况仍然适用。
  • 如果您将使用另一种使用类似命令行执行方法的机制(如 Windows 调度程序或其他企业调度工具),您应该仍然能够让该进程“作为”执行帐户“运行”。

仅用于部署和执行的 Windows 身份验证(数据的 SQL 身份验证)

上述细节仍然适用于通过作业和/或命令行执行 SSIS 包,但您需要在包运行时将用户名和密码传递给连接管理器。您有多种选择来执行此操作,并且应遵循您的组织已制定的任何既定模式或标准。SSIS 长期以来一直支持使用基于 XML 的 .dtsConfig 文件,该文件可以在运行时读入包中。SSDT/BIDS 中有一个 GUI,它将引导您完成创建文件的过程,并告诉它您希望它能够配置哪些包属性。

一句小心的话

尝试在 SSIS 包中保存敏感信息时要小心。有一个名为 PackageProtectionLevel 的属性,可以在项目和包级别设置。默认情况下,它设置为 EncryptSensitiveWithUserKey。现在,不要让这个属性欺骗您认为整个包都是加密的。它不是。此设置专门指 SSIS 将如何处理类型为敏感的属性。例如,连接管理器中的密码被键入为敏感信息。SSIS 将加密该字段,以便它不会以纯文本形式存储密码。但它仅与保存/存储包有关。您可以通过将在运行时读入敏感字段(如密码)的变量或配置文件传递纯文本。

如果您需要能够使用您开发的包保存密码,我建议将 PackageProtectionLevel 更改为 EncryptSensitiveWithPassword 并将其设置为您的团队能够记住或用于保护其他资产的内容。一旦该设置到位,您将能够检查连接管理器中的“保存密码”框,并且无论包去哪里都可以。如果您不需要随包保存该密码,请将属性更改为 DontSaveSentitive。就像我提到的,您仍然可以通过配置或其他方式传递凭据,但它不会存储在包本身中。