Windows SSIS 包中的身份验证
Windows authentication in SSIS package
我正在开发我的第一个连接到 SQL 服务器的 SSIS 包。在我开发它时,我正在使用 Windows 身份验证进行连接,该身份验证工作正常,因为我的 Windows 用户名已添加到我正在处理的数据库的安全性中。现在,我的 IT 部门创建了一个服务帐户来部署包。我的问题是,如何在部署之前更改连接的用户 name/password?是否有连接可以读取的配置文件?如何处理?
您实际上有两个安全上下文需要关注。第一个是部署您创建的包或项目所需的帐户。第二个是能够执行您创建的程序包所需的帐户。
端到端Windows 身份验证(部署、执行和数据源)
部署帐户需要对其所在的服务器或文件系统具有正确的权限。执行帐户可能配置了一组非常不同的权限,主要与执行您在程序包中构建的任何任务所需的权限有关。
为了在您拥有的不同用户下部署包,可能就像打开一个应用程序(如命令提示符、Windows Explorer 或 SSIS 部署实用程序)一样简单,作为该用户帐户并移动包裹到正确的位置。这可以在您的工作站或服务器上处理。
对于执行帐户,您有多种选择,具体取决于您将如何操作包的执行。以下是一些场景:
- 如果您要让 SQL Server Agent 执行程序包,并且执行程序包所需的帐户是 SQL Server Agent 服务帐户,您只需创建作业到 运行 包。除非另有编程,从 SQL 代理作业调用的包将 运行 作为 SQL 代理帐户
- 如果您要通过 SQL 服务器代理作业执行包,并且执行包所需的帐户不是 SQL 代理服务帐户,您可以创建一个SSIS 代理帐户并在 SSIS 包执行作业步骤中指定。在 SQL 服务器中创建凭据后,就像更改下拉列表一样简单。
- 如果您将从 SQL 代理作业中使用命令行执行,上述两种情况仍然适用。
- 如果您将使用另一种机制(如 Windows Scheduler 或其他企业计划工具),它使用类似命令行执行的方法,您应该仍然能够拥有该进程 "run as"执行账户。
Windows 仅部署和执行身份验证(SQL 数据身份验证)
以上详细信息仍然适用于通过作业 and/or 命令行执行 SSIS 包,但您需要在包 运行 时将用户名和密码传递给连接管理器。您有多种选择可以执行此操作,并且应遵循您的组织已制定的任何既定模式或标准。 SSIS 长期以来一直支持使用基于 XML 的 .dtsConfig 文件,该文件可以在 运行 时读入包中。 SSDT/BIDS 中有一个 GUI,它将引导您完成创建文件的过程,并告诉它您希望它能够配置哪些包属性。
忠告
尝试在 SSIS 包中保存敏感信息时要小心。有一个名为 PackageProtectionLevel 的 属性 可以在项目和包级别设置。默认情况下,它设置为 EncryptSensitiveWithUserKey。现在,不要让这个 属性 欺骗您以为整个包都已加密。它不是。此设置专门指 SSIS 将如何处理类型为敏感的属性。例如,连接管理器中的密码被列为敏感信息。 SSIS 将对该字段进行加密,这样它就不会以明文形式存储密码。但它仅适用于 saving/storing 包裹。您可以通过变量或配置文件传递纯文本,这些文件将在 运行 时被读入敏感字段(如密码)。
如果您需要能够为您开发的包保存密码,我建议将 PackageProtectionLevel 更改为 EncryptSensitiveWithPassword 并将其设置为您的团队能够记住或用于保护其他资产的内容。一旦该设置到位,您将能够选中连接管理器中的 "Save Password" 框,并将它带到包所在的地方。如果您不需要在包中保存该密码,请将 属性 更改为 DontSaveSentitive。正如我提到的,您仍然可以通过配置或其他方式传递凭据,但它不会存储在包本身内。
我正在开发我的第一个连接到 SQL 服务器的 SSIS 包。在我开发它时,我正在使用 Windows 身份验证进行连接,该身份验证工作正常,因为我的 Windows 用户名已添加到我正在处理的数据库的安全性中。现在,我的 IT 部门创建了一个服务帐户来部署包。我的问题是,如何在部署之前更改连接的用户 name/password?是否有连接可以读取的配置文件?如何处理?
您实际上有两个安全上下文需要关注。第一个是部署您创建的包或项目所需的帐户。第二个是能够执行您创建的程序包所需的帐户。
端到端Windows 身份验证(部署、执行和数据源)
部署帐户需要对其所在的服务器或文件系统具有正确的权限。执行帐户可能配置了一组非常不同的权限,主要与执行您在程序包中构建的任何任务所需的权限有关。
为了在您拥有的不同用户下部署包,可能就像打开一个应用程序(如命令提示符、Windows Explorer 或 SSIS 部署实用程序)一样简单,作为该用户帐户并移动包裹到正确的位置。这可以在您的工作站或服务器上处理。
对于执行帐户,您有多种选择,具体取决于您将如何操作包的执行。以下是一些场景:
- 如果您要让 SQL Server Agent 执行程序包,并且执行程序包所需的帐户是 SQL Server Agent 服务帐户,您只需创建作业到 运行 包。除非另有编程,从 SQL 代理作业调用的包将 运行 作为 SQL 代理帐户
- 如果您要通过 SQL 服务器代理作业执行包,并且执行包所需的帐户不是 SQL 代理服务帐户,您可以创建一个SSIS 代理帐户并在 SSIS 包执行作业步骤中指定。在 SQL 服务器中创建凭据后,就像更改下拉列表一样简单。
- 如果您将从 SQL 代理作业中使用命令行执行,上述两种情况仍然适用。
- 如果您将使用另一种机制(如 Windows Scheduler 或其他企业计划工具),它使用类似命令行执行的方法,您应该仍然能够拥有该进程 "run as"执行账户。
Windows 仅部署和执行身份验证(SQL 数据身份验证)
以上详细信息仍然适用于通过作业 and/or 命令行执行 SSIS 包,但您需要在包 运行 时将用户名和密码传递给连接管理器。您有多种选择可以执行此操作,并且应遵循您的组织已制定的任何既定模式或标准。 SSIS 长期以来一直支持使用基于 XML 的 .dtsConfig 文件,该文件可以在 运行 时读入包中。 SSDT/BIDS 中有一个 GUI,它将引导您完成创建文件的过程,并告诉它您希望它能够配置哪些包属性。
忠告
尝试在 SSIS 包中保存敏感信息时要小心。有一个名为 PackageProtectionLevel 的 属性 可以在项目和包级别设置。默认情况下,它设置为 EncryptSensitiveWithUserKey。现在,不要让这个 属性 欺骗您以为整个包都已加密。它不是。此设置专门指 SSIS 将如何处理类型为敏感的属性。例如,连接管理器中的密码被列为敏感信息。 SSIS 将对该字段进行加密,这样它就不会以明文形式存储密码。但它仅适用于 saving/storing 包裹。您可以通过变量或配置文件传递纯文本,这些文件将在 运行 时被读入敏感字段(如密码)。
如果您需要能够为您开发的包保存密码,我建议将 PackageProtectionLevel 更改为 EncryptSensitiveWithPassword 并将其设置为您的团队能够记住或用于保护其他资产的内容。一旦该设置到位,您将能够选中连接管理器中的 "Save Password" 框,并将它带到包所在的地方。如果您不需要在包中保存该密码,请将 属性 更改为 DontSaveSentitive。正如我提到的,您仍然可以通过配置或其他方式传递凭据,但它不会存储在包本身内。