INF: 如何以计划的作业运行 DTS 包

文章翻译 文章翻译
文章编号: 269074 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

可能经常会遇到数据转换服务 (DTS) 包的一个问题是 DTS 包无错误的从 SQL Server 企业管理器,但 DTS 包失败时运行计划作为作业运行。通常,这出现由于安全上下文中的差异时以交互方式运行包时,作为与作业运行的包。

本文说明了在中运行的 DTS 包所涉及的安全问题。

更多信息

在这篇文章中使用的一些术语包括:
收起该表格展开该表格
术语说明
DTS数据转换服务
SQL 身份验证基于 Microsoft SQL Server 登录和密码的安全系统。
标准安全请参阅 SQL 身份验证。
SQL Server 身份验证请参阅 SQL 身份验证。
Microsoft Windows NT 身份验证当用户连接到 Windows 用户帐户时,SQL Server 帐户名和密码是时验证用户登录到运行 Microsoft Windows NT、 Microsoft Windows 2000、 Microsoft Windows 95 或 Microsoft Windows 98 的计算机上。
集成的安全性请参阅 Microsoft Windows NT 身份验证。
Windows NT 或 Microsoft Windows 2000 身份验证请参阅 Microsoft Windows NT 身份验证。
Microsoft Windows NT 帐户或登录等于 Windows 登录名或帐户Microsoft Windows NT 的登录帐户或 Microsoft Windows 2000 登录帐户相同。
SQL 代理SQL Server 代理服务
SEMSQL Server 企业管理器

其中是 DTS 包运行?

一个包运行时从 SQL 企业管理器与 DTS 包作为作业计划时,经常会报告有关 DTS 包的一个问题是行为的差异。当您运行包从 DTS 设计器在 SQL 企业管理器 (SEM) 时,包是在计算机上运行您将固定的位置。如果您是在服务器上 (物理,或通过远程访问软件),包是在服务器上运行。如果您已安装在工作站,并且您已经注册 SQL Server 服务器在企业管理器在工作站上运行包。包的安全上下文是 Windows NT 帐户的您用于登录到该计算机。当作为已安排作业运行包时,始终是在服务器上运行包。

经常,开发人员创建和测试在企业管理器中的 DTS 包,DTS 设计器通过其工作站上以交互方式。调试 DTS 包后,然后作为作业安排包。这会从开发人员工作站的程序包的位置更改为服务器上。如果包已加载到 SQL Server 的文本数据,包将失败,除非该文本文件和文件路径存在于服务器上。如果包已连接到另一台服务器,包将失败,如果该作业的安全上下文不支持连接。

谁所属运行 DTS 包的作业?

通过创建一个由 SQL 代理服务管理的作业计划软件包。此作为其他任何计划作业的工作都有一个所有者。所有者可以 SQL Server 登录或 Windows NT 帐户。

若要确定所有者,请执行下列操作:
  • 双击作业在企业管理器中,然后查看 所有者 下拉组合框。

    -或者-

  • 运行 msdb.dbo.sp_help_job 系统存储过程。
SQL Server 7.0

安全上下文中运行作业,则取决于该作业的所有者。如果作业所拥有的不是 系统管理员 服务器角色的成员的登录,包 SQLAgentCmdExec 帐户的上下文下运行,并有权限和该帐户的权限。

对于能够运行作业的连接到 SQL Server SQLAgentCmdExecSQLAgentCmdExec 帐户必须具有适当的 Windows NT/权限,并被授予登录访问权 SQL Server 具有适当的数据库权限。SQLAgentCmdExec 帐户通常有本地 SQL Server 计算机以外没有任何权限。因此,要求连接到另一台计算机的任何包失败,如果它已作为所拥有的不是系统管理员角色的成员登录的作业计划。

SQL Server 2000

安全上下文中运行作业,则取决于该作业的所有者。如果作业所拥有的不是系统管理员服务器角色的成员的登录,包在帐户设置 SQL 代理代理帐户,作为的上下文中运行,并有权限和该帐户的权限。

对于 SQL 代理代理服务器将无法运行作业的连接到 SQL Server,SQL 代理代理帐户必须具有适当的 Windows NT/权限,并被授予登录访问权 SQL Server 具有适当的数据库权限。 执行 DTS 包的作业,SQL 代理代理帐户必须拥有读取和帐户 SQL Server 代理的临时目录的写权限下运行。例如对于
c:\Documents 和 Settings\ <account>\Local Settings\Temp
如果该作业的帐户 (SQL Server 登录或 Windows NT 身份验证登录) 是 系统管理员 角色的成员由拥有,SQL 代理作业将在用于启动 SQL 代理服务帐户的上下文中运行。

此外,如果作业由 Windows NT 域帐户拥有,并且如果包存储在 SQL Server 或 SQL Server (而不是作为一个文件) 存储库,您必须通过使用受信任的域中的来自相同域的帐户来启动 SQL Server 服务。例如对于如果 SQL 代理作业由从美国的域帐户拥有,然后启动 SQL Server 服务时使用该帐户必须是从美国域或域信任的美国域。如果使用本地帐户启动该 SQL Server,包将无法运行。

什么确定所有者?

问题: 当您右键单击该 DTS 包,并选择要安排包如何所有者分配?

回答: 的 SQL 代理作业的所有者取决于如何在 SQL Server 注册在企业管理器中。如果使用 Windows NT 身份验证注册该 SQL Server,计划的所有者就是作业的用来启动 SQL 代理服务帐户。如果在使用 SQL Server 身份验证 (例如对于 SA 登录) 的 SEM 中注册该 SQL Server,作业的所有者是该同一 SQL Server 登录。

要更改该程序包的所有权,请执行下列操作:
  1. 双击作业在企业管理器中。
  2. 单击 常规 选项卡,然后单击 所有者 下拉组合框。
msdb.dbo.sp_update_job 系统存储过程还可以用于更改包的所有权。

如何将 DTS 包启动?

如果您通过使用 DTSRun.exe 命令行实用程序手动运行包,安全上下文是 Windows 帐户的您用于登录到计算机。如果使用 DTSrun.exe 通过 xp_cmdshell 扩展存储的过程运行该程序包,只要用户执行 xp_cmdshell系统管理员 角色的成员,用来启动 SQL Server 服务帐户的上下文中运行包。如果执行 xp_cmdshell 的用户不是 系统管理员 角色中的帐户,DTSRun.exe 运行 SQLAgentCmdExec 帐户的上下文中。

如果使用 本地系统 帐户启动该 SQL Server,DTS 包有正在运行 SQL Server 计算机之外的任何权限。

如果 Windows NT 帐户下启动 SQL Server 服务,包将以该 Windows NT 帐户具有相同的权利和权限。如果该 Windows NT 帐户是本地计算机帐户 (相对于域帐户),包没有该计算机之外的任何权限。如果 Windows NT 帐户是域帐户,包可能能够访问在该域上的多个不同的计算机上的资源。

如何将 Windows NT 身份验证进行连接?

有时一个 DTS 包包含建立连接到数据源使用 Windows NT 身份验证的对象。用于此连接的安全上下文并正在运行的包的上下文相同。如果从命令提示符下运行的包时使用 DTSRun.exe,则使用当前登录的 Windows NT 帐户的凭据。如果包作为一个 SQL Server 代理作业运行,然后使用该帐户进行集成的安全性连接用于启动 SQL 代理程序 (假设该程序包的所有者 系统管理员 角色的成员)。

常见的问题

下面是几个作为 SQL 代理中的计划作业运行的 DTS 包时可能会遇到其他常见问题:

映射的驱动器

如果包依赖于由指定映射的驱动器号的一个文件的物理位置时它作为无论谁拥有包在计划的 SQL 代理作业运行,可能会失败包。SQL 代理是 Windows NT 服务,Windows NT 服务不能看到映射的驱动器号。该映射是用户的配置文件被加载时在用户登录到 Windows NT 的会话的一部分。服务不能使用用户配置文件中。使用 UNC 路径,而不是映射的驱动器号。 有关为什么服务不能使用映射的驱动器的其他信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
180362信息: 服务和重定向的驱动器

相对路径

相对路径 (或驱动器号) 是特定于当前 (如 C:\) 包的位置。如果包设计在工作站上,然后计划从中运行包时更改该位置。驱动器号路径现在引用不同的物理位置的服务器。除非将引用的文件也移到服务器,包执行失败。

在 ActiveX 脚本中的 COM 组件

如果在 ActiveX 脚本中调用 COM 组件 (例如对于 Microsoft ActiveX 数据对象 (ADO)、 远程数据对象 (RDO) 或决策支持对象 (DSO) 对象的调用),从中运行 DTS 包在计算机上必须存在被调用的组件。如果您运行包从 DTS 设计器中 SEM 或 DTSRun.exe,组件必须存在的已安装在计算机上。如果由 SQL 代理来运行计划的包,必须承载在 SQL Server 在计算机上加载被调用的组件。

包安全性

DTS 包有所有者密码和用户密码。这些密码会影响用户可以编辑和运行包。这些都不会影响运行包时的安全上下文。

SQLAgentCmdExec 权限

如果在 SQLAgentCmdExec 帐户的上下文执行该作业,并且 SQLAgentCmdExec 帐户没有登录权限,才能在 SQL Server 作业可能会失败,以下错误消息:
DTSRun: 加载...DTSRun: 执行...DTSRun OnStart: DTSStep_DTSExecuteSQLTask_1 DTSRun OnError: DTSStep_DTSExecuteSQLTask_1,错误 =-2147217843 (80040E4D) 错误字符串: 登录失败,用户 NT_name\SQLAgentCmdExec。错误源: Microsoft OLE DB 提供程序为 SQL Server 帮助文件: 帮助上下文: 0 错误详细记录: 错误:-2147217843 (80040E4D) ; 提供程序错误: 18456 (4818) 错误字符串: 登录失败,用户 NT_name\SQLAgentCmdExec。错误源: Microsoft OLE DB 提供程序为 SQL Server 帮助文件: 帮助上下文: 0 DTSRun OnFinish: DTSStep_DTSExecuteSQLTask_1 DTSRun: 包完成执行。进程退出代码 1。该步骤失败。
您需要向其授予 SQLAgentCmdExec 帐户中的正确的登录名和数据库的权限在 SQL Server 的权限。

属性

文章编号: 269074 - 最后修改: 2007年10月26日 - 修订: 3.6
这篇文章中的信息适用于:
  • Microsoft SQL Server 7.0 标准版
  • Microsoft SQL Server 2000 标准版
关键字:?
kbmt kbproductlink kbinfo KB269074 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 269074
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com