1

スケジュールされたタスクを機能させるにはどうすればよいですか?クエリを毎晩実行するタスクをスケジュールしたいと思います。クエリは正しく解析され、基本的にserver2のSQL Server 2005データベースからデータを取得し、server1のデータベースのテーブルにデータを挿入します。クエリとタスクはserver1で実行されます。

server1のMicrosoftSQLServerManagementStudioでクエリを実行できます。SQL Serverエージェントを使用して、クエリを実行するジョブを作成およびスケジュールできますが、ジョブは次のエラーで失敗します。ユーザーNT AUTHORITY\SYSTEMとして実行されました。ユーザー'NTAUTHORITY \ ANONYMOUS LOGON' [SQLSTATE28000][エラー18456]のログインに失敗しました。私の会社のITは、ポリシーの一部であるserver2の対話型ログオンリストに追加する必要があると推測しています。

私はserver1とserver2の両方で管理者権限を持っていますが、後者は必要ないと思います。server1とserver2はどちらもWindows認証を使用します。これは、SQLServerのインストール時に設定されます。

これが私がしたことです。まず、次のコマンドを使用して、server1のsys.sysserversにserver2を追加しました
。EXECsp_addlinkedserver @ server ='server2'

次に、server1とserver2のログイン間のマッピングを次のように作成しました:EXEC sp_addlinkedsrvlogin @rmtsrvname ='server2'、@ useself ='true'

これにより、server1のMicrosoft SQL ServerManagementStudioでクエリを実行できるようになりました。機能した。私が興味を持ったのは、「コマンドが正常に完了した」にもかかわらず、以下が機能しなかったことです。

EXEC sp_addlinkedsrvlogin @rmtsrvname ='server2'、@ useself ='false'、@ locallogin ='MYDOMAIN \ myname'、@ rmtuser ='myname'、@ rmtpassword =' * ** * * '

(Windows認証のため、実際のパスワードは暗号化されていないことに注意してください。)

エラーメッセージ18456、レベル14、状態1、行1のログインがユーザー'myname'で失敗しました。

@useself = TRUEの値は、ログインが独自の資格情報を使用してrmtsrvnameに接続し、rmtuser引数とrmtpassword引数が無視されることを指定します。FALSEは、rmtuser引数とrmtpassword引数を使用して、指定されたlocalloginのrmtsrvnameに接続することを指定します。rmtuserとrmtpasswordに指定したものは、リモートサーバーに直接ログインするために使用するものとまったく同じであるため、両方が機能することを期待していました。

4

1 に答える 1

0

ジョブは常に、Sql Server Agent サービスで指定されたユーザーとして実行されます。サービスが LocalSystem として実行されている場合は、リンク サーバーの追加ログインを次のように変更する必要があります。

EXEC sp_addlinkedsrvlogin @rmtsrvname = 'server2', @useself = 'false', @locallogin = 'NT AUTHORITY\SYSTEM', @rmtuser = 'myname', @rmtpassword = '*****'

localsystem でない場合は、エージェントで使用されるログインを指定します

詳細については、このディスカッションを参照してくださいhttp://www.sqlservercentral.com/Forums/Topic1003064-146-1.aspx#bm1003182

于 2013-03-06T00:01:29.007 に答える