Fragen Sie den externen LDAP-Server von SQL Server ab

7

Ich habe umfangreiche Nachforschungen zur Abfrage von LDAP-Servern angestellt, konnte diese jedoch bisher nicht umgehen. Bitten Sie daher Experten um Hilfe

Hintergrund: Ich habe einen Client, dessen LDAP-Server OnPremise ist (obwohl er öffentlich zugänglich ist), und ich habe einen SQL Server (2012 SE) in der Firewall. Die Kommunikation zwischen dem externen LDAP und dem internen SQL Server ist in Ordnung, da ich mich gegenseitig anpingen kann. Ich habe auch ein Remotedomänenkonto erstellt und dieses Konto beim Erstellen eines Verbindungsservers auf SQL Server verwendet. Ich habe auch unseren internen Domänencontroller mit Domänenvertrauensbeziehung. Jetzt habe ich 2 Verbindungsserver mit dem Domänenkonto erstellt, konnte jedoch LDAP-Server weder intern noch extern abfragen. Ich hoffe das macht Sinn. Wie auch immer, hier sind die Definitionen meines Verbindungsservers und die Fehler, die ich erhalte

[Gelöst] Verbindungsserver mit einem internen LDAP-Server : Dies wurde mithilfe von [email protected] anstelle von domain / ADuser behoben

USE [master]
GO

EXEC master.dbo.sp_addlinkedserver @server = N'ADSI', @srvproduct=N'Active 
Directory Service Interfaces', @provider=N'ADSDSOObject', 
@datasrc=N'adsdatasource'

EXEC master.dbo.sp_addlinkedsrvlogin 
@rmtsrvname=N'ADSI',@useself=N'False',@locallogin=NULL,
@rmtuser=N'Domain/ADUser',@rmtpassword='########'

Error:

Nachricht 7321, Ebene 16,
Status 2, Zeile 1 Beim Vorbereiten der Abfrage "SELECT * FROM 'LDAP: //Domain.com/OU=Accounts,DC=Domain,DC=com' --WHERE objectClass = 'User ist ein Fehler aufgetreten '"zur Ausführung gegen den OLE DB-Provider" ADSDSOObject "für den Verbindungsserver" ADSI ".

Verbindungsserver mit einem externen LDAP-Server

USE [master]
GO


EXEC master.dbo.sp_addlinkedserver @server = N'ADSIE', @srvproduct=N'Active 
Directory Service Interfaces', @provider=N'ADSDSOObject', 
@datasrc=N'CustomerIPAdress'

EXEC master.dbo.sp_addlinkedsrvlogin 
@rmtsrvname=N'ADSI',@useself=N'False',@locallogin=NULL,
@rmtuser=N'Domain/ADUser',@rmtpassword='########'

Error:

Meldung 7399, Ebene 16, Status 1, Zeile 1 Der OLE DB-Anbieter "ADsDSOObject" für den Verbindungsserver "ADSIE" hat einen> Fehler gemeldet. Der Anbieter gibt an, dass der Benutzer nicht berechtigt war, den Vorgang auszuführen. Nachricht 7321, Ebene 16, Status 2, Zeile 1 Beim Vorbereiten der Abfrage "SELECT * FROM 'LDAP: // Kunden-IP-Adresse' WHERE objectClass = 'User'" zur Ausführung gegen den OLE DB-Anbieter "ADsDSOObject" für den Verbindungsserver ist ein Fehler aufgetreten > "ADSIE".

Jede Hilfe wäre dankbar. Vielen Dank im Voraus.

Sid
quelle
Ein Teil davon ist gelöst. Ich habe immer noch Probleme, wenn ich einen externen LDAP-Server abfrage. Natürlich, wenn ich es gelöst habe, werde ich mehr als glücklich sein, die Lösung bereitzustellen.
Sid
Haben Sie überlegt, sich für ein SSIS-Paket zu entscheiden? Vielleicht möchten Sie einen Blick auf meine Antwort auf stackoverflow.com/questions/8594775/… werfen . Auch wenn Sie sich an Ihre aktuelle Methode halten, finden Sie in den anderen Antworten hier einige gute Informationen, die möglicherweise hilfreich sind.
JamieSee
Ja, ich habe die Lösung bereits im Link ausprobiert. Ich habe jedoch immer "Abfrage nicht erstellen" oder "Syntaxfehler" erhalten. Ich habe sichergestellt, dass die Syntax in Ordnung ist, aber ich weiß nicht, warum diese Fehler immer noch auftreten
Sid
Führen Sie die Abfrage für den Verbindungsserver über einen SQL Agent-Jobschritt oder in einem Abfragefenster mit SSMS aus? Wenn es in einem SSIS SQL Agent-Jobschritt ausgeführt wird, müssen Sie möglicherweise einen Proxy erstellen, der an ein Domänenbenutzerkonto gebunden ist, für das Ihr AD-Administrator die entsprechenden Rechte zum Lesen von AD erteilt hat. Wenn es in einem T-SQL-Jobschritt ausgeführt wird, müssen Sie möglicherweise den Jobbesitzer ändern. Siehe technet.microsoft.com/en-us/library/ms189064(v=sql.105).aspx
JamieSee
Der obige Fehler tritt auf, wenn ich die Abfrage über SSMS ausführe.
Sid

Antworten:

1

Was in Ihrer zweiten Fehlermeldung am meisten auffällt, ist die folgende Meldung:

Der Anbieter gibt an, dass der Benutzer nicht berechtigt war, den Vorgang auszuführen

Dies sagt mir, dass der Benutzer in Ihrer Verbindungsserverkonfiguration keinen Zugriff auf den AD / LDAP-Server hat, um diese Abfrage auszuführen. Hier sind meine ADSI-Konfigurationen zusammen mit einer Beispielabfrage. Möglicherweise müssen Sie Ihr SA-Team einbeziehen, um sicherzustellen, dass das auf Ihrem Verbindungsserver konfigurierte Konto über den richtigen Zugriff auf die Abfrage von AD / LDAP verfügt.

    USE [master]
GO

/****** Object:  LinkedServer [ADSI]    Script Date: 11/10/2017 3:46:31 PM ******/
EXEC master.dbo.sp_addlinkedserver @server = N'ADSI', @srvproduct=N'Active Directory Services 2.5', @provider=N'ADSDSOObject', @datasrc=N'adsdatasource'
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'ADSI',@useself=N'False',@locallogin=NULL,@rmtuser=N'domain\accountname',@rmtpassword='########'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'collation name', @optvalue=NULL
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO

Hier ist ein Beispiel für die Verwendung des ADSI-Verbindungsservers mit openquery. Sie müssen jedoch die OU-Struktur und die Domänenstruktur von AD kennen, bevor Sie die LDAP-Verbindungszeichenfolge erstellen.

SELECT sn, displayName, givenName, mail, telephoneNumber, ipPhone, sAMAccountName
FROM OPENQUERY(ADSI, 
'SELECT sAMAccountName, displayName, telephoneNumber, ipPhone, mail, givenName, sn 
FROM ''LDAP://DC=test,DC=intranet,DC=com'' WHERE objectCategory = ''Person'' AND objectClass = ''user''')
AS derivedtbl_1

HINWEIS: Ich habe den DC-Namen in der LDAP-Zeichenfolge aus Sicherheitsgründen geändert, aber Sie sollten in der Lage sein, sich ein Bild zu machen.

H.79
quelle