2016-06-28 7 views
0

この種の問題のエントリがいくつかありますが、どれもそれを解決できないようです。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認証を使用して実行されており、失敗します。

なぜですか?私はセキュリティ上の問題を理解することができません。

どのような考えですか?

答えて

0

マップされたドライブのセキュリティを作成するためにマップされたドライブを使用していますが、マップされたドライブをバルク挿入に使用することはできません。

ただし、UNCパスを使用できますが、セキュリティはSQL Serverアカウントのものです。

は、データへの接続、私はBULK INSERTコマンドは、SQL Serverの 認証を使用してログインすることにより開始されたときには、

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' 


exec Xp_cmdshell 'move p:\dir.txt c:\dir.txt' 


CREATE TABLE #FilesTemp (Filename varchar(200)) 

BULK INSERT #FilesTemp 
FROM 'c:\dir.txt' 
WITH 
    (
     ROWTERMINATOR = '\n' 
    ) 

タイプミスだったと推測しますが、/共有の隣にスラッシュを持っていますSQL Serverプロセスアカウント(SQL サーバーデータベースエンジンサービスで使用されているアカウント)のセキュリティコンテキスト を使用して作成されます。対照的に、SQL Serverユーザーが でWindows認証を使用してログオンすると、ユーザーはこれらのファイルのみを読み取ることができます私はそれをしようとすると、その に関係なく、SQL Serverプロセスのセキュリティプロファイル

https://msdn.microsoft.com/en-us/library/ms188365.aspx

+0

の、ユーザーアカウントでアクセスすることができます残念ながら、私は、ログインエラーが発生します。 –

+0

問題は、一括コピーがSQL Serverのセキュリティコンテキストで行われることです。マップされたドライブは使用できません。uncパスのみ使用できます。サーバーアカウントにアクセス権を与えることができない場合は、ロールをローカルドライブにコピーしてそこからインポートしてください – Mike

+0

saを使用してSQL Serverにログインすると、明らかに正常に動作します。最新の記事を参照してください。したがって、マップされたドライブを使用できます。しかし、明らかにセキュリティ上の問題があります。 –

関連する問題