2

我们正在完成 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();
            }
4

1 回答 1

3

你的问题让事情变得混乱。

默认情况下,SSIS 将使用作者的 Active Directory、AD 帐户加密任何可能具有敏感性质的内容。使用包保护级别的 SSIS 包 此包保护级别为EncryptSensitiveWithUserKey如果您在连接字符串中使用 SQL Server 用户和密码,则 SSIS 包中的静态值将被加密。不信,我打开文件,找到Connection Manager的ConnectionString属性。

部署不是通过 XML、SQL Server、注册表等完成的。这些是指创建和存储SSIS 包在运行时可能访问的配置值的方法。配置没有解密值的概念。这并不是说您不能加密值并让它们为调用者解密,只是没有内置机制来表示“使用此密钥解密”。

我们使用的一种方法是使用 SQL Server 来保存加密数据。我们创建授权使用密钥的角色,然后根据角色成员资格自动解密数据的计算列。不在该角色中查询该列的人只会将 NULL 作为解密值返回。它的使用效果很好。加密POC

部署通过

  • 文件副本
  • dtutil.exe
  • dtsinstall.exe
  • .NET API
于 2013-09-17T03:48:33.323 回答