关于SSIS的敏感数据保存的问题

     问题:

        建立了到Sql server的连接且认证方式为SQL认证,发现即便点上"保存密码"复选框并确定、保存之后,执行包会提示组件验证出错,且再次打开属性框发现密码栏为空白,如下图:

       

    此问题虽然可以通过在配置文件里保存密码来解决,但是把数据库密码明文保存在配置文件里明显是一个巨大的安全隐患!几经搜索得到以下解决办法:

1. 设置包权限 为encryptAllWithPassword

2. 在连接管理器里设置密码123456,并点上“保存密码”

3. 通过 dtexe /de 123456的方式调用包,你会发现包正常工作~

注意:如果你启用了配置文件,一定不要在配置文件里有密码的相关配置。

问题原因(转载):

   密码这类属性敏感信息, SSIS中强化了这方面的管理(因此也造成了麻烦)。Integration Services 支持保护包中的敏感数据,通常,标识为敏感的属性包含如密码或连接字符串这样的信息。Integration Services 会设置这些属性的敏感特性,而且敏感特性无法更改。如果编写自定义任务、连接管理器或数据流组件,则可以指定 Integration Services 应该将哪些属性视为敏感属性。

在 Business Intelligence Development Studio 中初次开发 SQL Server 2005 Integration Services (SSIS) 包时,可以设置该包的保护级别。以后当部署包时,在 SQL Server Management Studio 中将包导入 Integration Services 或从中导出包时,或者在将包从 Business Intelligence Development Studio 复制到 SQL Server、SSIS 包存储区或文件系统服务时,都可以更新包的保护级别。例如,如果在计算机上使用某个用户密钥保护级别选项创建并保存包,则在将包提供给其他用户时,很可能需要更改保护级别,否则,他们将无法打开该包。下面介绍 Integration Services 提供的保护级别。括号中的值是来自 DTSProtectionLevel 的值。在 Business Intelligence Development Studio 中处理包时,这些值出现在用来配置包属性的“属性”窗口中。
 
1. 不保存敏感数据 (DontSaveSensitive)
 保存包时不保存包中的敏感信息。这种保护级别不进行加密,但它防止标记为敏感的属性随包一起保存,因此其他用户将无法使用这些敏感数据。如果其他用户打开该包,敏感信息将被替换为空白,用户必须提供这些敏感信息。 
 
2. 使用密码加密所有数据 (EncryptAllWithPassword)
 使用密码加密整个包。使用用户在创建包或导出包时提供的密码加密包。若要在 SSIS 设计器中打开包或使用 dtexec 命令提示实用工具运行包,用户必须提供包密码。如果没有密码,用户将无法访问或运行包。
 
3. 使用用户密钥加密所有数据 (EncryptAllWithUserKey)
 使用基于用户配置文件的密钥加密整个包。只有使用同一配置文件的同一个用户才能加载此包。使用基于创建包或导出包的用户的密钥来加密包。只有创建包或导出包的用户才可以在 SSIS 设计器中打开包或使用 dtexec 命令提示实用工具运行包。
 
4. 使用密码加密敏感数据 (EncryptSensitiveWithPassword)
 只使用密码加密包中的敏感信息。DPAPI 用于此加密。敏感数据作为包的一部分保存,但数据是使用当前用户在创建包或导出包时提供的密码加密的。若要在 SSIS 设计器中打开包,用户必须提供包密码。如果不提供该密码,则包虽然可以打开但其中不包含敏感数据,当前用户必须为敏感数据提供新值。如果用户试图在不提供密码的情况下执行包,则包执行将会失败。有关密码和命令行执行的详细信息,请参阅 dtexec 实用工具。
 
5. 使用用户密钥加密敏感数据 (EncryptSensitiveWithUserKey)
 只使用基于当前用户的密钥加密包中的敏感信息。只有使用同一配置文件的同一个用户才能加载此包。如果其他用户打开该包,敏感信息将被替换为空白,当前用户必须为敏感数据提供新值。如果用户试图执行该包,则包执行将会失败。DPAPI 用于此加密。
 
6. 依靠服务器存储进行加密 (ServerStorage)
 使用 SQL Server 数据库角色保护整个包。只有将包保存到 SQL Server msdb 数据库后,才支持此选项。在将包从 Business Intelligence Development Studio 保存到文件系统时,不支持此选项。 
 
使用密码加密包的包保护级别还要求您提供密码。如果将保护级别从不使用密码的级别更改为使用密码的级别,则系统将提示您输入密码。加密(如保护级别所使用的加密)是通过使用 Microsoft Data Protection API (DPAPI) 来执行的,DPAPI 是 Cryptography API (Crypto API) 的一部分。Integration Services 将 .NET Framework 类库 (FCL) 中提供的 Triple DES 加密算法(其密钥长度为 192 位)用于使用密码的保护级别。对于使用用户密钥的保护级别,Integration Services 使用 DPAPI 标准。有关 DPAPI 的详细信息,请参阅位于 http://msdn.microsoft.com/library 的 MSDN Library。在使用“不保存敏感数据”(DontSaveSensitive) 保护级别时,不保存包中的敏感信息。 

对于所有值,敏感信息定义为:连接字符串的密码部分。但是,如果选择加密所有数据的选项,则整个连接字符串都将被视为敏感信息。标记为敏感的任务生成的 XML 节点。XML 节点的标记由 Integration Services 控制,用户无法更改。所有变量都标记为敏感信息。标记的变量由 Integration Services 控制。Integration Services 自动检测敏感属性,然后根据指定的包保护级别处理这些属性。例如,如果包所使用的是利用密码加密敏感信息的保护级别,则包中标识为敏感的所有属性的值都是加密的

 

posted on 2014-03-12 11:47  babyblue  阅读(1187)  评论(1)    收藏  举报