【徹底解説】SQL Server リンクサーバー(Linked Server)の作成・設定・活用ガイド

by Dibyendu Datta, 翻訳:加藤龍彦 | February 28, 2024 | Last Updated: May 14, 2026

Linked Servers in SQL Server

リンクサーバー(英語:Linked Server)はMicrosoft SQL Serverの機能で、ODBC準拠の外部データベースに対してTransact-SQLを直接実行できます。別のSQL Serverインスタンスや、Oracleなど他社DBのテーブルに対してフェデレーテッドクエリ・更新・分散トランザクションをT-SQLだけで処理できるのが最大のメリットです。

ただし、認証方式の選択ミスやクエリの書き方次第でパフォーマンスが大きく変わります。このガイドでは、作成手順・セキュリティ設定・よくあるエラーの対処法まで順を追って説明します。

リンクサーバーとは?

SQL ServerのリンクサーバーはSQL Serverインスタンスと外部データソースの接続を管理します。接続先は次のいずれかです。

  • 別のSQL Serverインスタンス

  • OracleやMySQLなど他社データベース

  • ODBC準拠の非データベースデータソース

メリット

  • 統合データアクセス:異なるDBのデータをローカルテーブルと同じT-SQLで操作できます。

  • 分散トランザクション:複数のデータベースにまたがるトランザクションを1つのクエリで処理できます。

  • クエリプッシュダウン:OPENQUERYを使うと条件をリモート側に渡せるため、全データをローカルに引っ張らずに済みます。

デメリット

  • セキュリティリスク:認証設定を誤ると、意図しない権限昇格やデータ漏洩につながります。

  • パフォーマンスの落とし穴:クエリの書き方が悪いと、リモートテーブル全体をローカルに転送してからフィルタリングする最悪のケースになります。

  • 管理コスト:リモートサーバーのIP・認証情報が変わった場合、リンクサーバーの設定を追随して更新する必要があります。

リンクサーバーが向いているケース

  • 同一ネットワーク内の複数DBを、レプリケーションなしに連携したい場合(ETLを組むほどでもない規模)

  • 複数システムにまたがるクエリやレポートをT-SQLで完結させたい場合

  • リモートデータを時々参照・更新するだけで、常時同期は不要な場合

ベストプラクティス

  • セキュリティ:最小権限の原則を守り、リモートログインは必要なアカウントだけに絞ります。

  • パフォーマンス:リモートテーブルへのクエリにはOPENQUERYを使ってリモート側でフィルタリングしてください。後述のエラー3で詳しく説明します。

SQL Serverでリンクサーバーを作成する9つの手順

SSMSのGUIで作成する方法と、T-SQLで作成する方法の両方を説明します。

T-SQLコマンドでリンクサーバーを作成する

スクリプトで管理したい場合や、複数環境に同じ設定を展開する場合はT-SQLの方が確実です。

-- 1. リンクサーバーの作成(SQL Server間の場合)
EXEC sp_addlinkedserver
    @server     = 'REMOTE_SERVER',
    @srvproduct = '',
    @provider   = 'SQLNCLI',
    @datasrc    = '192.168.1.100';

-- 2. ログインマッピングの設定
EXEC sp_addlinkedsrvlogin
    @rmtsrvname  = 'REMOTE_SERVER',
    @useself     = 'FALSE',
    @locallogin  = NULL,
    @rmtuser     = 'remote_user',
    @rmtpassword = 'password';

-- 3. フェデレーテッドクエリの実行
SELECT * FROM [REMOTE_SERVER].[データベース名].[dbo].[テーブル名];

-- 4. リンクサーバー一覧の確認
SELECT name, product, provider, data_source
FROM sys.servers WHERE is_linked = 1;

-- 5. リンクサーバーの削除
EXEC sp_dropserver @server = 'REMOTE_SERVER', @droplogins = 'droplogins';

OracleやMySQLなどODBCドライバー経由で接続する場合は、@provider'MSDASQL'@datasrcにDSN名を指定します。

  1. SQL Server Management Studio(SSMS)を開く:マシンでSSMSアプリケーションを起動します。

  2. SQL Serverインスタンスに接続する:SSMSで、リンクサーバーを作成するSQL Serverインスタンスに接続します。

    Creating and Configuring a SQL Server Linked Server

  3. 「サーバーオブジェクト」に移動する:SSMSのオブジェクトエクスプローラーペインで、「サーバーオブジェクト」フォルダーを展開します。

    Creating and Configuring a SQL Server Linked Server

  4. 「リンクサーバー」にアクセスする:「サーバーオブジェクト」の下にある「リンクサーバー」フォルダーを右クリックします。

  5. 新しいリンクサーバーを作成する:コンテキストメニューから「新しいリンクサーバー」を選択してダイアログボックスを開きます。

    Creating and Configuring a SQL Server Linked Server

  6. リンクサーバーの詳細を指定する:ダイアログボックスでリンクサーバーの名前を指定し、サーバータイプとして「SQL Server」を選択します。「リンクサーバー」テキストボックスに入力した名前がリモートSQL Serverの識別名になります。

  7. インスタンスの詳細を指定する:デフォルトインスタンスならコンピューター名を入力します。名前付きインスタンスなら「コンピューター名\インスタンス名」の形式で入力してください。

    Creating and Configuring a SQL Server Linked Server

  8. セキュリティ設定を構成する:「セキュリティ」ページで認証方式を選択します。選択肢の詳細は次のセクションで解説します。

    Creating and Configuring a SQL Server Linked Server

  9. セットアップを完了する:「OK」をクリックしてリンクサーバーを作成します。

SSMSのバージョンや環境によって画面が若干異なる場合があります。

SQL Serverリンクサーバーのパーミッション

セキュリティ設定には4つのオプションがあります。それぞれの動作と使いどころを整理します。

  • 接続しない:ログインマッピングを設定しません。匿名接続を試みますが通常は失敗します。テスト用途以外では使いません。

  • セキュリティコンテキストを使用せずに接続する:@useself = 'False' でNULLマッピングを明示的に設定します。「接続しない」とは別物で、セキュリティコンテキストを渡さないことを明示的に指定します。

  • ログインの現在のセキュリティコンテキストを使用して接続する:接続ユーザーのWindows認証をリモートサーバーにそのまま渡します。Active Directory環境ではこれが最も安全な選択です。

  • このセキュリティコンテキストを使用して接続する:指定したユーザー名とパスワードで全ユーザーが接続します。管理しやすい反面、最もリスクが高い設定です。認証情報の漏洩やパスワード変更時の影響範囲に注意してください。

SQL Serverリンクサーバーのユースケース

  • 小さいデータセットのクエリ:別のSQL ServerやODBC準拠DBに存在する参照データを、ローカルDBと結合してクエリしたい場合に向いています。

  • 小規模ETL:リモートサーバーからデータを取得してローカルに加工・ロードする処理を、SSISなどの専用ツールなしにT-SQLだけで完結させたい場合に使えます。

  • 異種DB環境でのレポーティング:SQL Server、Oracle、MySQLなど複数のDBをまたいだクエリをレポートツールから実行したい場合に有効です。

  • フェデレーテッドクエリ:データが複数のサーバーに分散していて、定期的に結合クエリを実行する必要がある場合。常時同期は不要だが、リアルタイムで最新データを参照したいケースに向いています。

SQL Serverリンクサーバーのよくあるエラーと解決方法

実際の現場でよく踏むエラーを4つ取り上げます。

エラー1:ログイン失敗(匿名ログイン)

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

Kerberos認証の設定ミスか、SPNが未登録のときに出ます。sp_addlinkedsrvloginでリモートログインを明示的にマッピングするか、@useself = 'TRUE'でWindows認証を使ってください。Active Directory環境ではまずSPN(Service Principal Name)の登録状態を確認します。

エラー2:OLEDBプロバイダーエラー

The OLE DB provider "SQLNCLI" for linked server "..." does not support the required interface.

プロバイダーが古いか、要求しているインターフェイスに未対応の場合です。SQL Server Native Client(SQLNCLI)を最新版に更新するか、MSOLEDBSQL(Microsoft OLE DB Driver for SQL Server)への移行を検討してください。

エラー3:リンクサーバーのパフォーマンス低下

リモートテーブルへのクエリが異様に遅い場合、リモート側でフィルタリングできずテーブル全体を転送しているケースがほとんどです。OPENQUERYで書き直すと大幅に改善します。

-- 推奨:OPENQUERYでリモート側フィルタリング
SELECT * FROM OPENQUERY(REMOTE_SERVER,
    'SELECT * FROM dbo.Orders WHERE OrderDate > ''2024-01-01''');

-- 非推奨:ローカルでフィルタリング(全データ転送が発生)
SELECT * FROM [REMOTE_SERVER].[DB].[dbo].[Orders]
WHERE OrderDate > '2024-01-01';

エラー4:タイムアウト・接続失敗

TCP Provider: A connection attempt failed...が出る場合は、ファイアウォールでSQLポート(デフォルト1433)が開いているか確認してください。リモートサーバーのSQL Server Browserサービスが停止していても同じ症状が出ます。

リンクサーバーと代替手段の比較

リンクサーバーはODBC準拠のDBへの接続に限られます。Salesforce・SAP・Dynamics 365のようなクラウドSaaSには直接つなげません。

手法

対応データソース

リアルタイム

設定難易度

向いているケース

SQL Server リンクサーバー(ネイティブ)

SQL Server, Oracle, ODBC準拠DB

同一ネットワーク内のDB間連携

CData ODBC ドライバー

300+ソース(Salesforce, SAP, Dynamics 365 等)

クラウドSaaS・非標準DBへのリアルタイム接続

CData Sync

300+ソース

❌(バッチ)

データウェアハウスへの定期同期・ETLパイプライン

SSIS(SQL Server Integration Services)

ODBC準拠全般

❌(バッチ)

複雑なETLパイプラインの構築

CData ODBCドライバーでリンクサーバーの接続先を拡張する

ネイティブのリンクサーバーはODBC準拠DBとしか通信できません。CData ODBCドライバーを挟むと、SalesforceやSAPなどODBC未対応のSaaSにもリンクサーバーとして接続できるようになります。

仕組みはシンプルで、CData SQL GatewayのTDSリモーティング機能がSQL Server側から見て通常のSQL Serverインスタンスに見える形でODBCデータソースを公開します。SSMSのGUIからでもsp_addlinkedserverからでも設定できます。詳細な手順はドキュメントをご覧ください。

Salesforce・SAP・Dynamics 365・Google BigQueryなど、ODBCドライバーを直接持たないSaaSへの接続が必要な場面は増えています。CData ODBCドライバーを使えば、既存のリンクサーバー設定を活かしたまま300以上のデータソースに対応できます。

手順は4ステップです。

  1. 接続先サービス(例:Salesforce)向けのCData ODBCドライバーをインストールする

  2. Windowsの「ODBCデータソースアドミニストレーター」でDSNを作成する

  3. リンクサーバーの設定でプロバイダーをMSDASQL、データソースにDSN名を指定する

  4. 通常のT-SQLクエリでSalesforceのデータを取得・更新できる

既存のSQL Server環境やBIツールの設定を変えずに、クラウドデータへのリアルタイムアクセスが追加できます。

定期的なデータ同期・ETLパイプライン構築にはCData Syncもあります。ノーコードで300+ソースからSQL Serverへのデータ同期を自動化できます。

ODBCドライバーの30日間無料トライアルから始められます。サポートチームCDataコミュニティもご活用ください。

※本記事はCData US ブログCData's Guide to Creating and Configuring a SQL Server Linked Serverの翻訳です。

Try CData today

Get direct, live connectivity to the data you need from any application, system, or database. Try CData Drivers today.

Try CData today