36

共有ネットワーク ディレクトリからテキスト ファイルを読み取る SSIS パッケージがあります。このパッケージを SSDT で実行すると、正常に動作します。ただし、プロジェクトをにデプロイし、Integration Services Catalogそこから同じパッケージを実行しようとすると、ディレクトリへのアクセスが拒否されたことを示すエラーが表示されます。

データベースにログオンして Integration Services Catalog から SSIS パッケージを実行すると、MY ユーザーの資格情報が使用され、ユーザー プロファイルがアクセスできるため、問題のディレクトリにアクセスできるという印象を常に受け​​ていました。 .

そうではありませんか?SQL Server は別のユーザーを使用して IS カタログからパッケージを実行しますか? オプションはありますrun as another userか?任意の入力をいただければ幸いです。

4

3 に答える 3

51

パッケージの実行:

SQL Server データ ツール:

が動作しているユーザー資格情報SQL Server Data Tools (SSDT)は、SSDT 内で実行されるパッケージを実行するために使用されます。

Windows のスタート\すべてのプログラム\Microsoft SQL Server 2012 で、SQL Server Data Tools をクリックすると、資格情報で実行されます。別のユーザー アカウントで実行するには、Ctrl+を押してオプションShiftを選択しRun as different userます。

SSDT からパッケージを実行する

統合カタログ サービス:

下のパッケージを右クリックして、パッケージの実行Integration Services Catalog \ SSISDB \ <Folder name> \ Projects \ <Project name> \ Packages \ <Package name>を選択Execute...すると。パッケージは、SQL Server Management Studio への接続に使用される資格情報で実行されます。

SQL Server 認証を使用してパッケージを実行しようとすると、次のエラー メッセージが表示されることに注意してください。

SQL Server 認証を使用するアカウントでは操作を開始できません。Windows認証を利用したアカウントで運用を開始してください。

実行する

を押すExecute...と、がプロセスをSQL Serverスピンし、プロセスISServerExec.exeを起動しConsole Window Hostます。

SSIS カタログ実行フードの下

ISServerExec.exeSSIS カタログのパッケージを実行するプログラムです。この場合、SQL Server Management Studio から SSIS パッケージを実行するのと同じユーザーで起動されます。

プロキシなしの SQL Server エージェント ジョブ:

SQL Server エージェント ジョブ内から SSIS パッケージを実行すると、ジョブ ステップは既定で の下で実行されますSQL Server Agent Service Account。SQL Server エージェント サービスに関連付けられたユーザー アカウントは、 に移動してWindows Start \ Administrative Tools \ Services検索し、サービス SQL Server エージェント ( Your Instance Name) の下にリストされているユーザー アカウントを見つけます。Log On As

プロキシを使用する SQL Server エージェント ジョブ:

プロキシ アカウントを作成することにより、異なる資格情報で SQL Server エージェント ジョブを実行することもできます。ジョブ ステップがプロキシ アカウントで実行されると、ジョブ ステップのパッケージは、プロキシ アカウントで指定された資格情報で実行されます。

以下の SO 回答では、SQL Server エージェント ジョブを実行するためのプロキシ アカウントを作成するための手順を順を追って説明しています。

SSIS パッケージを実行する SQL Server エージェント ジョブでステップを作成するにはどうすればよいですか?

確認方法:

サンプル SSIS 2012 パッケージ:

パッケージの実行に使用されるユーザー アカウントに関して、上記のステートメントを検証するために私が行ったことは次のとおりです。

  • SQL Server Data Tools を開き、 という名前の SSIS 2012 パッケージを作成しますSO_15289442.dtsx

  • ExecutionUserデータ型という名前の変数を作成しますString@[System::UserName]式を変数に割り当てます。UserNameパッケージを実行しているユーザーの情報を提供するシステム変数です。

  • [メール送信タスク]を[データ フロー] タブにドラッグ アンド ドロップします。

  • SmtpConnectionSMTP 接続を作成し、 [メール送信タスク エディター - メール] ページに割り当てます。

  • FromおよびTo電子メール アドレスを指定します。

  • MessageSourceTypeを に変更しVariableます。

  • を に設定MessageSourceUser::ExecutionUserます。

  • パッケージを右クリックし、[配置] を選択して、選択したサーバーで使用可能な Integration Services カタログにプロジェクトを配置します。

パッケージの実行

  • SSDT 内でパッケージを実行します。

  • [別のユーザーとして実行] オプションを使用して SSDT を開きます。自分以外の資格情報を指定して、パッケージを再度実行してください。

  • Integration Services カタログからパッケージを実行します。

  • SQL Server エージェント サービス アカウントを使用してパッケージを実行する SQL Server エージェント ジョブを作成します。

  • プロキシ アカウントを使用してパッケージを実行する SQL Server エージェント ジョブを作成します。

上記の実行ごとに、パッケージの実行に使用されたユーザー アカウントが記載された電子メールが届きます。

あなたの問題:

あなたの場合、右クリックして Integration Services Catalog から実行を選択すると、パッケージはアカウントで実行されます ( SSISDB へのアクセスに資格情報を使用していると仮定します)。アカウントがネットワーク パスにアクセスできることを確認します。

SQL Server エージェント ジョブ内からパッケージを実行している場合、プロキシ アカウントはrun as another user検討中のオプションです。

于 2013-03-08T14:12:29.260 に答える
3

SQL Server で Kerberos が構成されていないようです (ダブル ホップの問題)。

これは、現在修正されている MS で記録された問題です。 https://connect.microsoft.com/SQLServer/feedback/details/767088/with-the-new-ability-to-execute-ssis-packages-from-tsql-kerberos-delegation-should-be-support

詳細については、次のブログ記事をご覧ください: http://www.sqlscientist.com/2014/01/setup-kerberos-authentication-for-sql.html

これを構成すると、ローカル マシンでストアド プロシージャまたは SSMS を使用してジョブをリモートで開始できるようになります。正しく構成されていれば、資格情報が渡されます。もちろん、ネットワーク リソースにアクセスするための適切な権限があることを確認する必要があります。

于 2014-12-03T17:59:19.843 に答える