こんにちは、立ち寄ってくれてありがとう。リンクサーバーを正しい方法で作成するためのガイダンスを探している偶然のDBAです。 MSは、データ型の完全な説明と、sp_addlinkedserver、sp_addlinkedsrvlogin、sp_serveroptionのさまざまなパラメーターすべての説明を提供しますが、さまざまなオプションを特定の状況のベストプラクティスとして調整する方法についてのガイダンスはありません。
単に「sa」パスワードを使用した他のDBAの例がありますが、私の調査では、リンクサーバーの使用に合わせて調整されたカスタムログインを使用する必要があることが示されています。問題は、これまでのところ、適切な組み合わせと順序(opsの順序)を見つけられず、すべてのパーツとピースを正しく作成して、2つのサーバー間の通信を制限できるリンクサーバーを作成することです。
目標:ソースサーバー間のリンクサーバーを作成して、ソースサーバーからのジョブステップで特定の条件を確認し、TRUEの場合、宛先サーバーでsp_start_jobを呼び出します。 ...そして何もない。
アドバイスとして、ソースと宛先の両方に同じ名前/ pwの2つのSQL Authログインを作成しました。どちらも「パブリック」権限が制限されています。
ローカルログインをリモートログインにマップしようとするリンクサーバーを作成しました(これが達成されたとしたら、宛先ログインのアクセス許可を慎重に調べて、sp_start_jobの実行を許可するアクセス許可を見つけます)。
しかし、これまでのところ、私の唯一の報酬は、さまざまなタイプの一連の失敗通知でした。
さまざまなproc/paramの機能を説明するオンラインドキュメントがたくさんありますが、procs/paramsの組み合わせがさまざまな望ましい結果をもたらす方法を説明するある種の概要を見つけるのに苦労しています。
私はいくつかの有用なアドバイス、いくつかの「まだ発見されていない」チュートリアルへの参照、または多分私の目標を達成し、少し自尊心を養う方法についてのステップバイステップの指示さえ望んでいます。 (これまでのところ、このタスクは私の自我を傷つけるだけです!)
お時間をいただきありがとうございます。
私はWindows Authと@useself='True'
は、ソースサーバーのSQL Serverエージェントサービスアカウントを使用してリモート接続を確立します。ログインに失敗した場合は、ターゲットサーバーのSQL Serverエラーログを調べて、ターゲットサーバーにログインを作成するためのWindowsプリンシパルを決定します。したがって、リンクサーバーの定義は次のようになります。
USE [master]
GO
EXEC sp_addlinkedserver @server = N'TargetServer', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'targetserver.mydomain.com'
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'TargetServer',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO
EXEC sp_serveroption @server=N'TargetServer', @optname=N'collation compatible', @optvalue=N'true'
GO
EXEC sp_serveroption @server=N'TargetServer', @optname=N'data access', @optvalue=N'true'
GO
EXEC sp_serveroption @server=N'TargetServer', @optname=N'rpc out', @optvalue=N'true'
GO
EXEC sp_serveroption @server=N'TargetServer', @optname=N'remote proc transaction promotion', @optvalue=N'false'
GO
Kerberos Constrained Delegation を適切に構成する必要があるため、リンクサーバーが定義されているSQL Serverへのリモート接続では、呼び出し元の偽装がより複雑になります。ただし、SQLエージェントジョブから使用する場合、「ダブルホップ」ではないため、構成は非常に単純です。