分散クエリ

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

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

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

SQL Query Analyzer を開始するには

  1. まず、ディレクトリ サービスにリンクされている SQL Server 上の SQL Query Analyzer を開きます (「リンク サーバーの作成」を参照)。
  2. SQL Query Analyzer を実行する (開始 |プログラム |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" は、リンク サーバーとして追加する OLE DB データ ソースの名前である srvproduct 引数です。
  • "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 引数です。これは、が false 使用するため、接続に使用するユーザー名です。
  • "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 とクエリ ステートメントの 2 つの引数があります。 クエリ ステートメントには、次の項目が含まれています。

  • 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