共有ネットワークディレクトリからテキストファイルを読み取るSSISパッケージがあります。 SSDTでこのパッケージを実行すると、正常に機能します。ただし、プロジェクトをIntegration Services Catalog
そして、そこから同じパッケージを実行しようとすると、ディレクトリへのアクセスが拒否されたことを示すエラーが表示されます。
データベースにログオンしてIntegration ServicesカタログからSSISパッケージを実行すると、MYユーザー資格情報を使用するため、ユーザープロファイルがアクセスできるため、問題のディレクトリにアクセスできるという印象を受けました。 。
そうではありませんか? SQL Serverは別のユーザーを使用してISカタログからパッケージを実行しますか?run as another user
?任意の入力をいただければ幸いです。
SQL Server Data Tools (SSDT)
が動作しているユーザー資格情報は、SSDT内で実行されるパッケージの実行に使用されます。
Windowsスタート\すべてのプログラム\ Microsoft SQL Server 2012で、SQL Serverデータツールをクリックすると、資格情報の下で実行されます。別のユーザーアカウントで実行するには、 Ctrl + Shift Run as different user
オプションを選択します。
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
プロセスが起動します。
ISServerExec.exe
は、SSISカタログでパッケージを実行するプログラムです。この場合、SQL Server Management StudioからSSISパッケージを実行するユーザーと同じユーザーの下で起動されます。
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エージェントジョブを実行することもできます。ジョブステップがプロキシアカウントで実行されると、ジョブステップのパッケージはプロキシアカウントで指定された資格情報で実行されます。
以下SO answerは、SQL Serverエージェントジョブを実行するためのプロキシアカウントを作成するための段階的な指示を提供します。
SSISパッケージを実行するSQL Serverエージェントジョブでステップを作成するにはどうすればよいですか?
これは、パッケージの実行に使用されるユーザーアカウントに関して上記のステートメントを検証するために行ったことです。
SQL Serverデータツールを開き、SO_15289442.dtsx
という名前のSSIS 2012パッケージを作成します。
データ型ExecutionUser
のString
という名前の変数を作成します。式@[System::UserName]
を変数に割り当てます。 UserName
は、パッケージを実行するユーザーの情報を提供するシステム変数です。
メールタスクの送信をデータフロータブにドラッグアンドドロップします。
SMTP接続を作成し、メール送信タスクエディター-メールページのSmtpConnection
に割り当てます。
From
およびTo
メールアドレスを指定します。
MessageSourceTypeをVariable
に変更します。
MessageSource
をUser::ExecutionUser
に設定します。
パッケージを右クリックし、[展開]を選択して、選択したサーバーで利用可能なIntegration Servicesカタログにプロジェクトを展開します。
SSDT内でパッケージを実行します。
[別のユーザーとして実行]オプションを使用してSSDTを開きます。自分以外の別の資格情報を指定して、パッケージを再度実行してください。
Integration Servicesカタログからパッケージを実行します。
SQL Serverエージェントサービスアカウントを使用してパッケージを実行するSQL Serverエージェントジョブを作成します。
プロキシアカウントを使用してパッケージを実行するSQL Serverエージェントジョブを作成します。
上記の実行ごとに、パッケージの実行に使用されたユーザーアカウントが記載された電子メールを受け取ります。
あなたの場合、パッケージは、Integration Services Catalogから右クリックして[実行]を選択すると、アカウント(を使用して資格情報を使用してSSISDBにアクセスすると仮定します)の下で実行されます。アカウントがネットワークパスにアクセスできることを確認してください。
SQL Serverエージェントジョブ内からパッケージを実行している場合、プロキシアカウントはrun as another user
オプションです。
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を使用して、リモートでジョブを開始できるはずです。正しく構成されている場合、資格情報を渡します。もちろん、ネットワークリソースにアクセスするための適切なアクセス許可があることを確認する必要があります。
これは古いスレッドですが、発生している問題は実際にはファイルへのパスにあると思います。 UNC名またはドライブ文字を使用していますか。つまり、ファイルパスは「Z:\ path\to\file.csv」または「\ server\share\path\to\file.csv」のようなものですか?
ドライブ文字の場合、そのドライブがマップされているのでローカルマシンでは問題なく動作しますが、ドライブ文字がマップされていないためサーバー上で失敗します。