将密码安全地存储在 SQL 服务器中以用于动态数据源 - SSIS

Store passwords securely in SQL Server for use with dynamic datasources - SSIS

我们大量使用动态数据源。我们从 SQL 服务器数据库中的 table 检索服务器名称和数据库名称。一个包循环遍历服务器名称和数据库名称,并为每个服务器、每个数据库执行一次。

然后将这些值放入动态连接的 ServerNameInitalCatalog 字段中。用户和密码是预定义的(因此每个连接都相同)。我也想从 table 中填写用户 + 密码,但我必须将密码作为明文存储在 table 中。

有没有办法将加密的密码存储在table中,并在我需要使用时解密?任何有权访问 SSIS 包的人都可以知道密码,但不应轻易从包含连接字符串的 table 中读取密码。

非常感谢所有处理此问题的建议(f.e。使用不同的方法)!

首选解决方案是继续使用集成安全性。

通常作业会尝试在 SQL 代理的帐户下执行该步骤,这不是您想要的。

代理帐户可替代 SQL 代理帐户 (msdn.microsoft.com/en-us/library/ms175834.aspx) 的凭据,在这种情况下也无济于事。

我记得在 Windows 2000 年我们使用了一个技巧,通过在所有服务器上创建具有相同用户名和密码的相同本地帐户来克服 SSO 限制,它可能适用于您的情况。

是的,您可以 encrypt/decrypt 专栏。在此处查看 Microsoft 的演练:

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/encrypt-a-column-of-data?view=sql-server-2017

最佳做法是创建一个视图来解密该列,然后仅授予用户级别(即 SELECT、ALTER、INSERT、UPDATE 等)对该视图的访问权限,因为该视图必须拥有解密数据的对称密钥。暴露密钥可能是一个安全漏洞,因此您希望尽可能地锁定它。具有有限用户访问权限的视图是允许公开密钥的最佳位置(如果曾经有一个公开密钥的好地方,但实际上没有)。

但是,Ako 是正确的。使用集成安全性。