sp_addlinkedsrvlogin (Transact-sql SQL)

適用対象:yesSQL Server (サポートされているすべてのバージョン)

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

Topic link iconTransact-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 の場合は、ログインが独自の資格情報を使用して rmtsrvnameに接続することを指定します。 rmtuserrmtpassword 引数は無視されます。 FALSE を指定すると、 rmtuserrmtuser引数を使用して、指定されたlocalloginrmtsrvnameに接続します。 RmtuserRMTUSERも NULL に設定されている場合は、リンクサーバーへの接続にログインまたはパスワードは使用されません。

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

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

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

リターン コードの値

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

解説

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

Note

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

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

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

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

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

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

Note

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

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 SQL)
sp_droplinkedsrvlogin (Transact-sql SQL)
システム ストアド プロシージャ (Transact-SQL)