views:

6883

answers:

4

I need to import all ad groups in a few OUs into a table in SQL Server 2008. Once I have those I need to import all the members of those groups to a different table. I can use c# to do the work and pass the data to SQL server or do it directly in SQL server.

Suggestions on the best way to approach this?

+6  A: 

Add a Linked Server to your SQL Server and query the Active Directory via LDAP queries. This here described this quite well:

Create a SQL Server View of your AD Users, Brendan Tompkins (MVP)

Mudu
I think you can only return 1000 active directory objects from within SQL server, because you can't do a paged query from SQL server.
Jeremy
A: 

Mudu,

Thanks, that has got me started. I can query users and groups from the domain that the SQL Server is in. Problem is I want to query against a different domain, ideas how I would do this.

Also, how would I get group membership?

Thanks in advance.

Arry
+3  A: 

Arry,

I don't know exactly, but found some links that may help you. I think the hottest track is this expression:

"(&(objectCategory=Person)(memberOf=DN=GroupName, OU=Org, DC=domain,
DC=com))"

I found it in LDAP Query for group members on a ColdFusion community's site. I'm more or less sure the filter can easily be applied to your query. I'm sorry, but I cannot test it, because I have no AD around here.

This one could also be a bit (but less) interesting:

http://forge.novell.com/pipermail/cldap-dev/2004-April/000042.html

Hope this helps, cheers,

Matthias

Mudu
The filter described in this answer is the best way to return all users within an Active Directory Security Group that I have found.
Eddie
A: 

I'm having the same issue. I need to query users from our internal domain and users from our external domain. The OUs and Groups that I use for my application are in the external domain. The SQL Server is in the internal domain. I can query the internal domain just fine but get the following error when I try the external domain from SQL Server:

Msg 7330, Level 16, State 2, Line 1 Cannot fetch a row from OLE DB provider "ADSDSOObject" for linked server "(null)".

I'm using OPENROWSET as follows:

select * FROM OPENROWSET('ADSDSOObject', 'User ID=domain\User;Password=XXX;adsdatasource;', 'SELECT cn, mail, co, distinguishedName, displayName FROM ''LDAP://DC=XX,DC=XX'' where objectClass = ''User'' ')

This works on our internal domain. Any pointers would be greatly appreciated.

Thanks, Mike