次の方法で共有


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

適用対象:SQL ServerAzure SQL Managed Instance

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

リンク サーバーは、SQL Server および Azure SQL Managed Instance (一部制約あり) で使用できます。 リンク サーバーは、Azure SQL Database では使用できません。

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

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

  • SQL Server の外部のデータにアクセスできる。

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

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

リンク サーバーは、SQL Server Management Studio または sp_addlinkedserver ステートメントを使用して構成できます。 各 OLE DB プロバイダーは、必要なパラメーターの数と型という点で大きく異なります。 たとえば、プロバイダーによっては、sp_addlinkedsrvlogin を使用して接続のセキュリティ コンテキストを指定する必要があります。 SQL Server から OLE DB ソース上のデータを更新できる 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 (PROGID: MSOLEDBSQL) が既定の OLE DB プロバイダーです。 それより前のバージョンでは、SQL Server Native Client (PROGID: SQLNCLI11) が既定の OLE DB プロバイダーでした。

重要

SQL Server Native Client (SNAC と略されることがよくあります) は、SQL Server 2022 (16.x) と SQL Server Management Studio 19 (SSMS) から削除されました。 SQL Server Native Client OLE DB プロバイダー (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) はどちらも、新しい開発には推奨されません。 今後は、新しい Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server に切り替えてください。

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

SQL Server 分散クエリは、必要な OLE DB インターフェイスを実装する任意の OLE DB プロバイダーと連携します。 ただし、SQL Server は既定の OLE DB プロバイダーに対してテストされています。

リンク サーバーの詳細

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

クライアント層、サーバー層、データベース サーバー層を示す図。

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

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

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

重要

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

プロバイダーの管理

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

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

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

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

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

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

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

SQL Server Management Studio を使用して、リンク サーバーを定義することもできます。 オブジェクト エクスプローラーで[ サーバー オブジェクト]を右クリックし、[ 新規]、[ リンク サーバー]の順に選択します。 リンク サーバー名を右クリックして [削除]をクリックすると、リンク サーバーの定義を削除できます。

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

一時オブジェクトへの参照は、リンク サーバー名のプレフィックスを付ける場合でも、ローカル インスタンスの tempdb (該当する場合) に常に解決されます。

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

Azure SQL Managed Instance を備えたリンク サーバー

Azure SQL Managed Instance の リンク サーバーは、Microsoft Entra ID を使用した SQL 認証と認証の両方をサポートしています。

Azure SQL Managed Instance で SQL Agent ジョブを使用し、リンク サーバーを介してリモート サーバーにクエリを実行するには、sp_addlinkedsrvlogin を使用して、ローカル サーバーのログインからリモート サーバーのログインへのマッピングを作成します。 SQL Agent ジョブは、リンク サーバーを介してリモート サーバーに接続すると、リモート ログインのコンテキストで T-SQL クエリを実行します。 詳細については、「Azure SQL Managed Instance での SQL Agent ジョブ」をご覧ください。

Microsoft Entra 認証

Microsoft Entra 認証モードとしては、マネージド ID とパススルーの 2 つがサポートされています。 マネージド ID 認証を使用して、ローカル ログインがリモート リンク サーバーに対してクエリを実行できるようにします。 パススルー認証を使用して、ローカル インスタンスで認証できるプリンシパルがリンク サーバー経由でリモート インスタンスにアクセスできるようにします。

Azure SQL Managed Instance のリンク サーバーに Microsoft Entra パススルー認証を使用するには、次の前提条件が必要です。

  • リモート サーバー上のログインと同じプリンシパルが追加されます。
  • どちらのインスタンスも、SQL 信頼グループのメンバーです。

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

次の制限事項は、Azure SQL Managed Instance のリンク サーバー向け Microsoft Entra 認証に適用されます。

  • Microsoft Entra 認証は、異なる Microsoft Entra テナントの SQL Managed Instance ではサポートされていません。
  • リンク サーバーに対する Microsoft Entra 認証は、OLE DB ドライバー バージョン 18.2.1 以降でのみサポートされます。

SQL Server 2025 および MSOLEDBSQL バージョン 19

SQL Server 2025 (17.x) 以降、MSOLEDBSQL プロバイダーは既定で Microsoft OLE DB Driver 19 を使用します。 この更新されたドライバーでは、 TDS 8.0TLS 1.3 のサポートなど、重要なセキュリティ強化が導入されています。

TDS 8.0 では、新しい暗号化オプションを追加することでセキュリティが向上し、破壊的変更が導入されました。 Encryption パラメーターは省略可能ではなくなりました。 別の SQL Server インスタンスを対象とする場合は、接続文字列で設定する必要があります。

Encrypt パラメーターを指定しない場合、SQL Server 2025 (17.x) のリンク サーバーは既定でEncrypt=Mandatoryされ、有効な証明書が必要です。 有効な証明書がない接続は失敗します。

Encryption パラメーターには、次の 3 つの異なる設定が用意されています。

  • Yes、または True、または Mandatory
  • No、または False、または Optional
  • Strict

Strict オプションでは、TDS 8.0 の使用が必須であり、セキュリティで保護された接続用のサーバー証明書が必要です。 Yes / True / Mandatoryの場合、信頼できる証明書が必要です。 自己署名証明書は使用できません。

OLE DB バージョン 暗号化パラメーター 指定できる値 既定値
OLE DB 18 オプション True または MandatoryFalse 、または No No
OLE DB 19 必須 No または FalseYes または MandatoryStrict (新規) Yes

TrustServerCertificate パラメーターはサポートされていますが、推奨されません。 信頼サーバー証明書Yes に設定すると、証明書の検証が無効にされ、暗号化された接続のセキュリティが低下します。 信頼サーバー証明書を使用するには、クライアントもマシン レジストリで有効にする必要があります。 信頼サーバー証明書を有効にする方法については、「レジストリ設定」を参照してください。 運用環境では、 TrustServerCertificate=Yes の設定は推奨されません。

Encrypt=FalseまたはEncrypt=Optionalを使用する場合:

  • 証明書は必要ありません。
  • 信頼された証明書が提供されている場合、ドライバーはそれを検証しません。
  • 接続では暗号化は提供されません。

Encrypt=TrueまたはEncrypt=Mandatoryを使用し、TrustServerCertificate=Yesを使用しない場合:

  • 接続には、有効な CA 署名付き証明書が必要です。
  • 証明書は、サーバーの FQDN と一致している必要があります。
  • 証明書の代替名が SQL Server ホスト名と異なる場合は、 HostNameInCertificate FQDN に設定する必要があります。
  • 証明書は、クライアント コンピューターの 信頼されたルート証明機関 ストアにインストールする必要があります。

Encrypt=Strictを使用する場合:

  • 接続によって TDS 8.0 が適用されます。
  • 接続には、FQDN が一致する有効な CA 署名証明書が必要です。
  • HostNameInCertificate FQDN に設定する必要があります。
  • 証明書は、クライアント システムによって信頼されている必要があります。
  • TrustServerCertificate 構成はサポートされていません。 有効な証明書が存在する必要があります。
[サーバー証明書を信頼する] クライアント設定 接続文字列/接続属性 Trust Server Certificate 証明書の検証
0 No (既定値) イエス
0 Yes イエス
1 No (既定値) イエス
1 Yes いいえ

新しいドライバーとの互換性とセキュリティを確保するために、リンク サーバー接続を構成するときに接続文字列でこれらの設定を正しく指定する必要があります。

以前の OLEDB バージョンからの更新

対象:SQL Server 2025(17.x)以降のバージョン

Microsoft OLE DB Driver 19 を使用して以前のエディションの SQL Server から SQL Server 2025 (17.x) に移行すると、既存のリンク サーバー構成が失敗する可能性があります。 有効な証明書を指定しない限り、暗号化パラメーターの既定値が異なると、このエラーが発生する可能性があります。

または、リンク サーバーを再作成し、接続文字列に Encrypt=Optional を含めることもできます。 リンク サーバーの構成を変更できない場合は、トレース フラグ 17600 を有効にして、OLE DB 18 の動作と既定値を維持します。

SQL Server Management Studio (SSMS) リンク サーバー作成ウィザードで、[ その他のデータ ソース ] オプションを使用して、リンク サーバーの暗号化オプションを手動で構成します。

OLE DB 19 の暗号化、証明書、および OLE DB 19 の信頼サーバー証明書の動作の詳細については、「OLE DB での暗号化と証明書の検証」を参照してください。