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