无法在启用 UAC 的系统上准备 SSIS 大容量插入以插入数据

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

原始产品版本:SQL Server
原始 KB 编号: 2009672

症状

请考虑以下情况:

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

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

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

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

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

注意

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

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

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

此更改是为了更轻松地理解所需的纠正措施,如本知识库文章的解决方法部分所述。

原因

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

解决方案

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

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

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

    注意

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

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

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

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

注意

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

更多信息