2009-08-09 7 views

答えて

10

かなり一般的な質問ですが、ここにいくつかの指摘があります。

これは、ADSI(Active Directory Service Interface)を指すSQL Server上に作成するリンクサーバーが必要です。

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

次に、あなたは、クエリの次の並べ替えを使用することができます。あなたはLDAPを設定する必要があります


SELECT * 
FROM OPENQUERY(ADSI, 'SELECT sAMAccountName 
FROM ''LDAP://DC=MyDC,DC=com,DC=uk'' 
WHERE objectCategory = ''Person'' 
AND objectClass = ''user'') 

:適切//行を(詳細については、ADの管理者に問い合わせてください)と分散型アドホックはOPENQUERYを使用して照会することに注意しては、SQL Serverのデフォルトでは無効になっています。一度あなたが上記を持っていれば、それはかなり簡単に特定のバリエーションのためにGoogleにする必要があります。

+0

ADへのリンクは読み取り専用か、このルート経由でも挿入できますか? – Kristen

+0

いいえ選択するだけですが、ADSI COMオブジェクトモデルを使用してユーザーを作成できます。ここに紹介があります。http://en.csharp-online.net/User_Management_with_Active_Directory –

5

はい。

リンクサーバー:

EXEC master.dbo.sp_addlinkedserver 
    @server = N'ADSI', 
    @srvproduct=N'Active Directory Services', 
    @provider=N'ADsDSOObject', 
    @datasrc=N'Servername.domain.com' 

問合せ:

select * from openquery 
(
ADSI,'SELECT name 
FROM ''LDAP://Servername.domain.com'' 
WHERE objectCategory = ''Person'' AND objectClass = ''user'' 
') 

リンクサーバーとLDPAがGoogleで検索した場合の例がたくさんあります。 LDAPは非常に複雑に動作する可能性があるので、これは私が言うことです。

3

Active Directoryのクエリから一度に返される最大1000件のレコードを克服するために、以下で記述した関数を使用できます。

CREATE FUNCTION [dbo].[tf_GetAllUsersFromActiveDirectory] 
() 
RETURNS 
    @USERS TABLE 
     ( 
       sAMAccountName VARCHAR(25)    PRIMARY KEY CLUSTERED  
      , givenName VARCHAR(200) 
      , SN VARCHAR(200) 
      , userAccountControl VARBINARY(8) 
      , mail VARCHAR(200) 
     ) 
AS 
BEGIN 

INSERT INTO @Users 
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=A*)(sAMAccountName=B*)(sAMAccountName=C*)(sAMAccountName=D*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree') 
UNION ALL 
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=E*)(sAMAccountName=F*)(sAMAccountName=G*)(sAMAccountName=H*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree') 
UNION ALL 
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=I*)(sAMAccountName=J*)(sAMAccountName=K*)(sAMAccountName=L*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree') 
UNION ALL 
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=M*)(sAMAccountName=N*)(sAMAccountName=O*)(sAMAccountName=P*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree') 
UNION ALL 
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=Q*)(sAMAccountName=R*)(sAMAccountName=S*)(sAMAccountName=T*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree') 
UNION ALL 
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=U*)(sAMAccountName=V*)(sAMAccountName=W*)(sAMAccountName=X*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree') 
UNION ALL 
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=Y*)(sAMAccountName=Z*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree') 

RETURN 
END 
GO 
3

ちょっとメモ;リンクを削除する

exec sp_dropserver 'ADSI'; 
+1

これに言及してくれてありがとう! – Calanus

関連する問題