我们正在完成 SSIS 包。然而,当我们进入部署阶段时,我们惊讶地意识到,从安全角度来看,SSIS 包的部署并不是很简单。
我们需要在生产服务器中使用批处理文件或.NET 程序运行 SSIS 包。调用者(批处理或.NET)应通过提供参数(例如源文件、目标数据库、用户 ID、密码等)来调用 SSIS 包,并从 SSIS 读取返回代码(成功/错误)。用户 ID 和密码不应采用任何人都可见的明文格式。我们做了一些研究,发现可以使用许多选项来完成部署,例如 XML 配置、SQL 服务器配置、环境变量、注册表等,但没有提到任何有关密码加密的内容。如何在多个环境(DEV、UAT、PROD)中部署相同的包并在部署时简单地更改环境特定变量来实现安全性并确保灵活性。
我正在寻找一些东西,当使用以下代码第一次运行应用程序时,MVC/Entity 框架连接字符串会自动加密。
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
ConfigurationSection section = config.GetSection("connectionStrings");
if (!section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
}
最佳答案
你的问题让人困惑。
默认情况下,SSIS 将使用作者的 Active Directory、AD 帐户来加密任何可能具有敏感性质的内容。 SSIS Packages Using Package Protection Level此包保护级别为 EncryptSensitiveWithUserKey
如果您在连接字符串中使用 SQL Server 用户和密码,则 SSIS 包中的静态值将被加密。不信我,打开文件,找到连接管理器的ConnectionString属性。
部署不是通过 XML、SQL Server、注册表等完成的。这些是指创建和存储 SSIS 包在运行时可以访问的配置值的方法。配置没有解密值的概念。这并不是说您不能加密值并为调用者解密它们,只是没有内置机制来表示“使用此 key 解密”。
我们正在使用的一种方法是使用 SQL Server 来保存加密数据。我们创建有权使用 key 的角色,然后计算列根据角色成员资格自动解密数据。不属于该角色的人在查询该列时只能得到 NULL 作为解密值。使用起来效果很好。 EncryptionPOC
部署通过完成
- 文件复制
- dtutil.exe
- dtsinstall.exe
- .NET api
关于sql - SSIS包的安全部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18790714/