Wednesday, June 28, 2017

Cannot fetch a row from OLE DB provider "ADSDSOObject" for linked server

Meine Abfrage sollte alle Benutzer in einer bestimmten AD-Gruppe selektieren.

Wenn man so eine Fehlermeldung (Cannot fetch a row from OLE DB provider "ADSDSOObject" for linked server) bekommt, hat es meistens mit der Anzahl der "OLEDB Provider for Directory Services" abgefragten Daten zu tun.

Den Schwellenwert-Vorschlag 901 habe ich nicht gesehen und auch nicht probiert. Die Daten waren 18000+. Und eine andere Abfrage brachte schon 17403 Datensaetze. Also der Wert musste deutlich hoeher sein als 901. Ich habe dann ueber sAMAccountName eine Paging eingebaut.

SELECT sAMAccountname FROM OPENQUERY (ADS, ';(&amp;(&amp;(&amp;(objectCategory=person)(memberof=CN=DE-BW-Sales,OU=Groups,DC=consto,DC=com))(sAMAccountName<=d))(sAMAccountName>=a));sAMAccountname;subtree') ORDER BY Samaccountname

Bei dem kleiner-gleich Operator wird das Gleichheitszeichen ignoriert. Also hier kommen nur die User, deren Benutzernamen mit a, b und c anfangen.

Sunday, June 18, 2017

LDAP Query

The active directory services on your domain controller allows querying objects within T-SQL. During the preparation for the exam 70-462 I had to build up a domain in which I joined 6 computers. The domain is called consto (not contoso!). Here is how to query against the ADSI (active domain service interface).

1) Using a linked Server (Linked server is called ADSI)

you use OPENQUERY to get results over a linked server:

SELECT * FROM OPENQUERY( ADSI, 'SELECT Name, displayName,givenname,distinguishedName, SAMAccountName FROM ''LDAP://,dc=consto,dc=com''')

here is users a container and therefore it must be classified with cn. In order to link the server you must provide the credentials of a user, which has right to read the informarmation from AD

2) Using direct access

you use OPENROWSET to access the AD Service

SELECT Name, displayName,givenname,distinguishedName, SAMAccountName, telephoneNumber


OPENROWSET('ADSDSOObject','adsdatasource'; 'consto\kim_akers';'herecomespassword*****',

'SELECT Name, displayName,givenname,telephoneNumber, distinguishedName, SAMAccountName

FROM ''LDAP://,dc=consto,dc=com''')

You can find out the list of the attributes using the Active Directory Explorer v1.44 by Mark Russinovich [click here]