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クエリアナライザーを起動するには
- まず、ディレクトリサービスにリンクされているSQL ServerでSQLクエリアナライザーを開きます ( 「リンクサーバーの作成」 を参照してください) 。
- SQLクエリアナライザーを実行します(||Microsoft SQL Server 7.0)
- SQL Serverコンピューターにログオンします。
- クエリウィンドウのエディターペインにSQLクエリを入力します。
- 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引数です。これは、useselfが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 (作成したリンクサーバーの名前) とクエリステートメントです。 クエリステートメントには、次の項目が含まれます。
- 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