リンク サーバーの作成 (SQL Server データベース エンジン)

リンク サーバーを作成すると、複数のソースのデータを操作できます。リンク サーバーは別の SQL Server インスタンスである必要はありませんが、そのようにするのが一般的です。このトピックでは、リンク サーバーを作成して別の SQL Server からデータにアクセスする方法について説明します。

このトピックの内容

  • 作業を開始する前に:

    背景情報

    セキュリティ

  • 例:

    SQL Server Management Studio

    Transact-SQL

  • 補足情報: リンク サーバーの作成後に実行する手順

背景情報

リンク サーバーを使用すると、OLE DB データ ソースに対する異種の分散クエリの利用が可能になります。リンク サーバーを作成すると、このサーバーに対して分散クエリを実行でき、クエリを使用して複数のデータ ソースのテーブルを結合できます。リンク サーバーを SQL Server インスタンスとして定義した場合は、リモート ストアド プロシージャを実行できます。

リンク サーバーの機能と必須の引数は大きく異なることがあります。このトピックでは、一般的な例を紹介しますが、すべてのオプションについて説明しているわけではありません。詳細については、「sp_addlinkedserver (Transact-SQL)」を参照してください。

セキュリティ

権限

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

[先頭に戻る]

リンク サーバーを作成する方法

次のいずれかを使用できます。

  • SQL Server Management Studio

  • Transact-SQL

SQL Server Management Studio の使用

SQL Server Management Studio を使用して別の SQL Server インスタンスへのリンク サーバーを作成するには

  1. SQL Server Management Studio で、オブジェクト エクスプローラーを開きます。次に、[サーバー オブジェクト] を展開し、[リンク サーバー] を右クリックして、[新しいリンク サーバー] をクリックします。

  2. [全般] ページの [リンク サーバー] ボックスに、リンク先の SQL Server インスタンスの名前を入力します。

    注意

    SQL Server インスタンスが既定のインスタンスの場合は、SQL Server インスタンスをホストするコンピューターの名前を入力します。SQL Server が名前付きインスタンスの場合は、コンピューターの名前とインスタンスの名前を入力します (たとえば、「Accounting\SQLExpress」)。

  3. [サーバーの種類][SQL Server] をクリックし、リンク サーバーが別の SQL Server インスタンスであることを指定します。

  4. [セキュリティ] ページで、元の SQL Server がリンク サーバーに接続するときに使用するセキュリティ コンテキストを指定します。ユーザーがドメイン ログインを使用して接続するドメイン環境では、[ログインの現在のセキュリティ コンテキストを使用する] を選択することが最適な場合が多くあります。ユーザーが SQL Server ログインを使用して元の SQL Server に接続する場合は、[このセキュリティ コンテキストを使用する] をクリックして、リンク サーバーでの認証に必要な資格情報を指定することが最適です。

  5. [OK] をクリックします。

[先頭に戻る]

Transact-SQL の使用

Transact-SQL を使用してリンク サーバーを作成するには、sp_addlinkedserver (Transact-SQL) ステートメント、CREATE LOGIN (Transact-SQL) ステートメント、および sp_addlinkedsrvlogin (Transact-SQL) ステートメントを使用します。

Transact-SQL を使用して別の SQL Server インスタンスへのリンク サーバーを作成するには

  1. クエリ エディターで、次の Transact-SQL コマンドを入力して、SRVR002\ACCTG という名前の SQL Server インスタンスにリンクします。

    USE [master]
    GO
    EXEC master.dbo.sp_addlinkedserver 
        @server = N'SRVR002\ACCTG', 
        @srvproduct=N'SQL Server' ;
    GO
    
    USE [master]
    GO
    EXEC master.dbo.sp_addlinkedserver 
        @server = N'SRVR002\ACCTG', 
        @srvproduct=N'SQL Server' ;
    GO
    
  2. 次のコードを実行して、リンク サーバーを使用しているログインのドメイン資格情報を使用するようにリンク サーバーを構成します。

    EXEC master.dbo.sp_addlinkedsrvlogin 
        @rmtsrvname = N'SRVR002\ACCTG', 
        @locallogin = NULL , 
        @useself = N'True' ;
    GO
    
    EXEC master.dbo.sp_addlinkedsrvlogin 
        @rmtsrvname = N'SRVR002\ACCTG', 
        @locallogin = NULL , 
        @useself = N'True' ;
    GO
    

[先頭に戻る]

補足情報: リンク サーバーの作成後に実行する手順

リンク サーバーをテストするには

  • 次のコードを実行して、リンク サーバーへの接続をテストします。この例は、リンク サーバーにあるデータベースの名前を返します。

    SELECT name FROM [SRVR002\ACCTG].master.sys.sysdatabases ;
    GO
    
    SELECT name FROM [SRVR002\ACCTG].master.sys.sysdatabases ;
    GO
    

リンク サーバーのテーブルを結合するクエリの記述

  • 4 つの要素で構成される名前を使用して、リンク サーバー上のオブジェクトを参照します。次のコードを実行して、ローカル サーバー上のすべてのログインとリンク サーバー上の対応するログインの一覧を取得します。

    SELECT local.name AS LocalLogins, linked.name AS LinkedLogins
    FROM master.sys.server_principals AS local
    LEFT JOIN [SRVR002\ACCTG].master.sys.server_principals AS linked
        ON local.name = linked.name ;
    GO
    
    SELECT local.name AS LocalLogins, linked.name AS LinkedLogins
    FROM master.sys.server_principals AS local
    LEFT JOIN [SRVR002\ACCTG].master.sys.server_principals AS linked
        ON local.name = linked.name ;
    GO
    

    リンク サーバー ログインに対して NULL が返される場合は、リンク サーバー上にログインが存在しないことを示します。リンク サーバーが別のセキュリティ コンテキストを渡すように構成されている場合、またはリンク サーバーが匿名接続を許可する場合を除き、これらのログインではリンク サーバーを使用できません。

[先頭に戻る]