リンク サーバーのセキュリティ

たとえば、分散クエリの処理時など、リンク サーバーに接続する場合、送信側サーバーは受信側サーバーに接続するためにログイン名とパスワードをリンク サーバーに代わって提供します。この接続を機能させるには、SQL Server システム ストアド プロシージャを使用して、リンク サーバー間でログイン マッピングを作成する必要があります。

リンク サーバーのログイン マッピングを追加するには sp_addlinkedsrvlogin を使用し、削除するには sp_droplinkedsrvlogin を使用します。リンク サーバーのログイン マッピングによって、指定したリンク サーバーとローカル ログインにリモート ログインとリモート パスワードが設定されます。SQL Server が分散クエリまたはストアド プロシージャを実行するためにリンク サーバーに接続すると、プロシージャのクエリを実行している現在のログインに対応するログイン マッピングが SQL Server で検索されます。SQL Server では、ログイン マッピングが存在すると、リンク サーバーに接続するときに、対応するリモート ログインとパスワードが送信されます。

たとえば、リンク サーバー S1 のマッピングが、ローカル ログイン U1 とリモート ログイン U2 (リモート パスワード 8r4li034j7$) に設定されているとします。ローカル ログイン U1 がリンク サーバー S1 に格納されたテーブルにアクセスする分散クエリを実行すると、SQL Server ではリンク サーバー S1 に接続するときに、ユーザー ID U2、パスワード 8r4li034j7$ が渡されます。

リンク サーバー構成の既定のマッピングでは、ログインに関する現在のセキュリティ資格情報をエミュレートします。このようなマッピングを自己マッピングと呼びます。sp_addlinkedserver を使用してリンク サーバーを追加すると、すべてのローカル ログインに対して既定の自己マッピングが追加されます。セキュリティ アカウントの委任が使用でき、リンク サーバーが Windows 認証をサポートしている場合は、Windows 認証済みログインに対する自己マッピングがサポートされます。

注意

可能な場合は、Windows 認証を使用します。

クライアント サーバーまたは送信側のサーバーでセキュリティ アカウントの委任を使用できない場合、またはリンク サーバーやプロバイダーで Windows 認証モードが認識されない場合は、Windows 認証を使用するログインに対しては自己マッピングが機能しません。したがって、Windows 認証を使用するログインから、リンク サーバーの Windows 認証されるログインではない特定のログインに、ローカル ログイン マッピングを設定する必要があります。この場合、リンク サーバーが SQL Server のインスタンスであれば、リモート ログインに SQL Server 認証が使用されます。

分散クエリは、リモート テーブル上のリンク サーバーによってリモート ログインに許可される権限を必要とします。ただし、SQL Server ではコンパイル時に権限の検証は行われません。権限違反は、クエリの実行時にプロバイダーが報告することによって検出されます。

注意

リンク サーバー上のテーブルを使用するときに最善のクエリ プランを作成するには、クエリ プロセッサがリンク サーバーからデータ分布統計情報を取得する必要があります。テーブルの列に対するユーザーの権限が制限されていると、必要な統計情報を取得できるだけの十分な権限がないためにクエリ プランが非効率になり、高いパフォーマンスが得られない場合があります。リンク サーバーが SQL Server のインスタンスである場合、利用可能な統計情報をすべて取得するには、ユーザーがテーブルを所有しているか、リンク サーバーの固定サーバー ロール sysadmin、固定データベース ロール db_owner、または固定データベース ロール db_ddladmin のメンバーである必要があります。

リンク サーバーのテスト

オブジェクト エクスプローラーでリンク サーバーを右クリックし、[接続テスト] をクリックします。