web-dev-qa-db-ja.com

Integration Servicesカタログはパッケージを実行するためにどのユーザー資格情報を使用しますか?

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

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

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

33
JohnnyLaw

パッケージの実行:

SQL Serverデータツール:

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

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

Execute package from SSDT

統合カタログサービス:

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

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

SQL Server認証を使用するアカウントでは、操作を開始できません。 Windows認証を使用するアカウントで操作を開始します。

Execute

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

Under SSIS Catalog execution hood

ISServerExec.exeは、SSISカタログでパッケージを実行するプログラムです。この場合、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 answerは、SQL Serverエージェントジョブを実行するためのプロキシアカウントを作成するための段階的な指示を提供します。

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

確認方法:

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

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

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

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

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

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

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

  • MessageSourceTypeVariableに変更します。

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

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

パッケージの実行

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

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

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

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

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

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

あなたの問題:

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

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

39
user756519

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-サポートされている

これの詳細に関する素晴らしいブログ投稿があります: http://www.sqlscientist.com/2014/01/setup-kerberos-authentication-for-sql.html

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

3
Travis Obrycki

これは古いスレッドですが、発生している問題は実際にはファイルへのパスにあると思います。 UNC名またはドライブ文字を使用していますか。つまり、ファイルパスは「Z:\ path\to\file.csv」または「\ server\share\path\to\file.csv」のようなものですか?

ドライブ文字の場合、そのドライブがマップされているのでローカルマシンでは問題なく動作しますが、ドライブ文字がマップされていないためサーバー上で失敗します。

0
bmg002