現在オフラインです。再接続するためにインターネットの接続を待っています

[INF] 定期ジョブとして DTS パッケージを実行する方法

この記事は、以前は次の ID で公開されていました: JP269074
概要
データ変換サービス (DTS) パッケージで頻繁に起こる問題点は、SQL Server Enterprise Manager (SEM)からは DTS パッケージがエラーなしで実行されるにもかかわらず、ジョブとして定期的に実行するとその DTS パッケージが失敗することです。通常、この問題はパッケージがジョブとして実行される場合と、パッケージが対話的に実行される場合とではセキュリティ コンテキストが異なるために発生します。

この資料では、DTS パッケージの実行に関連するセキュリティの問題点について説明します。
詳細
この資料で使用されている用語には以下のものが含まれます。
DTSデータ変換サービス
SQL 認証Microsoft SQL Server ログインとパスワードに基づくセキュリティ システム。
標準セキュリティSQL 認証と同じです。
SQL Server 認証SQL 認証と同じです。
Microsoft Windows NT 認証ユーザーが Microsoft 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 Enterprise Manager

DTS パッケージの実行場所

DTS パッケージに関して頻繁に報告される問題点の 1 つは、パッケージが SEM から実行されるとき、および DTS パッケージがジョブとして定期的に実行されるときに動作が異なることです。SEM の DTS デザイナからパッケージが実行されるときは、パッケージはユーザーがログオンしているコンピュータで実行されます。ユーザーがサーバーで (物理的に、またはリモート アクセス ソフトウェアを使用して) 作業している場合は、パッケージはサーバーで実行されます。ユーザーがワークステーションにログオンし、かつ SEM で SQL Server サーバーを登録していた場合は、パッケージはワークステーションで実行されます。パッケージのセキュリティ コンテキストは、そのコンピュータへのログオンに使用した Windows NT アカウントのセキュリティ コンテキストになります。パッケージが定期ジョブとして実行される場合は、パッケージは常にサーバーで実行されます。

しばしば、開発者が SEM の DTS デザイナで対話的に DTS パッケージを作成し、テストする場合があります。作成された DTS パッケージはデバッグされた後、ジョブとしてスケジュール設定されます。このとき、パッケージの場所は開発者のワークステーションからサーバーに変更されます。パッケージがテキスト データを SQL Server に読み込んでいた場合は、そのテキスト ファイルとファイルへのパスがサーバーに存在しない限り、そのパッケージは失敗します。パッケージが別のサーバーに接続していた場合は、ジョブのセキュリティ コンテキストがその接続をサポートしていない場合、そのパッケージは失敗します。

DTS パッケージの所有者

SQL Server エージェント サービスが管理するジョブを作成することにより、パッケージのスケジュールを設定します。ほかのすべての定期ジョブと同様に、このジョブにも所有者があります。所有者は SQL Server ログインまたは Windows NT アカウントのいずれかです。

所有者を判断するには
  • SEM で対象となるジョブをダブルクリックし、[所有者] ボックスを参照します。

    または

  • msdb.dbo.sp_help_job システム ストアド プロシージャを実行します。
ジョブが実行されるセキュリティ コンテキストは、そのジョブの所有者により決定されます。ジョブが Sysadmin サーバー ロールのメンバではないログインにより所有されている場合は、そのパッケージは SQLAgentCmdExec アカウントのコンテキストで実行され、そのアカウントの権利と権限を持ちます。一般的に、SQLAgentCmdExec アカウントはローカル SQL Server コンピュータの外部の権利は持ちません。そのため、パッケージが Sysadmin ロールのメンバではないログインが所有するジョブとしてスケジュールが設定されている場合は、別のコンピュータに接続する必要があるパッケージは失敗します。

ジョブが Sysadmin ロールのメンバであるアカウント (SQL Server ログインまたは Windows NT 認証ログインのいずれか) に所有されている場合は、SQL エージェント ジョブは SQL エージェント サービスを開始するために使用したアカウントのコンテキストで実行されます。

また、ジョブが Windows NT ドメイン アカウントに所有されている場合、およびパッケージが (ファイルとしてではなく) SQL Server または SQL Server リポジトリに格納されている場合は、同じドメインからのアカウントまたは信頼関係のあるドメインからのアカウントを使用して、SQL Server サービスを開始する必要があります。たとえば、SQL エージェント ジョブが USA ドメインからのアカウントにより所有されている場合、SQL Server サービスを開始するために使用するアカウントアカウントは、USA ドメインからのものか、USA ドメインにより信頼されているドメインからのものである必要があります。SQL Server がローカル アカウントを使用して開始されている場合は、パッケージの実行は失敗します。

所有者を決定するもの

質問 : DTS パッケージを右クリックし、パッケージのスケジュールを設定することを選択したとき、どのうようにして所有者が割り当てられるのでしょうか。
回答 : SQL エージェント ジョブの所有者は、SQL Server がどのように SEM に登録されたかによって異なります。Windows NT 認証を使用して SQL Server が登録された場合は、定期ジョブの所有者は SQL Server エージェント サービスを開始するために使用したアカウントになります。SQL Server 認証 (たとえば sa ログイン) を使用して SQL Server が SEM に登録された場合、ジョブの所有者は SQL Server を登録したのと同じ SQL Server ログインになります。

パッケージの所有権を変更するには
  1. SEM でそのジョブをダブルクリックします。
  2. [全般] タブをクリックし、[所有者] ドロップダウン コンボ ボックスをクリックします。
また、msdb.dbo.sp_update_job システム ストアド プロシージャを使用して、パッケージの所有権を変更できます。

DTS パッケージを起動する方法

DTSRun.exe コマンド ライン ユーティリティを使用して手動でパッケージを実行する場合は、セキュリティ コンテキストはコンピュータにログオンした Windows アカウントのセキュリティ コンテキストになります。xp_cmdshell 拡張ストアド プロシージャを介して DTSrun.exe を使用することによりパッケージを実行する場合、xp_cmdshell を実行したユーザーが Sysadmin ロールのメンバであるときは、パッケージは SQL Server サービスを開始するために使用したアカウントのコンテキストで実行されます。xp_cmdshell を実行したユーザーが Sysadmin ロールのメンバでない場合は、SQLAgentCmdExec アカウントのコンテキストで DTSRun.exe が実行されます。

Local System アカウントを使用して SQL Server が開始された場合は、DTS パッケージは SQL Server を実行しているコンピュータの外部には権限を持ちません。

SQL Server サービスが Windows NT アカウントで開始されたときは、パッケージは Windows NT アカウントと同じ権利と権限を持ちます。その Windows NT アカウントが (ドメイン アカウントとは反対に) ローカル コンピュータ アカウントである場合は、パッケージはそのコンピュータの外部には権限を持ちません。Windows NT アカウントがドメイン アカウントの場合は、パッケージはそのドメイン内の多くのほかのコンピュータのリソースにアクセスできます。

Windows NT 認証接続を行う方法

DTS パッケージが Windows NT 認証を使用しているデータ ソースに接続を行うオブジェクトを含んでいることがあります。この接続に使用するセキュリティ コンテキストは、実行されているパッケージのコンテキストと同じになります。パッケージがコマンド プロンプトから DTSRun.exe を使用して実行されている場合は、現在ログオンしている Windows NT アカウントの資格証明が使用されます。パッケージが SQL Server エージェント ジョブとして実行されている場合は、統合セキュリティ接続が SQL Server エージェントを開始するために使用したアカウントを使って行われます (パッケージの所有者が Sysadmin ロールのメンバであると仮定しています)。

共通の問題点

DTS パッケージを SQL Server エージェントで定期ジョブとして実行するときに発生する可能性のあるその他の共通の問題点を以下に示します。

ネットワーク ドライブの割り当て

パッケージがネットワーク ドライブに割り当てられたドライブ記号によって示される物理位置のファイルに依存している場合、そのパッケージを定期 SQL Server エージェント ジョブとして実行すると、パッケージの所有者とは無関係に失敗します。SQL Server エージェントは Windows NT サービスであり、Windows NT サービスはネットワーク ドライブに割り当てられたドライブ文字は参照できません。ネットワーク ドライブの割り当ては、ユーザーが Windows NT セッションにログオンするときに読み込まれるユーザーのプロファイルの一部です。サービスはユーザー プロファイルでは機能しません。ネットワーク ドライブに割り当てられたドライブ記号の代わりに UNC パスを指定します。

相対パス

相対パス (またはドライブ記号) はパッケージの現在の場所に特有のものです (C:\ など)。パッケージがワークステーションで設計され、その後スケジュールが設定される場合、パッケージを実行する場所が変更されます。ドライブ記号パスは別の物理場所、つまりサーバーを参照することになります。参照しているファイルをサーバーに移動していない限り、パッケージの実行は失敗します。

ActiveX スクリプトでの COM コンポーネント

ActiveX スクリプトで、Microsoft ActiveX Data Objects (ADO)、Remote Data Objects (RDO)、または Decision Support Object (DSO) オブジェクトなどの COM コンポーネントが呼び出される場合、呼び出されるコンポーネントが DTS パッケージが実行されるコンピュータに存在する必要があります。SEM の DTS デザイナまたは DTSRun.exe からパッケージが実行される場合、コンポーネントはユーザーがログオンしているコンピュータに存在する必要があります。パッケージが SQL Server エージェントで実行されるようにスケジュールが設定されている場合は、呼び出されるコンポーネントは SQL Server をホストしているコンピュータに読み込まれる必要があります。

パッケージ セキュリティ

DTS パッケージは所有者パスワードおよびユーザー パスワードを所持します。これらのパスワードはパッケージを編集および実行するユーザーに影響します。これらのパスワードはパッケージが実行されるセキュリティ コンテキストには影響しません。
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 269074 (最終更新日 2000-10-21) をもとに作成したものです。

プロパティ

文書番号:269074 - 最終更新日: 05/10/2011 21:43:00 - リビジョン: 4.0

  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • kbsqlmanagementtools kbproductlink kbinfo KB269074
フィードバック