Distributed Query

ADSIはOLE DBプロバイダーであるため、Microsoft SQL Server 7.0で導入された分散クエリに参加できます。 次のシナリオが考えられます。

  • Active DirectoryオブジェクトとSQL Serverデータの結合。
  • Active DirectoryオブジェクトからのSQLデータの更新。
  • 他のOLE DBプロバイダーとの3方向または4方向の結合の作成。 たとえば、インデックスサーバー、SQL Server、Active Directoryなどです。

OLE DBプロバイダーは、ディレクトリサービスにアクセスし、SQL Server分散クエリでクエリできる表形式で結果を返すために、LDAPとSQLの2つのコマンドダイアレクトをサポートしています。

SQLクエリアナライザーを起動するには

  1. まず、ディレクトリサービスにリンクされているSQL ServerでSQLクエリアナライザーを開きます ( 「リンクサーバーの作成」 を参照してください) 。
  2. SQLクエリアナライザーを実行します(||Microsoft SQL Server 7.0)
  3. SQL Serverコンピューターにログオンします。
  4. クエリウィンドウのエディターペインにSQLクエリを入力します。
  5. F5キーを押してクエリを実行します。

以降のセクションでは、詳細について説明します。

リンクサーバーの作成

Windows 2000 Serverディレクトリサービスで分散結合を設定するには、リンクサーバーを作成します。 これを行うには、sp_addlinkedserverシステムストアドプロシージャを使用してADSIマッピングを設定します。 このプロシージャは、名前をOLE DBプロバイダー名にリンクします。

次の例では、sp_addlinkedserverシステムストアドプロシージャでいくつかの引数が使用されていることに注意してください。"

  • 「ADSI」はサーバー引数で、このリンクサーバーの名前になります。"。
  • 「Active Directory Services 2.5」はsrvproduct引数で、リンクサーバーとして追加するOLE DBデータソースの名前です。"。
  • 「ADSDSOObject」はprovider_name引数です。
  • 「adsdatasource」はdata_source引数で、OLE DBプロバイダーによって解釈されるデータソースの名前です。

EXECコマンドは、システムストアドプロシージャを実行するために使用されます。

EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5', 
'ADSDSOObject', 'adsdatasource'
GO

Windows認証ログインの場合、SQL Serverセキュリティ委任を使用してディレクトリにアクセスするには、自己マッピングで十分です。 sp_addlinkedserverによって作成されたリンクサーバーに対しては、既定で自己マッピングが作成されるため、他のログインマッピングは必要ありません。

SQL Server認証ログインの場合は、sp_addlinkedsrvloginシステムストアドプロシージャを使用して、ディレクトリサービスに接続するための適切なログインとパスワードを構成できます。

メモ

可能な場合は、Windows 認証を使用します。

 

SQL Server認証ログインの作成

Windows認証ではなくSQL Server認証ログインを使用する場合は、リンクサーバーにログインを追加します (前のセクションを参照) 。 これを行うには、sp_addlinkedsrvloginシステムストアドプロシージャを使用します。

次の例では、sp_addlinkedsrvloginシステムストアドプロシージャで使用される引数がいくつかあります。"

  • 「ADSI」はrmtsvrname引数で、前の例で作成したリンクサーバーの名前です。"。
  • 「Fabrikam\Administrator」はlocallogin引数で、ローカルサーバー上のログインです。SQL ServerログインまたはWindows NTユーザーを指定できます。"。
  • 「CN=Administrator, OU=Sales, DC=activeds, DC=Fabrikam, DC=com」はrmtuser引数です。これは、useselffalseであるため、接続に使用するユーザー名です。"。
  • 「secret**2000」はrmtpasswordで、rmtuserに関連付けられているパスワードです。

EXECコマンドは、システムストアドプロシージャを実行するために使用されます。

EXEC sp_addlinkedsrvlogin 'ADSI', false, 'Fabrikam\Administrator', 
'CN=Administrator,OU=Sales,DC=activeds,DC=Fabrikam,DC=com', 'secret**2000'

ディレクトリサービスのクエリ

リンクサーバーを作成したら、OPENQUERYステートメントを使用してディレクトリサービスにクエリを送信します。 次のSQLクエリでは、CREATE VIEWステートメントを使用して、クエリ結果を保持する仮想テーブルを作成します。 作成されるビューの名前は"viewADContacts"です。

最初のSELECTステートメントは、ディレクトリサービスからクエリされる情報を定義し、それをテーブルの列にマップします。 角かっこで囲まれた情報は、仮想テーブルに格納されるデータを示します。 角かっこで囲まれていない情報は、ディレクトリサービスから取得されるデータを示します。 ディレクトリサービスから取得される情報は、LDAP表示名で参照する必要があることに注意してください。

次のステートメントはOPENQUERYステートメントです。 ADSI (作成したリンクサーバーの名前) とクエリステートメントです。 クエリステートメントには、次の項目が含まれます。

  • SELECTステートメントには、ディレクトリサービスから取得するデータの一覧が含まれます。 LDAP表示名を使用して、検索するデータを示す必要があります。
  • FROMステートメントには、この情報を取得するリンクされたディレクトリサーバーの名前が含まれます。
  • WHEREステートメントは、検索条件を指定します。 この例では、連絡先を検索しています。

最後のSELECTステートメントは、表示するビューから結果を取得するために使用されます。

CREATE VIEW viewADContacts
AS
SELECT  [Name], sn [Last Name], street [Street], l [City], st [State]
FROM OPENQUERY( ADSI, 
     'SELECT name, sn, street, l, st
      FROM 'LDAP:// OU=Sales,DC=activeds,DC=Fabrikam,DC=Com'
      WHERE objectCategory='Person' AND 
      objectClass = 'contact'')
GO
SELECT * FROM viewADContacts