リンク サーバー名の使用によるデータ ソースの識別

リンク サーバーを定義した後、このリンク サーバー内のデータ オブジェクトを参照するには、Transact-SQL ステートメントの中で linked_server_name**.catalog.**schema.object_name という 4 部構成の名前を使用します。各部分の説明は次のとおりです。

  • linked_server_name
    OLE DB データ ソースを参照するリンク サーバー。

  • catalog
    オブジェクトが格納されている OLE DB データ ソース内のカタログ。

  • schema
    オブジェクトが格納されているカタログ内のスキーマ。

  • object_name
    スキーマ内のデータ オブジェクト。

たとえば、次のクエリでは、SEATTLESales リンク サーバーにある AdventureWorks2008R2 データベースの Production.Product テーブルと Sales.SalesOrderDetails テーブルを参照します。

SELECT p.Name, sod.SalesOrderID

FROM SEATTLESales.AdventureWorks2008R2.Production.Product p

INNER JOIN SEATTLESales.AdventureWorks2008R2.Sales.SalesOrderDetail sod

ON p.ProductID = sod.ProductID

ORDER BY p.Name ;

SQL Server は、linked_server_name を使用して OLE DB プロバイダーとデータ ソースを識別します。catalog、schema、および object_name の各パラメーターは、特定のデータ オブジェクトを識別するために OLE DB プロバイダーに渡されます。リンク サーバーが SQL Server のインスタンスを参照する場合、catalog はデータベースを参照し、schema はスキーマを参照します。

SQL Server の以前のバージョンでは、スキーマはオブジェクトの所有者でした。SQL Server では、スキーマを作成したデータベース ユーザーとは無関係にスキーマが存在します。SQL Server のスキーマの詳細については、「ユーザーとスキーマの分離」を参照してください。

リンク サーバーのオブジェクトで処理をする際には、常に完全修飾名を使用します。リンク サーバーでは、テーブルの dbo 所有者名への暗黙の解決はサポートされていません。したがって、リンク サーバーが別の SQL Server インスタンスである場合でも、スキーマ名のないクエリを実行するとエラー 7313 が発生します。

システム管理者は、sp_addlinkedsrvlogin システム ストアド プロシージャを使用してログイン マッピングを設定することで、特定のリンク サーバーへのユーザー アクセスを制御できます。このストアド プロシージャを使用すると、任意のローカル ログインにリモート ログインとパスワードを使用するよう設定できます。また、このストアド プロシージャを使って、Windows 認証ログイン用の "自己" マッピングを設定することもできます。

セキュリティに関する注意セキュリティに関する注意

データ ソースに接続する場合、SQL Server は Windows 認証ログインでは適切なログインの権限を借用しますが、SQL Server は SQL Server 認証ログインを借用できません。したがって、SQL Server 認証ログインの場合、ファイルや Active Directory などの非リレーショナル データ ソースなど、別のデータ ソースに SQL Server がアクセスするには、SQL Server サービスを実行している Windows アカウントのセキュリティ コンテキストを使用します。ここで、SQL Server サービスを実行しているアカウントには権限があっても、このようなログインには本来権限のない他のデータ ソースに対して、アクセスを許可してしまう可能性があります。sp_addlinkedsrvlogin を使用してリンク サーバーに対する SQL Server 認証ログインへのアクセス権を許可する場合は、この点に十分注意してください。