sp_addlinkedsrvlogin (Transact-SQL)

適用対象:SQL Server

SQL Serverのローカル インスタンス上のログインとリモート サーバー上のセキュリティ アカウントの間のマッピングを作成または更新します。

Transact-SQL 構文表記規則

構文

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'   
     [ , [ @useself = ] { 'TRUE' | 'FALSE' | NULL } ]   
     [ , [ @locallogin = ] 'locallogin' ]   
     [ , [ @rmtuser = ] 'rmtuser' ]   
     [ , [ @rmtpassword = ] 'rmtpassword' ]   

引数

[ @rmtsrvname = ] 'rmtsrvname'
ログイン マッピングが適用されるリンク サーバーの名前です。 rmtsrvnamesysname で、既定値はありません。

[ @useself = ] { 'TRUE' | 'FALSE' | NULL }'
ローカル ログインを偽装するか、ログインとパスワードを明示的に送信して rmtsrvname に接続するかを決定します。 データ型は varchar(8)で、既定値は TRUE です。

TRUE の値は、rmtuser 引数と rmtpassword 引数を無視して、ログインが独自の資格情報を使用して rmtsrvname に接続することを指定します。 FALSE は、指定された localloginrmtsrvname に接続するために rmtuser 引数と rmtpassword 引数を使用することを指定します。 rmtuserrmtpassword も NULL に設定されている場合、リンク サーバーへの接続にログインまたはパスワードは使用されません。

[ @locallogin = ] 'locallogin'
ローカル サーバー上のログインです。 localloginsysname で、既定値は NULL です。 NULL は、このエントリが rmtsrvname に接続するすべてのローカル ログインに適用されることを指定します。 NULL でない場合、locallogin には、SQL Server ログインまたは Windows ログインを指定できます。 Windows ログインには、直接、またはアクセスを許可された Windows グループのメンバーシップを介して、SQL Serverへのアクセス権が付与されている必要があります。

[ @rmtuser = ] 'rmtuser'
が FALSE の場合@useself、rmtsrvname への接続に使用されるリモート ログインです。 リモート サーバーが Windows 認証を使用しないSQL Serverのインスタンスである場合、rmtuser はSQL Server ログインです。 rmtusersysname で、既定値は NULL です。

[ @rmtpassword = ] 'rmtpassword'
rmtuser に関連付けられているパスワードです。 rmtpasswordsysname で、既定値は NULL です。

リターン コードの値

0 (成功) または 1 (失敗)

解説

ユーザーがローカル サーバーにログオンし、リンク サーバー上のテーブルにアクセスする分散クエリを実行する場合、ローカル サーバーは、そのテーブルにアクセスするためにユーザーの代わりにリンク サーバーにログオンする必要があります。 sp_addlinkedsrvlogin を使用して、ローカル サーバーがリンク サーバーへのログインに使用するログイン資格情報を指定します。

注意

リンク サーバーでテーブルを使用するときに最適なクエリ プランを作成するには、クエリ プロセッサにリンク サーバーからのデータ分散統計が必要です。 テーブルの列に対するアクセス許可が制限されているユーザーは、すべての有用な統計を取得するための十分なアクセス許可を持っていない可能性があり、効率の低いクエリ プランを受け取り、パフォーマンスが低下する可能性があります。 リンク サーバーがSQL Serverのインスタンスである場合、使用可能なすべての統計情報を取得するには、ユーザーがテーブルを所有しているか、sysadmin 固定サーバー ロール、db_owner固定データベース ロール、またはリンク サーバー上の固定データベース ロールdb_ddladminメンバーである必要があります。 SQL Server 2012 SP1 では、統計を取得するための権限の制限が変更され、SELECT 権限を持つユーザーは DBCC SHOW_STATISTICS で入手可能な統計にアクセスできます。 詳細については、「 DBCC SHOW_STATISTICS (Transact-SQL)」の「Permissions」セクションを参照してください。

sp_addlinkedserver を実行することにより、ローカル サーバー上のすべてのログインとリンク サーバー上のリモート ログインとの間の既定のマッピングが自動的に作成されます。 既定のマッピングでは、ログインの代わりにリンク サーバーに接続するときに、SQL Serverがローカル ログインのユーザー資格情報を使用することが示されます。 これは、ローカル ユーザー名を指定せずに、リンク サーバーに @useself 対して true に設定されたsp_addlinkedsrvloginを実行するのと同じです。 既定のマッピングを変更するときや、特定のローカル ログインに対応する新しいマッピングを追加するときだけ sp_addlinkedsrvlogin を使用します。 既定のマッピングまたはその他のマッピングを削除するには、sp_droplinkedsrvlogin を使用します。

sp_addlinkedsrvloginを使用して事前に定義されたログイン マッピングを作成する代わりに、SQL Serverは、クエリを発行するユーザーの Windows セキュリティ資格情報 (Windows ログイン名とパスワード) を自動的に使用して、次のすべての条件が存在する場合にリンク サーバーに接続できます。

  • ユーザーは、Windows 認証モードを使用してSQL Serverに接続されます。

  • セキュリティ アカウントの委任は、クライアントと送信サーバーで使用できます。

  • プロバイダーは Windows 認証モードをサポートしています。たとえば、Windows で実行SQL Server。

注意

シングルホップ シナリオでは委任を有効にする必要はありませんが、複数ホップのシナリオでは必要です。

SQL Serverのローカル インスタンスでsp_addlinkedsrvloginを実行することによって定義されたマッピングを使用して、リンク サーバーによって認証が実行された後、リモート データベース内の個々のオブジェクトに対するアクセス許可は、ローカル サーバーではなくリンク サーバーによって決定されます。

ユーザー定義のトランザクション内から sp_addlinkedsrvlogin を実行することはできません。

アクセス許可

サーバーに対する ALTER ANY LOGIN 権限が必要です。

A. 独自のユーザー資格情報を使用して、すべてのローカル ログインをリンク サーバーに接続する

次の例では、ローカル サーバーへのすべてのログインが、独自のユーザー資格情報を使用してリンク サーバー Accounts に接続されるようにマッピングを作成します。

EXEC sp_addlinkedsrvlogin 'Accounts';  

または

EXEC sp_addlinkedsrvlogin 'Accounts', 'true';  

Note

個々のログインに対して明示的なマッピングが作成されている場合は、そのリンク サーバーに存在する可能性があるグローバル マッピングよりも優先されます。

B. 別のユーザー資格情報を使用してリンク サーバーに特定のログインを接続する

次の例では、Windows ユーザーDomain\MaryがログインMaryPとパスワード d89q3w4uを使用してリンク サーバーAccountsに接続するようにマッピングを作成します。

EXEC sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', 'd89q3w4u';  

重要

この例では、Windows 認証は使用しません。 パスワードは暗号化されずに送信されます。 パスワードは、ディスク、バックアップ、およびログファイルに保存されたデータ ソース定義やスクリプトで参照できます。 この種類の接続では、システム管理者のパスワードを使用しないでください。 環境に固有のセキュリティ ガイダンスについては、ネットワーク管理者に問い合わせてください。

参照

リンク サーバーのカタログ ビュー (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
sp_droplinkedsrvlogin (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)