この種の問題のエントリがいくつかありますが、どれもそれを解決できないようです。SQLエージェントジョブで一括挿入が失敗します。ファイルが見つかりません。
私のSQL SERVERエージェントとSQL SERVER AGENTサービスは、両方とも同じユーザーアカウントに設定されています。
は、私は、次の(削除エラーチェック嫌なもの)
exec XP_CMDSHELL 'net use P: \\machine/share password /user:machine\user'
exec XP_CMDSHELL 'dir p: /b /a-d-h-s > p:\dir.txt'
CREATE TABLE #FilesTemp (Filename varchar(200))
BULK INSERT #FilesTemp
FROM 'p:\dir.txt'
WITH
(
ROWTERMINATOR = '\n'
)
私はSSMSからストアドプロシージャを実行すると、それが正常に動作しないストアドプロシージャを持っています。私がジョブを介して実行すると、XP_CMDSHELL呼び出しが正しく動作し、 'dir.txt'ファイルが作成されます。しかし、一括挿入はエラー3(p:\ dir.txtが見つかりません)で失敗します。
私はSSMSにログインしていますが、「sa」を使用してSQL Serverに接続しています。ジョブはsaによって所有されています。必要な権限を持つユーザーが共有を作成しています。
詳細:
私は、サーバーマシンからSSMSを実行しているかいなかったかどうかを尋ねる置き(その後、明らかに削除された)のコメントがありました。私はそれを試してみました。
明らかに、Windows認証を使用して実行すると、バルク挿入は失敗しますが、SAとしてストアドプロシージャを実行すると、正常に動作します。エージェントはWindows認証を使用して実行されており、失敗します。
なぜですか?私はセキュリティ上の問題を理解することができません。
どのような考えですか?
の、ユーザーアカウントでアクセスすることができます残念ながら、私は、ログインエラーが発生します。 –
問題は、一括コピーがSQL Serverのセキュリティコンテキストで行われることです。マップされたドライブは使用できません。uncパスのみ使用できます。サーバーアカウントにアクセス権を与えることができない場合は、ロールをローカルドライブにコピーしてそこからインポートしてください – Mike
saを使用してSQL Serverにログインすると、明らかに正常に動作します。最新の記事を参照してください。したがって、マップされたドライブを使用できます。しかし、明らかにセキュリティ上の問題があります。 –