0

現在説明できない奇妙なシナリオがあります。私は、それが単なる「金曜日の気持ち」であるか、ここでの親切な唯一の人が私の脳を救い出し、「しかしなぜ!?」の無限ループから私を救うことを望んでいます。:)

SQL Server 2005を実行し、DNSエントリが次の2つのサーバー:

1. ServerA  
2. ServerB  

(まあ、彼らは実際にはそれと呼ばれていませんが、それで十分です...)

両方のSQLServerインスタンスには、他のサーバーを指すように構成されたリンクサーバーがあります。

明らかなセキュリティ上の理由から、LinkedServerのセキュリティ構成は次のように設定されています。

- Be made using the login's current security context

その他の「リンクサーバーオプション」は...

Collation Compatible: True
Data Access:          True
RPC:                  True
RPC Out:              True
Use Remote Collation: True
Collation Name:       <blank>
Connection Timeout:   30
Command Timeout:      10

ログインは、両方のインスタンスで同じパスワードで作成されます。ログインには、関連するストアドプロシージャへの適切な実行権限が付与されます。

私はいくつかのコードを書き、そのログインの下でそれを実行します、そしてそれはすべてうまくいきます


しかし、これらのストアドプロシージャを実行するためにエージェントジョブを作成すると、すべてがうまくいきません。エージェントジョブの所有者は「automated_job_login」ですが、エラーログに次のように表示されます。-ユーザー「automated_job_login」のログインに失敗しました

(この場合も、有罪を保護するためにその名前が変更されています。)


そのユーザーとしてログインしたときになぜ機能するのか、一生理解できませんが、リンクサーバーに接続するとジョブエラーが発生します。(リンクされたサーバー接続の時点で間違いなくです。)

さらに混乱させるために、リンクサーバーのセキュリティ構成を「このセキュリティコンテキストを使用して作成する」に変更し、正しいパスワードで「automated_job_login」を指定すると、正常に機能します。

私は何かが欠けています、私は私がそうであるに違いないことを知っています、しかし私は何を見つけることができません。目が出血して失敗するまで、ドキュメントを読みました。私を助けてください :)


[Linked Server Secuiryオプションを「このセキュリティコンテキストを使用して作成する」のままにしておくことは、そのサーバーのすべてのユーザーに他のサーバーへの許容できないレベルのアクセスを与えるため、オプションではありません。]

4

1 に答える 1

3

SQLエージェントジョブはログインによって所有されている可能性がありますが、そのログインコンテキストでは実行されません。SQLエージェントサービスアカウントのコンテキストにあります

SQL Server 2005を使用しているため、ストアドプロシージャオプションとしてEXEC AS USER='mylogin'を使用できます。

@database_user_nameそれ以外の場合は、のパラメータを使用してデータベースユーザー名を設定する必要がありますsp_add_jobstepSSMSでは、コンテキストを設定できます。仕事の所有権は、IIRCの設定とは少し異なります。

于 2009-03-21T00:25:40.407 に答える