web-dev-qa-db-fra.com

Requête Server LDAP externe de SQL Server

J'ai effectué des recherches approfondies sur Querying LDAP Server, mais jusqu'à présent, n'a pas été capable de contourner. Par conséquent, demandez aux experts de l'aide

Contexte : J'ai un client dont le serveur LDAP est surpremise (bien que face au public) et j'ai un serveur SQL (2012 SE) à l'intérieur du pare-feu. La communication entre le LDAP externe et le serveur SQL interne conviennent bien car je peux ping l'un l'autre. J'ai également créé un compte de domaine distant et utilisé ce compte lors de la création de serveur lié sur SQL Server. J'ai aussi notre contrôleur de domaine interne qui a une relation de fiducie de domaine. Maintenant, j'ai créé 2 serveurs liés à l'aide d'un compte de domaine, mais je n'ai pas été en mesure de demander à LDAP Server sur en interne et en externe. J'espère que cela a du sens. Quoi qu'il en soit, voici les définitions de mon serveur et d'erreurs liées que je reçoive

[Résolu] serveur lié à un serveur LDAP interne: Ceci a été résolu en utilisant [email protected] au lieu de domaine/aduseur

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='########'

Erreur:

MSG 7321, niveau 16, état 2, ligne 1 Une erreur s'est produite lors de la préparation de la requête "Select *
[.____] de 'ldap: //domain.com/ou=accounts,dc=Domain,dc=com' - Où ObjectClass = 'User' "pour l'exécution contre OLE DB fournisseur" adsdsoObject "pour Serveur lié "ADSI".

serveur lié à un serveur LDAP externe

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='########'

Erreur:

MSG 7399, niveau 16, état 1, ligne 1 Le fournisseur db OLE DB "adsdsoObject" pour serveur lié "adsie" a signalé une erreur> erreur. Le fournisseur indique que l'utilisateur n'avait pas la permission de> effectuer l'opération. MSG 7321, niveau 16, État 2, ligne 1 Une erreur s'est produite lors de la préparation de la requête "Sélectionnez * à partir de 'LDAP: // Adresse IP du client" Où ObjectClass = "Utilisateur" pour l'exécution contre OLE DB fournisseur "adsdsoObject "Pour serveur lié>" adsie ".

Toute aide serait appréciée. Merci à l'avance.

7
Sid

Ce qui se distingue le plus dans votre deuxième message d'erreur est le message ci-dessous:

Le fournisseur indique que l'utilisateur n'avait pas la permission d'effectuer l'opération

Cela me dit que l'utilisateur de votre serveur Lield Server configuraiton n'a pas accès au serveur Ad/LDAP pour effectuer cette requête. Voici mes configurations ADSI avec un exemple de requête. Vous devrez peut-être engager votre SA pour vous assurer que le compte configuré dans votre serveur lié dispose de l'accès correct à la requête Ad/LDAP.

    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

Voici un exemple d'utilisation du serveur lié ADSI utilisant OpenQuery, mais vous devez comprendre la structure ou la structure de domaine de l'annonce avant de créer la chaîne de connexion LDAP.

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

Remarque: j'ai changé le DC Nom de la chaîne LDAP pour des raisons de sécurité, mais vous devriez pouvoir obtenir l'idée.

1
H.79