无法准备 SSIS 批量插入,以便在启用了 UAC 的系统上插入数据

本文可帮助你解决尝试在启用了用户帐户控制(UAC)的系统上运行 SSIS 包时发生的问题。

原始产品版本:SQL Server
原始 KB 数: 2009672

现象

假设出现了下面这种情景:

  • 创建 SQL Server Integration Services (SSIS) 包,该包在数据流任务中具有 SQL Server 目标组件。

  • 尝试使用以下方法之一在启用了用户帐户控制(例如 Vista 或 Windows 7)的系统上运行此包:

    • 商业智能开发工作室 (投标)
    • SQL Server Management Studio (SSMS) 对象资源管理器
    • DTExec.exe
    • DTExecUI.exe

在此方案中,可能会收到类似于以下内容的错误消息:

SQL Server 目标] 错误:无法为数据插入准备 SSIS 大容量插入。 [SSIS.管道] 错误:组件“SQL Server 目标”未能执行前阶段并返回错误代码0xC0202071。

注意

如果在操作系统安装过程中创建的 Builtin 管理员帐户下运行包,则不会收到此错误。 但是,对于任何其他用户(包括属于本地管理员组成员的用户),你将收到此消息。

执行与SQL Server 代理作业相同的 SSIS 包时,不会出现此问题。

安装 SQL 2008 Service Pack 2 后,错误 DTS_E_BULKINSERTAPIPREPARATIONFAILED(0xC0202071) 的文本已更改为: 无法大容量复制数据。可能需要以管理员身份运行此包。

此更改旨在使理解所需的纠正措施变得更容易,如此 KB 的解决方法部分所述。

原因

在启用 UAC 的系统上,当作为管理员组成员的帐户启动应用程序(如 SSIS)时,它会获取两个安全令牌,一个是低特权令牌,另一个是提升的令牌。 仅当应用程序通过选择“以管理员身份运行”选项显式运行时,才会使用提升的令牌。 默认情况下,SSIS 始终使用低特权令牌,导致连接到 SQL 目标时失败。

解决方法

使用以下方法之一来解决该问题:

  • 如果要从 SQL Server Management Studio(SSMS)或商业智能开发工作室(BIDS)或DTExecUI.exe运行包,请从提升的管理员帐户下启动这些工具。 为此,请单击“开始”,指向“所有程序”,指向“SQL Server 2005”或“SQL Server 2008”,右键单击正在使用的工具,然后单击“以管理员身份运行”。 这会使用提升的内置管理员帐户特权启动应用程序,并且包成功执行。

    同样,如果使用DTExec.exe运行包,请从提升的命令提示符启动它。 可以通过单击“开始”、“所有程序”、“附件”、“右键单击命令提示符”,然后单击“以管理员身份运行”来启动提升的命令提示符

    注意

    如果不以管理员身份登录到计算机,系统会提示你提供管理员帐户。 当系统提示你提供管理员帐户时,请在“用户帐户控制”对话框中键入管理员用户名和密码。 然后,单击“确定”

  • 将数据流任务中的 SQL Server 目标组件替换为指向同一 SQL Server 连接管理器的 OLE DB 目标组件。

  • 在向该帐户分配“创建全局对象”用户权限后,请使用不是本地管理员组成员的帐户。 为此,请按照下列步骤进行操作:

    1. 单击“开始”,指向管理工具,然后单击“本地安全策略”。
    2. 展开 本地策略,然后单击“ 用户权限分配”。
    3. 在右窗格中,双击“ 创建全局对象”。
    4. “本地安全策略设置” 对话框中,单击“ 添加”。
    5. “选择用户”对话框中,单击要添加的用户帐户,单击“添加,然后单击“确定”。
    6. 单击 “确定”

注意

使用不是本地管理员组成员的帐户时,UAC 不会发挥作用。

详细信息