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

たとえば、分散クエリの処理時など、リンク サーバーに接続する場合、送信側サーバーは受信側サーバーに接続するためにログイン名とパスワードをリンク サーバーに代わって提供します。この接続を機能させるには、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 のメンバである必要があります。

リンク サーバーのテスト

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