私のサーバー設定は少し奇妙です。DB 管理者の 1 人がリンク サーバーをサーバーに追加しました。リンク サーバーのプロパティの [セキュリティ] ビューに次のように表示されます。
Local server login to remote server login mappings:
Local Login Impersonate Remote User Remote Password
domain\myusername CHECKED
For a login not defined in the list above, connections will:
- Be made using the security context
Remote login: linkedserveruser
With password: **************
したがって、次のストアド プロシージャを作成すると、次のようになります。
SELECT *
INTO #TEMP
FROM LINKEDSERVERNAME.DBName.dbo.TableName
-- Update local table after processing #TEMP
SQL ジョブをセットアップすると、次のメッセージが表示されて失敗していました。
Message
Executed as user: NT AUTHORITY\NETWORK SERVICE. Login failed for user 'linkedserveruser'. [SQLSTATE 28000] (Error 18456). The step failed.
ドキュメントを掘り下げた後、この問題を説明するKB811031記事を見つけ、セキュリティ コンテキストをマップしてジョブを osql として実行することを提案しました。
(上記のリンク サーバーの設定からわかるように) セキュリティ コンテキストは既にマップされているため、マップする必要はありませんでした。提案どおり、タイプをオペレーティング システム コマンドに変更しました。今ジョブを実行すると、次のメッセージが表示されます。
Executed as user: domain\MYMACHINENAME$. Msg 18456, Level 14, State 1, Server SOMEOTHERDATABASENAME, Line 1 Login failed for user 'linkedserveruser'. Process Exit Code 0. The step succeeded.
そして、実際には失敗したのに、ジョブは成功を報告しなくなります。リンク サーバーへのクエリを含むこのタイプのストアド プロシージャを SQL ジョブとして実行する方法について何か提案はありますか?