sp_addlinkedsrvlogin (Transact-SQL)

適用対象:SQL Server

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

Transact-SQL 構文表記規則

構文

sp_addlinkedsrvlogin
    [ @rmtsrvname = ] N'rmtsrvname'
    [ , [ @useself = ] 'useself' ]
    [ , [ @locallogin = ] N'locallogin' ]
    [ , [ @rmtuser = ] N'rmtuser' ]
    [ , [ @rmtpassword = ] N'rmtpassword' ]
[ ; ]

引数

[ @rmtsrvname = ] N'rmtsrvname'

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

[ @useself = ] 'useself'

ローカル ログインを偽装するか、ログインとパスワードを 明示的に送信して rmtsrvname に接続するかを決定します。 @useselfは varchar(8) で、既定値は true.

  • 値は、ログインが独自のtrue資格情報を使用して@rmtsrvname接続し、@rmtuser引数と@rmtpassword引数が無視されることを指定します。
  • falseは、指定した@localloginの@rmtsrvnameに接続するために@rmtuser引数と@rmtpassword引数を使用することを指定します

@rmtuserと@rmtpasswordNULL設定されている場合、リンク サーバーへの接続にログインまたはパスワードは使用されません。

[ @locallogin = ] N'locallogin'

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

[ @rmtuser = ] N'rmtuser'

@rmtsrvnameに接続するために@useself使用されるリモート ログインです。false @rmtuserは sysname で、既定値は NULL. リモート サーバーが Windows 認証を使用しない SQL Server のインスタンスである場合、 @rmtuser は SQL Server ログインです。

[ @rmtpassword = ] N'rmtpassword'

@rmtuserに関連付けられているパスワード。 @rmtpasswordは sysname で、既定値は NULL.

リターン コードの値

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

解説

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

Note

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

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

SQL Server では、事前に sp_addlinkedsrvlogin 定義されたログイン マッピングを作成する代わりに、クエリを発行するユーザーの 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 認証は使用しません。 パスワードは暗号化されずに送信されます。 パスワードは、ディスク、バックアップ、およびログ ファイルに保存されるデータ ソース定義とスクリプトに表示される場合があります。 この種類の接続では、システム管理者のパスワードを使用しないでください。 環境に固有のセキュリティ ガイダンスについては、ネットワーク管理者に問い合わせてください。