sp_addlinkedsrvlogin (Transact-SQL)

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

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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

引数

  • [ @rmtsrvname = ] 'rmtsrvname'
    ログイン マッピングの対象となるリンク サーバーの名前を指定します。rmtsrvname のデータ型は sysname で、既定値はありません。

  • [ @useself = ] 'TRUE' | 'FALSE' | NULL
    rmtsrvname への接続で、ローカル ログインを借用するか、または明示的にログインとパスワードを送信するかを指定します。データ型は varchar(8) で、既定値は TRUE です。

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

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

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

  • [ @rmtpassword = ] 'rmtpassword'
    rmtuser に関連付けられているパスワードを指定します。rmtpassword のデータ型は sysname で、既定値は NULL です。

リターン コード値

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

説明

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

注意

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

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

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

  • ユーザーが Windows 認証モードを使用して SQL Server に接続している。

  • クライアントと送信側サーバーで、セキュリティ アカウント委任が利用可能になっている。

  • たとえば Windows 上で実行されている SQL Server のように、プロバイダーが Windows 認証モードをサポートしている。

注意

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

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

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

権限

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

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

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

EXEC sp_addlinkedsrvlogin 'Accounts'

または

EXEC sp_addlinkedsrvlogin 'Accounts', 'true'
注意

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

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

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

EXEC sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', 'd89q3w4u'
セキュリティに関する注意セキュリティに関する注意

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