リンク サーバー (データベース エンジン)

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

リンク サーバーを使用すると、SQL Server データベース エンジン と Azure SQL Managed Instance でリモート データ ソースからデータを読み取り、SQL Server のインスタンスの外部にあるリモート データベース サーバー (OLE DB データ ソースなど) に対してコマンドを実行できます。 通常、リンク サーバーは、データベース エンジン が SQL Server の別のインスタンスまたは Oracle などの別のデータベース製品のテーブルを含む Transact-SQL ステートメントを実行するように構成されます。 サードパーティのデータベース プロバイダーや Azure CosmosDB など、さまざまな種類の OLE DB データ ソースをリンク サーバーとして構成できます。

Note

リンク サーバーは、SQL Server データベース エンジン Azure SQL Managed Instance で使用できます。 シングルトン プールとエラスティック Azure SQL Databaseでは有効になっていません。 Managed Instance には、ここに示されるいくつかの制限があります。

リンク サーバーを使用する場合

リンク サーバーを使用すると、他のデータベース内のデータをフェッチおよび更新できる分散データベースを実装することができます。 これらは、カスタム アプリケーション コードを作成したりリモート データ ソースから直接読み込むことなく、データベース シャーディングを実装する必要があるシナリオで適切なソリューションです。 リンク サーバーには次の利点があります。

  • 外部からデータにアクセスSQL Server。

  • 企業内のさまざまなデータ ソースに対して分散クエリ、更新、コマンド、およびトランザクションを実行できる。

  • さまざまなデータ ソースを同じように処理できる。

リンク サーバーを構成するには、SQL Server Management Studio または sp_addlinkedserver (Transact-SQL) ステートメントを使用します。 各 OLE DB プロバイダーは、必要なパラメーターの数と型という点で大きく異なります。 たとえば、一部のプロバイダーでは、sp_addlinkedsrvlogin (Transact-SQL) を使用して接続のセキュリティ コンテキストを指定する必要があります。 一部OLE DBプロバイダーではSQL Serverソース上のデータを更新OLE DBできます。 読み取り専用データ アクセスに特化したものも存在します。 各 OLE DB プロバイダーの詳細については、該当する OLE DB プロバイダーのドキュメントを参照してください。

リンク サーバーのコンポーネント

リンク サーバーの定義では、次のオブジェクトを指定します。

  • OLE DB プロバイダー

  • OLE DB データ ソース

OLE DB プロバイダー は、特定のデータ ソースを管理し、相互運用する DLL です。 OLE DB データ ソース は、OLE DB を使用してアクセスできる特定のデータベースを識別します。 リンク サーバーの定義を使用してクエリが行われるデータ ソースは通常はデータベースですが、さまざまなファイルやファイル形式用の OLE DB プロバイダーが存在します。 これには、テキスト ファイル、ワークシートのデータ、およびフルテキスト検索の結果が含まれます。

SQL Server 2019 (15.x) から、Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL) (PROGID: MSOLEDBSQL) が既定の OLE DB プロバイダーです。 以前のバージョンでは、SQL Server Native Client OLE DB provider (SQLNCLI) (PROGID:SQLNCLI11) が既定の OLE DB プロバイダーでした。

Microsoft Access および Excel ソースへのリンク サーバーは、32 ビット Microsoft.JET.OLEDB.4.0 プロバイダーを使用している場合にのみ、Microsoft によってOLE DBされます。

Note

SQL Server分散クエリは、必要なインターフェイスを実装するOLE DBプロバイダーで動作するように設計OLE DBされています。 ただし、SQL Server既定のプロバイダーに対してテストOLE DBされています。

リンク サーバーの詳細

次の図に、基本的なリンク サーバー構成を示します。

Diagram showing client tier, server tier, and database server tier

リンク サーバーは、通常は分散クエリの処理に使用します。 クライアント アプリケーションがリンク サーバーを介して分散クエリを実行すると、SQL Serverがコマンドを解析し、そのクエリに要求OLE DB。 行セット要求は、プロバイダーに対するクエリの実行や、プロバイダーのベース テーブルを開くなどの形式をとります。

Note

データ ソースがリンク サーバーを介してデータを返す場合、そのデータ ソースの OLE DB プロバイダー (DLL) は、SQL Server のインスタンスと同じサーバー上に存在する必要があります。

重要

OLE DB プロバイダーを使用する場合、SQL Server サービスを実行するアカウントには、ディレクトリと、プロバイダーがインストールされているすべてのサブディレクトリに対する読み取りおよび実行アクセス許可が必要です。 これには、Microsoft によってリリースされたプロバイダー、およびすべてのサードパーティのプロバイダーが含まれます。

Note

リンク サーバーでは、完全委任を使用する場合に、Active Directory パススルー認証をサポートします。 SQL Server 2017 (14.x) CU17 より、制約付き委任によるパススルー認証もサポートされています。ただし、リソースベースの制約付き委任はサポートされていません。

プロバイダーの管理

レジストリで指定されたプロバイダーを読み込SQL Server使用する方法OLE DB一連のオプションがあります。

リンク サーバー定義の管理

リンク サーバーを設定する場合は、接続情報とデータ ソース情報を SQL Server。 登録後、1 つの論理名でデータ ソースを参照できます。

ストアド プロシージャとカタログ ビューを使用して、リンク サーバーの定義を管理できます。

  • sp_addlinkedserver を実行して、リンク サーバーの定義を作成します。

  • システム カタログ ビューに対してクエリを実行して、SQL Serverの特定のインスタンスに定義されているリンク サーバーに関する情報sys.serversを表示します。

  • sp_dropserver を実行して、リンク サーバーの定義を削除します。 このストアド プロシージャを使用して、リモート サーバーを削除することもできます。

リンク サーバーは、次のコマンドを使用してSQL Server Management Studio。 オブジェクト エクスプローラーで [サーバー オブジェクト] を右クリックし、 [新規作成] をポイントして、 [リンク サーバー] をクリックします。 リンク サーバー名を右クリックして [削除] をクリックすると、リンク サーバーの定義を削除できます。

リンク サーバーに対して分散クエリを実行する場合は、クエリを実行するデータ ソースごとに 4 つの部分で構成される完全修飾テーブル名を指定します。 この 4 部構成の名前は、 linked_server_name.catalog の形式である必要がありますスキーマobject_name

Note

リンク サーバーは、どのサーバーで定義されたかを示す (ループ バックする) ように定義することができます。 ループバック サーバーは、単一のサーバー ネットワークで分散クエリを使用するアプリケーションをテストする際に最も有効です。 ループバック リンク サーバーはテスト用であり、分散トランザクションなどの多くの操作ではサポートされていません。

Azure SQL Managed Instance リンク サーバー認証

Azure SQL Managed Instance リンク サーバーでは、SQL 認証と Azure AD (AAD) の両方がサポートされています。 AAD 認証モードとしては、マネージド ID とパススルーの 2 つがサポートされています。 マネージド ID 認証を使用すると、ローカル ログインがリモート リンク サーバーに対してクエリを実行するのを許可することができます。 パススルー認証を使用すると、ローカル インスタンスで認証できるプリンシパルからリンク サーバー経由でリモート インスタンスにアクセスするのを許可することができます。 パススルー認証を行うには、同じプリンシパルがリモート サーバー上にログインとして追加されていて、かつ両方のインスタンスが SQL 信頼グループのメンバーであることが前提条件となります。

Note

パススルー モード用に構成されたリンク サーバーの既存の定義では、Azure AD 認証がサポートされます。 この場合の唯一の要件は、Managed Instance をサーバー信頼グループに追加することです。

Azure AD 認証の制限事項

  • Azure AD 認証は、異なる Azure AD テナントにある Managed Instance に対してはサポートされません。
  • リンク サーバーに対する Azure AD 認証は、OLE DB ドライバー バージョン 18.2.1 以降でのみサポートされます。
  • Managed Instance から SQL Server へのリンク サーバーの Azure AD 認証は、マップされたローカル ログインでのみサポートされます。 セキュリティ コンテキストの伝達はサポートされていません。 つまり、マネージド ID 認証はサポートされますが、パススルー認証はサポートされません。

関連項目

次の手順