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